小弟最近在寫一個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);
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |