返回信息流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;
}
}
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13129同步于 2013/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
我这里有个STC89C52单片机程序,不知为什么中断始终不执行,求
mktyou
2013/4/7镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 SIYO 的大作中提到: 】
: 注释什么的都不太对吧,总中断不是EA=1;么,而且,你开了两个定时器中断,却只有一个定时器中断服务函数,先把注释搞好吧
是这样,我的程序很长,我只截取了一部分,问题主要是cao这个变量一直是0,不会随着中断增加值,很奇怪
你这个变量在哪里定义的,是不是全局的?
【 在 mktyou 的大作中提到: 】
: 是这样,我的程序很长,我只截取了一部分,问题主要是cao这个变量一直是0,不会随着中断增加值,很奇怪
【 在 SIYO 的大作中提到: 】
: 你这个变量在哪里定义的,是不是全局的?
在整个文件的开头,和#include<reg52.h>平行,定义形式为unsigned int cao;
然后就是void main()
额,一个是查中断的初始化,一个是查中断入口是否正确,再者,看看程序是否在运行,就是主循环是不是也不执行。
【 在 mktyou 的大作中提到: 】
: 在整个文件的开头,和#include<reg52.h>平行,定义形式为unsigned int cao;
: 然后就是void main()
【 在 SIYO 的大作中提到: 】
: 额,一个是查中断的初始化,一个是查中断入口是否正确,再者,看看程序是否在运行,就是主循环是不是也不执行。
主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~
就是你的init函数里面关于定时器中断的配置,还有总中断的配置。这叫初始化。
所谓中断入口,就是中断函数名后面那个数字,1代表什么中断你弄明白没?
不写51程序好多年,自己查一下吧。
【 在 mktyou 的大作中提到: 】
: 主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~
【 在 mktyou 的大作中提到: 】
: 主程序在执行,前面两个是什么意思呀?能解释一下么?谢谢啦~~
我刚才加了中断点,发现就是没有执行中断。我真的是不知道为什么。。程序完全没有错啊。。