写了一个太阳能充电管理系统的程序,其中使用了1602显示、AD转换、继电器控制等等,但是使用Proteus仿真时出现了一个不清楚的bug,有请各位大佬帮我讲解一下
出现bug的部分程序是这样的:
/***********T0
中断服务程序
************/
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
if(uc_Clock==0)
{
uc_Clock=5;
b_DATransform=1;
}
else
uc_Clock--;
TH0=0x3C; //恢复定时器0。
TL0=0xB0;
}
出现的bug是程序中的第407行-420行的那个中断服务函数中的那个if语句,如果去掉,仿真中1602便不可以显示(但是在实际中可以显示),不去掉仿真便可以正常显示,并且那个if语句中的内容并没有实际意义,程序中都没有使用,我把程序修改成这样
/***********T0
中断服务程序
************/
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
if(uc_Clock==0)
{
//uc_Clock=5;
// b_DATransform=1;
}
else
uc_Clock--;
//TH0=0x3C; //恢复定时器0。
//TL0=0xB0;
}
1602也还可以显示,(CLK=~CLK; 是用作给ADC0809提供一个频率的不能去掉 )剩下的一去掉1602便不可以显示了
真的非常纳闷这样一个问题,希望各位大佬指点两下
我将Protues仿真文件和程序均以打包在下方,程序在实际中是可以使用的,程序中有关于1602显示,AD转换,独立键盘可控制,继电器控制的内容,有需要的朋友可以借鉴一下
|