標(biāo)題: 藍牙或者串口控制舵機程序 [打印本頁]
作者: zzz666zzzz 時間: 2021-3-24 15:58
標(biāo)題: 藍牙或者串口控制舵機程序
51單片機,藍牙控制舵機程序
#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)//延時
{
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() //定時器初始化
{
TMOD|= 0x01; //定時器0工作在方式1
IE|= 0x82;
TH0 = 0xff;
TL0 = 0x9c; //11.0592MZ晶振
TR0=1; //定時器開始
}
/* 定時器0中斷服務(wù)程序 */
void Time0() interrupt 1
{
TH0= 0xff; //重裝初值0.1ms
TL0= 0x9c;
if(count <= scount) //控制占空比左右
{
//如果count的計數(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;
}
}
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |