小弟最近在寫一個12864點陣的顯示界面,在定時器中斷函數中碰到無法正常調用外部函數的問題,程序簡要如下:
問題: 在定時器中斷函數中,無法正確調用SetX() 和SetY()函數,只能將SetX()和SetY()的內容全部拷貝進去才能實現功能,
在調用DisplayL()時,也不能直接調用SetX()和SetY(),要拷貝其內容進去,
在中斷函數中多次調用DisplayL()時,也會出現不正常,要把所有函數的原始內容替代原是函數才能正常執行,請問這是怎么回事?
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); }
|