SH88F6161 Bank不及时切换导致程序执行出问题

SH88F6161单片机是8051核,但由于其外设较多,导致8位SFR寻址不够用,是分BANK管理。所以编程时需特别注意!在主程序和中断中需时刻注意Bank0、Bank1切换的问题。不然很可能导致程序工作不正常。
SH88F6161 Bank不及时切换导致程序执行出问题_第1张图片
#define select_bank0() INSCON=0x00
#define select_bank1() INSCON=0x401.

  1. 主程序中
select_bank1();	 //P5~P7 属于bank1    
P5CR = 0x02;    
P5 =   0x02;	
P5PCR = 0x0F;			   
P6CR = 0x02;    
P6   =0x02;    
P7CR = 0x02;    
P7   = 0x02;	
select_bank0();
  1. 中断中,每个中断服务程序中,都需要加
select_bank0(); 

在Timer2中添加如下:

void INT_TIMER2(void) interrupt 5
{ 	
	uint8_t i; 	
	_push_(INSCON); 	
	select_bank0();  	
	if(T2CON&0x80)	
	{	  
		T2CON &=0x7F;   //定时器溢出中断,清溢出标志	
	}
	......		//用户代码区
	_pop_(INSCON);        
}

你可能感兴趣的:(#,51)