小弟最近在寫一個12864點(diǎn)陣的顯示界面,在定時器中斷函數(shù)中碰到無法正常調(diào)用外部函數(shù)的問題,程序簡要如下:
問題: 在定時器中斷函數(shù)中,無法正確調(diào)用SetX() 和SetY()函數(shù),只能將SetX()和SetY()的內(nèi)容全部拷貝進(jìn)去才能實現(xiàn)功能,
在調(diào)用DisplayL()時,也不能直接調(diào)用SetX()和SetY(),要拷貝其內(nèi)容進(jìn)去,
在中斷函數(shù)中多次調(diào)用DisplayL()時,也會出現(xiàn)不正常,要把所有函數(shù)的原始內(nèi)容替代原是函數(shù)才能正常執(zhí)行,請問這是怎么回事?
void P1_C(unsigned char temp1) //Command Write Operation { while(FRP); CSS=0;rd=1; CD=1; P1=temp1; wr=0;wr=1; CSS=1; }
SetX(char x) { P1_C(0x64);delay(100); //Data Write Position X-Address Set P1_C(x);delay(100); }
SetY(char y) { P1_C(0x60);delay(100); //Data Write Position Y-Address Set P1_C(y);delay(100); }
DisplayL(char x,char y,char pcha[29]) { i=0;
//SetX(x);
//SetY(y); P1_C(0x64);delay(100); //Data Write Position X-Address Set P1_C(x);delay(100); P1_C(0x60);delay(100); //Data Write Position Y-Address Set P1_C(y);delay(100); while(i<14) { P1_D(pcha); i++; }
//SetX(x);
//SetY(y);
P1_C(0x64);delay(100); //Data Write Position X-Address Set P1_C(x);delay(100); P1_C(0x60);delay(100); //Data Write Position Y-Address Set P1_C(y+1);delay(100); while(i<28) { P1_D(pcha); i++; } }
void timer0() interrupt 1 using 1 {
TR0 =0; DisplayL(char x,char y,Ee);
DisplayL(char x,char y,Aa);
TR0=1;
}
main() { IT0 = 1; PX0 = 1; IE = 0x83; //啟動計時器0和中斷0; TMOD = 0x02;//計時器0工作在模式1下; TH0 = 256 - 100; TR0 = 1;
while(1); }
|