51單片機(jī),藍(lán)牙控制舵機(jī)程序 #include<AT89x52.H> #include <intrins.h> unsigned char count; //0.5ms次數(shù)標(biāo)識 sbit pwm =P0^4; //PWM信號輸出 #define uint unsigned int #define uchar unsigned char uchar count = 0; uchar scount = 15; void delay(unsigned char i)//延時(shí) { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void init() { SCON=0x50; TMOD|=0x20; TH1=0xfd; TL1=0xfd; TCON|=0x40; TR1=1; ES = 1; EA=1; } void Time0_Init() //定時(shí)器初始化 { TMOD|= 0x01; //定時(shí)器0工作在方式1 IE|= 0x82; TH0 = 0xff; TL0 = 0x9c; //11.0592MZ晶振 TR0=1; //定時(shí)器開始 } /* 定時(shí)器0中斷服務(wù)程序 */ void Time0() interrupt 1 { TH0= 0xff; //重裝初值0.1ms TL0= 0x9c; if(count <= scount) //控制占空比左右 { //如果count的計(jì)數(shù)小于(5-25)也就是0.5ms-2.5ms則這段小t周期持續(xù)高電平。產(chǎn)生方波 pwm = 1; } else { pwm = 0; } count=(count+1); //0.5ms次數(shù)加1 count=count%200; //次數(shù)始終保持為40 即保持周期為20ms } void main() { count=0; Time0_Init(); init(); } //串口中斷 void time() interrupt 4 { unsigned char receiveData; receiveData=SBUF;//出去接收到的數(shù)據(jù) RI = 0;//清除接收中斷標(biāo)志位 SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器 while(!TI); //等待發(fā)送數(shù)據(jù)完成 TI=0; switch(SBUF) { case '1':scount--; if(scount <= 5) { scount = 5; } count = 0; break; case '2':scount++; if(scount >= 25) { scount = 25; } count = 0; break; case '3':scount--; if(scount<= 10) { scount = 10; } count = 0;break; case '4':scount++; if(scount >= 20) { scount = 20; } count = 0; break; } }
|