SH88F6161单片机是8051核,但由于其外设较多,导致8位SFR寻址不够用,是分BANK管理。所以编程时需特别注意!在主程序和中断中需时刻注意Bank0、Bank1切换的问题。不然很可能导致程序工作不正常。
#define select_bank0() INSCON=0x00
#define select_bank1() INSCON=0x401.
- 主程序中
select_bank1(); //P5~P7 属于bank1
P5CR = 0x02;
P5 = 0x02;
P5PCR = 0x0F;
P6CR = 0x02;
P6 =0x02;
P7CR = 0x02;
P7 = 0x02;
select_bank0();
- 中断中,每个中断服务程序中,都需要加
select_bank0();
在Timer2中添加如下:
void INT_TIMER2(void) interrupt 5
{
uint8_t i;
_push_(INSCON);
select_bank0();
if(T2CON&0x80)
{
T2CON &=0x7F; //定时器溢出中断,清溢出标志
}
...... //用户代码区
_pop_(INSCON);
}