|
想弄個(gè)藍(lán)牙串口調(diào)pwm的程序,pwm輸出接的是開發(fā)板上LED燈,發(fā)現(xiàn)單獨(dú)的pwm程序沒問(wèn)題,單獨(dú)的藍(lán)牙也能正?刂,可是兩個(gè)程序加起來(lái)后,LED燈變得一閃一閃的,根本不是正常pwm輸出的現(xiàn)象,也沒法用手機(jī)控制,不知道是程序的問(wèn)題,還是定時(shí)器0中斷和串口中斷優(yōu)先級(jí)的問(wèn)題?用的是stc89c52的單片機(jī),是不是pwm得用定時(shí)器2,才能用藍(lán)牙正常控制呢。。
單片機(jī)源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit pwm_out = P1^0;
- uint num = 200;
- uint pwm = 0;
- void UART_Init()
- {
- SM0 = 0;
- SM1 = 1;
- REN = 1;
- EA = 1;
- ES = 1;
- TMOD = 0x20;
- TH1 = 0xfd;
- TL1 = 0xfd;
- TR1 = 1;;
- }
- void time0int()
- {
- TMOD = 0x02;
- TH0 = 220;
- TL0 = 220;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
- }
- void time0() interrupt 1
- {
- TR0 =0;
- TH0 = 220;
- TL0 = 220;
- pwm++;
- if(pwm == 500)
- pwm_out = pwm = 0;
- if(num == pwm)
- pwm_out = 1;
- TR0 = 1;
- }
- void UART() interrupt 4
- {
- if(RI)
- {
- RI = 0;
- switch(SBUF)
- {
- case 0x02: if(num<=450) num+=50; break;
- case 0x01: if(num >50); num-=50;; break;
- }
- }
- }
- void main()
- {
- time0int();
- UART_Init();
- while(1);
- }
復(fù)制代碼
|
|