① 用51控制四驅循跡小車,用的是四路紅外線感測器,求中斷的PWM控制的程序。
調節占空比就是調節下面的ZKB1的值,此處是1~1000的范圍,要調節此值可以在while裡面加點語句。
#include<reg51.h>
typedef unsigned char unchar;
typedef unsigned char unint;
#define V_TH0 0XFF //調節 V_TH0 和V_TL0的值即調節周期
#define V_TL0 0X81
#define V_TMOD 0X01
sbit P1_0 = P1^0;
/************************主函數********************/
unchar ZKB1; //調節
main()
{
//ZKB1=11; /*占空比初始值設定8 18 1ms 32*/
//ZKB2=18; /*占空比初始值設1.5y定*/
init_sys();
while(1)
{ }
}
/******************************************************
*函數功能:對系統進行初始化,包括定時器初始化和變數初始化*/
void init_sys(void) /*系統初始化函數*/
{
/*定時器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
ZKB1=20;
// TR0=0;
// ET0=0;
// EA=0;
TR0=1;
ET0=1;
EA=1;
}
/*中斷函數*/
void timer0(void) interrupt 1 using 2
{
static unchar click=0; /*中斷次數計數器變數*/
TH0=V_TH0; /*恢復定時器初始值*/
TL0=V_TL0;
++click;
if (click>=1000) click=0;
if (click<=ZKB1) /*當小於占空比值時輸出低電平,高於時是高電平,從而實現占空比的調整*/
P1_0=1;
else
P1_0=0;
}