完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define uchar unsigned char #define uint unsigned int //#define _DEVICEFLAG_ ***it key0=P3^2; ***it key1=P3^3; ***it key2=P3^4; ***it key3=P0^3; ***it b1=P0^4; ***it k1=P2^4; ***it k2=P2^3; ***it k3=P2^2; ***it k4=P2^1; ***it k5=P2^0; void delay_ms (uint z) { uint x,y; for (x=z;x>0;x--) for (y=110;y>0;y--); } void init() { TMOD=0x01; TH0=0xfc; TL0=0x66; ET0=1; TR0=1; EA=1; TMOD|=0x01; //定时器T0,工作方式1 TH0=0xC3; TL0=0xC7; //这两个寄存器存的是计数器的计数开始的值,这两个值累加至溢出后正好是50ms ET0=1; //使T0中断可以溢出 EA=1; //开启总中断 TF0=0; //溢出位清零 TR0=1; //开启T0 } uchar ControlFlag=0; void timer0(void)interrupt 1 { static uchar i,count=0; TH0=0xfc; TL0=0x66; count++; if(key0 == 0) { #ifndef _DEVICEFLAG_ for(i=0;i<2;i++) { delay_ms(100); } if(key0 == 0) //按键2 { ControlFlag = 2; } else if(key0 == 1) { ControlFlag = 1; } #else if(key0 == 1) { ControlFlag = 1; } #endif } } //外部中断2服务程序 复位开关2 void timer1(void)interrupt 2 { static uchar i,count=0; TH0=0xfc; TL0=0x66; count++; if(key1 == 1) { for(i=0;i<2;i++) { delay_ms(100); } if(key1 == 0) { ControlFlag = 6; } else if (key1 == 1) { ControlFlag = 5; } } } //外部中断3服务程序 复位开关1 void it_timer3(void)interrupt 3 { static uchar i,count=0; // TMOD&=0xF0; // TH0=0x00; // TL0=0x00; // ET0=1; // EA=1; // TR0=1; TH0=0xC3; TL0=0xC7; count++; if(key2 == 1) { for(i=0;i<2;i++) { delay_ms(100); } if(key2 == 0) { ControlFlag = 4; } else if(key2 == 1) { ControlFlag = 3; } } } main() { k1=0; k2=0; k3=0; k4=0; k5=0; key3=0; init(); while(1) { #ifndef _DEVICEFLAG_ if((b1==1)||(key3 == 1)) { k5 = 1; } else if ((b1 == 0)&&(key3 == 0)) { k5 = 0; } #endif /************************************************************* *************************************************************/ #ifndef _DEVICEFLAG_ switch(ControlFlag) { case 1: //机器总开关长按 if(key3 == 0) //服务器+5V为0时 { if(b1 == 0) //K1断开时 { k1 = 1; k4 = 1; delay_ms(1000); k4 = 0; } else if (b1== 1) //K1闭合时 { k1 = 0; } } else if(key3 ==1) //服务器+5V为1时 { if(b1 == 0) //K1断开时 { k4 =1; delay_ms(1000); delay_ms(1000); delay_ms(1000); delay_ms(1000); k4 = 0; } else if(b1 ==1) //K1闭合时 { k4 = 1; delay_ms(1000); delay_ms(1000); delay_ms(1000); k1= 0; delay_ms(1000); k4 = 0; } } ControlFlag = 0; break; case 2: //机器总开关短按 if(key3 == 0) //服务器+5V为0时 { if(b1 ==0) //K1为断开时 { k1 = 1; k4 = 1; delay_ms(1000); k4 = 0; } else if (b1 == 1) //K1为闭合时 { k4 = 1; delay_ms(1000); k4 = 0; } } else if(key3 ==1) //服务器+5V为1时 { if(b1 == 0) //K1断开时 { k1 = 1; } else if(b1 ==1) //K1闭合时 { ; } } ControlFlag = 0; break; case 3: //复位开关1长按 if(b1 == 1) //K1闭合时 { k2 = 1; delay_ms(1000); delay_ms(1000); delay_ms(1000); k2 = 0; } ControlFlag = 0; break; case 4: //复位开关1短按 if(b1 == 1) //K1闭合时 { k1 = 0; delay_ms(1000); k1 = 1; } ControlFlag = 0; break; case 5: //复位开关2长按 if(key3== 1) { k3= 1; delay_ms(1000); k3 = 0; } ControlFlag = 0; break; case 6: //复位开关2短按 if(key3 == 1) { k3 = 1; delay_ms(1000); k3 = 0; } ControlFlag = 0; break; #endif default: break; } delay_ms(10); } } 为什么我的中断只是第一个被调用了,另外两个怎么没调用,求教 |
|
相关推荐
4个回答
|
|
|
|
第二个和第三个中断没响应么,是初始化里没写这两个中断没打开吧....
|
|
|
|
我知道了,是中断没初始化,也没有中断结束标志
|
|
|
|
51的中断响应中断程序后中断标志自动清了,不用程序管
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1115浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 08:38 , Processed in 1.598011 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号