# include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint a,b,c,d;
/*a為舵機1的脈沖寬度,b為舵機2的脈沖寬度,單位1/1000 ms */
/*c、d為中間變量*/
/*以下定義輸出管腳*/
sbit p12=P1^2;
sbit p13=p1^3;
sbit p37=P3^7;
/*以下兩個函數為定時器中斷函數*/
/*定時器1,控制舵機1,輸出引腳為P12,可自定義*/
void timer0(void) interrupt 1 using 1
{p12=!p12; /*輸出取反*/
c=20000-c; /*20000代表20 ms,為一個周期的時間*/
TH0=-(c/256); TL0=-(c%256); /*重新定義計數初值*/
if(c>=500&&c<=2500)c=a;
else c="20000-a"; /*判斷脈寬是否在正常范圍之內*/
}
/*定時器2,控制舵機2,輸出引腳為P13,可自定義*/
void timer1(void) interrupt 3 using 1
{p13=!p13;
d=20000-d;
TH1=-(d/256); TL1=-(d%256);
if(d>=500&&d<=2500)d=b;
else d="20000-b";
}
中斷程序執行完畢會自動返回的。在最后給C或D判斷完初始值以后就返回,
| 歡迎光臨 (http://www.denmoz.com/bbs/) | Powered by Discuz! X3.1 |