单片机c语言错误怎么改,这是程序

#include <reg51.h>
unsigned char a[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }

int m;
sbit x=P2^1;
sbit y=P2^0;
void delay()

{
unsigned int i;
for(i=200;i>0;i--)
;
}
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
P0=a[m/10];
y=0;
delay;
y=1;
P0=a[m%10];
x=0;
delay;
x=1;
}
}
void time0(void) interrupt 1 using 0
{
ACC++;
if(ACC==20)
{ACC=0;
m++;
if(m==60)
m==0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}

单片机乘除法要用到ACC与B寄存器
所以在中断程序中:

ACC++;


TH0=(65536-50000)/256;
TL0=(65536-50000)%256;


最后的两个除法把ACC的值改变了。把变量ACC改为一个其它的全局变量就好了。(比如定义一个全局变量unsigned char n;把ACC改为n;)

C语言编程中,变量最好让编译器自己处理,不要直接用某一个寄存器。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-12
延时函数调用 delay();
LZ应说清有啥问题麻..
第2个回答  2010-04-12
ACC是累加器,加法运算都会用到ACC,你程序里用ACC很多因素都会影响,这里一般都用自己定义的变量。
第3个回答  2010-04-12
提示啥错误?
相似回答