No.107296 作者:wangxd5429 邮件:wangxd5429@sohu.com ID:30288 登陆:55次 文章数:56篇 最后登陆IP:211.103.220.197 最后登陆:2017/1/4 14:21:50 注册:2005/1/21 11:46:15 财富:452 发帖时间:2014/7/16 15:09:47 发贴者IP:61.148.244.154 标题:wangxd5429:[求助]关于51单片机的问题3 摘要:No.107296[求助]关于51单片机的问题3 各位高手,小弟正在基于STC51单片机开发程序,分配了2个中断,外部中断0和定时器1中断。主循环实时的计算并显示距离参数。系统开始运行后,主循环可以正常的计算并显示距离数据,但是进入外部中断0并且外部中断0成功返回后,主循环就停止了,不再计算并显示距离参数了,请教其中的原因,谢谢!部分代码如下: /************************************************************ 函数功能:主函数 *************************************************************/ void main() { LCD_init(); //调用LCD初始化函数 LCD_write_string(0,0,dis1);/*从第0列第0行起显示"机器人"*/ LCD_write_string(0,1,dis2);/*从第0列第1行起显示距离*/ Pwm_Init();/*脉宽调制初始化*/ EA=1; //开启总中断 EX0=1; //开外中断0 ,接收红外模块信号中断 ET0=1; //定时器T0中断允许 IT0=1; //外中断的下降沿触发 TMOD=0x01; //使用定时器T0的模式1,使用16位定时器 TR0=0; //定时器T0关闭,停止定时器 T1_Init();/*定时器1初始化*/ /*初始化占空比*/ CCAP0H=CCAP0L=0x2C; CCAP1H=CCAP1L=0x2C; while(1) //等待红外信号产生的中断 { //LCD_write_char(10,1,'0'); //delay_nms(1000); //LCD_write_char(10,1,'1'); //delay_nms(1000); StartModule();/*启动超声波测距模块*/ while(!RX); //当RX为零时等待 TR1 = 1;/*启动定时器1*/ while(RX); //当RX为1计数并等待 TR1 = 0;/*关闭定时器1*/ Count();/*计算距离*/ /*在LCD屏幕上显示距离*/ LCD_write_char(7,1,bai); LCD_write_char(8,1,shi); LCD_write_char(9,1,ge); //LCD_write_char(10,1,'0'); //delay_nms(1000); //LCD_write_char(10,1,'1'); delay_nms(200); } } /************************************************************ 函数功能:红外线触发的外中断处理函数 *************************************************************/ void Int0(void) interrupt 0 { EX0=0; //关闭外中断0,不再接收二次红外信号的中断,只解码当前红外信号 TH0=0; //定时器T0的高8位清0 TL0=0; //定时器T0的低8位清0 TR0=1; //开启定时器T0 ......
>>返回讨论的主题
|