KEIL C 编译器的问题
定时器中断中调用一个扫描数码管的子函数,数码管由74HC595驱动。
//-------------------------------------------------------------- void main(void) { init_mcu(); while(1) {
} } //-------------------------------------------------------------- void time0_over_int(void)interrupt 1 using 3 { uint i = TIMER0_TIME; // TR0 = 0; TL0 = i; TH0 = i>>8; TR0 = 1;
led_dly_one_byte(test_reg_1,1); } //-------------------------------------------------------------- void led_dly_one_byte(uchar number, bit dp) //参数1为显示的数字,十六进制 { //参数2为小数点控制位,1为显示 uchar i,j; i=~led_dly_table[number]; //取出的显示码是共阴,电路是共阳 if(dp) i&=0x7f; for(j=0;j<8;j++) { if((i&0x80)==0x80) DS=1; //串行数据输出制595 else DS=0; i<<=1; //左移 SHCP = 1; _nop_(); SHCP = 0; //串行时钟 } STCP = 1; //锁存 _nop_(); STCP = 0; } //-------------------------------------------------------------- 现象:数码管不显示小数点。 原因:见反汇编 问题:函数led_dly_one_byte的临时变量一会用R7,一会用0X07? 怎样避免类似的错误? |