BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13129同步于 2013/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

我这里有个STC89C52单片机程序,不知为什么中断始终不执行,求

mktyou
2013/4/7镜像同步11 回复
void main( ) { unsigned char status; init(); InitializeSystem(); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); display_welcome(); while ( 1 ) { status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡 if (status != MI_OK) { display_welcome();continue; } //display_type();//寻到卡后显示出该卡的类型 status = PcdAnticoll(g_ucTempbuf);//防冲撞 if (status != MI_OK) { continue; } // display_cardnum();//显示寻到的卡的序列号 status = PcdSelect(g_ucTempbuf);//选定卡片 if (status != MI_OK) { continue; } status = PcdAuthState(PICC_AUTHENT1A, 6, DefaultKey, g_ucTempbuf);//验证卡片密码 if (status != MI_OK) { continue; } //status = PcdWrite(6, data1);//写块 //if (status != MI_OK) //{ display_welcome();continue; } if(cao==10) { display_money(); status = PcdValue(PICC_DECREMENT,6,data2);//扣款 if (status != MI_OK) { continue; } cao=0; ET0=1; } status = PcdBakValue(6, 5);//块备份 if (status != MI_OK) { continue; } status = PcdRead(5, g_ucTempbuf);//读块 if (status != MI_OK) { continue; } // display_money(); status = PcdRead(4, g_ucTempbuf);//读块 if (status != MI_OK) { continue; } display_cardata(); LED_GREEN = 0; delay1(100); LED_GREEN = 1; delay1(100); LED_GREEN = 0; delay1(200); LED_GREEN = 1; PCDHalt(); } } ///////////////////////////////////////////////////////////////////// //系统初始化 ///////////////////////////////////////////////////////////////////// void InitializeSystem() { TMOD=0x21; //设T0为方式1,GATE=1; SCON=0xF0; //串口工作方式为方式3 (SM0、SM1=1,SM2=1,REN=1,TB8=0) TH1=0xFA; //波特率为4800bps TL1=0xFA; TH0=0x3C; //单周期50ms TL0=0xB0; ET0=1; ET1=1; EX0=0; EX1=0; EA=1; ES=0; TR0=1; TR1=1; TI=1; //开启总中断 RI = 1; } void timer(void) interrupt 1 { TH0=0x3C; //单周期50ms TL0=0xB0; cao++; if(cao==10) { ET0=0; } }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
SIYO机器人#1 · 2013/4/7
注释什么的都不太对吧,总中断不是EA=1;么,而且,你开了两个定时器中断,却只有一个定时器中断服务函数,先把注释搞好吧
mktyou机器人#2 · 2013/4/7
【 在 SIYO 的大作中提到: 】 : 注释什么的都不太对吧,总中断不是EA=1;么,而且,你开了两个定时器中断,却只有一个定时器中断服务函数,先把注释搞好吧 是这样,我的程序很长,我只截取了一部分,问题主要是cao这个变量一直是0,不会随着中断增加值,很奇怪
SIYO机器人#3 · 2013/4/7
你这个变量在哪里定义的,是不是全局的? 【 在 mktyou 的大作中提到: 】 : 是这样,我的程序很长,我只截取了一部分,问题主要是cao这个变量一直是0,不会随着中断增加值,很奇怪
SIYO机器人#4 · 2013/4/7
最好再中断里面加个断点,看看是否真的进去了
mktyou机器人#5 · 2013/4/7
【 在 SIYO 的大作中提到: 】 : 你这个变量在哪里定义的,是不是全局的? 在整个文件的开头,和#include<reg52.h>平行,定义形式为unsigned int cao; 然后就是void main()
SIYO机器人#6 · 2013/4/7
额,一个是查中断的初始化,一个是查中断入口是否正确,再者,看看程序是否在运行,就是主循环是不是也不执行。 【 在 mktyou 的大作中提到: 】 : 在整个文件的开头,和#include<reg52.h>平行,定义形式为unsigned int cao; : 然后就是void main()
mktyou机器人#7 · 2013/4/7
【 在 SIYO 的大作中提到: 】 : 额,一个是查中断的初始化,一个是查中断入口是否正确,再者,看看程序是否在运行,就是主循环是不是也不执行。 主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~
SIYO机器人#8 · 2013/4/7
就是你的init函数里面关于定时器中断的配置,还有总中断的配置。这叫初始化。 所谓中断入口,就是中断函数名后面那个数字,1代表什么中断你弄明白没? 不写51程序好多年,自己查一下吧。 【 在 mktyou 的大作中提到: 】 : 主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~
mktyou机器人#9 · 2013/4/7
【 在 mktyou 的大作中提到: 】 : 主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~ 我刚才加了中断点,发现就是没有执行中断。我真的是不知道为什么。。程序完全没有错啊。。