文档库 最新最全的文档下载
当前位置:文档库 › 单片机两个外部中断+舵机控制程序

单片机两个外部中断+舵机控制程序

#include

sbit control_signal=P1^0;

unsigned char PWM_ON;
unsigned char count;

void delay(unsigned int z)//延时函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void Init_interrupt()
{
TMOD=0x11; //定时器T1工作于定时模式1;
TH1=(65536-45872)/256; //定时器T1的高8位设置初值,每50ms产生一次中断
TL1=(65536-45872)%256; //定时器T1的低8位设置初值,每50ms产生一次中断
ET1=1; //定时器T1中断允许
TR1=1; //启动定时器T1
EX0=1; //开外部中断0
EX1=1; //开外部中断1
IT0=1; //外部中断0跳变沿触发
IT1=1; //外部中断1跳变沿触发
EA=1; //开总中断
count=0; //将T0中断次数初始化为0
}

void main()
{
Init_interrupt();
while(1);
}

/*******************************************************
函数功能:外部中断Int0的中断服务函数,监控液滴速度
********************************************************/
void external0(void ) interrupt 0
{
PWM_ON=5;
}
/*******************************************************
函数功能:外部中断Int1的中断服务函数,点滴液限位报警
********************************************************/
void external1(void ) interrupt 2
{
PWM_ON=10;
}
/*******************************************************
函数功能:定时器T1的中断服务函数,用于计时
********************************************************/
void Time1(void ) interrupt 3 //定时器T1的中断编号为3
{
TH1=(65536-78)/256; //定时器T1高8位重新赋初值
TL1=(65536-78)%256; //定时器T1低8位重新赋初值
if (count{
control_signal = 1; //给高电平
}
else
{
control_signal=0;
}
count++;
if(count == 200)
{
count=0; //20ms一个周期
}
}

相关文档
相关文档 最新文档