寫了一個太陽能充電管理系統的程序,其中使用了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轉換,獨立鍵盤可控制,繼電器控制的內容,有需要的朋友可以借鑒一下
|