//-------------函數聲明 變量定義---------------
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
//-------------定義引腳------------------------
sbit PWM=P1^0; //pwm波形輸出
sbit PWM1=P1^2;
sbit DR=P1^1; //方向控制
sbit DR1=P1^3;
#define time_data 0x9C //定時器預置值
#define PWM_T 100 //定義PWM的周期T為10ms
unsigned char PWM_t; //pwm_t為脈沖寬度,時間為0~10ms
unsigned char PWM_count; //輸出PWM周期計數
unsigned char time_count; //定時計數
bit direction; //方向標志位
//函數功能:初始化定時器
void timer_init()
{
TMOD=0X22; //定時器為工作模式2
PCON=0X00;
TF0=0;
TH0=time_data; //保證定時時長為0.1ms
TL0=TH0;
ET0=1;
TR0=1; //開始計數
EA=1; //中斷允許
}
//函數功能:設置PWM脈沖寬度和設定方向
void setting_PWM()
{
if(PWM_count==0) //初始設置
{
PWM_t=100;
direction=1;
}
}
//函數功能:定時器中斷處理程序 ,,,
void IntTimer0()interrupt 1
{
time_count++;
DR=direction;
DR1=direction;
if(time_count>=PWM_T)
{
time_count=0;
PWM_count++;
setting_PWM(); //每輸出1個PWM波計數一次
}
if(time_count<PWM_t)
{
PWM=1;
PWM1=1;
}
else
{
PWM=0;
PWM1=0;
}
}
//-------------主函數-----------
void main()
{
timer_init();
setting_PWM();
}
|