基於51微控制器的pwm和串列埠通訊

2021-08-10 18:58:28 字數 1514 閱讀 2324

此例程設定了按鍵可以調整100-1000hz的不同頻率(100的倍數)的方波,另外還加入了串列埠通訊,可以通過串列埠傳送來的數字來設定相對應的頻率;

#include #include"uart.h"

sbit pwmout = p1^0;

sbit led = p2^2;

sbit key1 = p1^2;

sbit key2 = p3^3;

unsigned char highrh = 0; //高電平過載值的高位元組

unsigned char highrl = 0; //高電平過載值的低位元組

unsigned char lowrh = 0; //低電平過載值的高位元組

unsigned char lowrl = 0; //低電平過載值的低位元組

unsigned int fr;

unsigned int k=0,t,i;

unsigned int s= 100;

unsigned char a[3];

unsigned int b=0;

void configpwm(unsigned int fr, unsigned char dc);

void configuart(unsigned int baud);

void delay(unsigned int n)

void main()

keybuf1 = key1; //把當前掃瞄值暫存

if (keybuf1 != backup1) //當前值與前次值不相等說明此時按鍵有動作

backup1 = keybuf1; //更新備份為當前值,以備進行下次比較

}configpwm(s,50);

}keybuf2 = key2; //把當前掃瞄值暫存

if (keybuf2 != backup2) //當前值與前次值不相等說明此時按鍵有動作

backup2 = keybuf2; //更新備份為當前值,以備進行下次比較

}configpwm(s,50);}}}

void configuart(unsigned int baud)

void configpwm(unsigned int fr, unsigned char dc)

void interrupttimer0() interrupt 1

else //當前輸出為低電平時,裝載高電平值並輸出高電平

}/*void timer1init()

void timer1() interrupt 3

} }*/

void comint() interrupt 4 //中斷接收程式

else

*/b=0;s=(a[0]-0x30)*100+(a[1]-0x30)*10+(a[2]-0x30);

k=1;

//sbuf = 't';

} }

if(ti)

}

51微控制器 PWM

pwm,全稱pulse width modulation,譯為脈衝寬度調製。功能 改變脈衝寬度,實現不同效果。可用數碼訊號達到模擬訊號的效果 pwm在微控制器中應用廣泛,不同的應用場合意義不盡相同。先看一張圖 這是乙個週期為10ms,頻率為100hz的波形。每個週期內的高低電平脈衝寬度各不相同,這就...

普中51pwm 基於51微控制器的pwm和串列埠通訊

include include uart.h sbit pwmout p1 0 sbit led p2 2 sbit key1 p1 2 sbit key2 p3 3 unsigned char highrh 0 高電平過載值的高位元組 unsigned char highrl 0 高電平過載值的低...

51微控制器學習 PWM

pwm 脈衝寬度調調製,它是按一定規律改變脈衝序列的脈衝寬度,以調節輸出量和波形的一種調製方式。我們在控制系統中最常用的矩形pwm訊號,在控制時需要調節pwn波的占空比 指的是高電平持續時間在乙個週期時間內的百分比 當用微控制器io口輸出pwm訊號時,可採用下面三種方法 1 利用軟體延時。當高電平延...