⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d20cputest.c

📁 通过环路串口判断串行通信电平转换芯片功能是否正常
💻 C
字号:
#include    <reg51.h>
 #include    <absacc.h>

#define hign      XBYTE[0xa000]
#define share_buf(p) XBYTE[p]		//D10,D12
#define  XTALL     14.7456 
 
typedef  unsigned char  byte;
typedef  unsigned int   word;

byte rec_step=0;
byte rec_data[3]={0,0,0};
word runnum0=0,runsum0=0;	//dram标志
word runnum1=0,runsum1=0;
bit state3_flag=0;
bit state0_flag=0;
bit state1_flag=0;
  ///////////////////////////////////////////////////
void  serial() interrupt 4 using 1{                //串行中断程序入口
	byte receive_num;

	if(RI==1)
	{
   		RI=0; 
		receive_num=SBUF;

		switch(rec_step)
		{
			case 0:	if(receive_num==0x5a)
					{
						rec_step++;
					}
			  		break;
			case 1: if(receive_num==0xa5)
					{
						rec_step++;
					}
			  		break;
		    case 2: if(receive_num==0x96)
					{						
						share_buf(0x0002)=0x5a;
						share_buf(0x0003)=0xa5;
						rec_step=0;
						state1_flag=1;
					}
			  		break;
			default:break;

		}
	}     
} 

void send_test()                       			//发送测试数据      
{
	SBUF=0x5a;                             
	while((TI==0));
	TI=0; 
 
    SBUF=0xa5;                             
	while((TI==0));
	TI=0; 

    SBUF=0x96;                             
	while((TI==0));
	TI=0;  
}
                                                                                                                                                                                                                                                                                                                                                                                                                   
void start_cpu()//初始化子程序
{
	TCON=0x01;//无外部中断
	TMOD=0x21;//定时器方式	 
	TL1=0xfd;
	TH1=0xfd;   /*串行通信波特率为9600*/
	SCON=0x58;//SCON=0xd0;//工作方式1,允许串行通信
	PCON=0x00;//波特率不加倍
	IP=0x10;//串行通信中断为高优先级中断
	IE=0x92;//开中断,允许定时器中断
	TR0=1;//定时器0计数
	TR1=1;//定时器1计数
} 
 ///////////////////////////////////////////////////////////////////////                                                                                                                       
void main(void){
	
	start_cpu();
    while(1){
		if((!state0_flag))	//D1与D20 DRAM
		{	
			runnum1++;
			if(runnum1==50000)	
			{
				runsum1++;
				runnum1=0;
			}
			if(runsum1==50000)		//出错
			{	
				share_buf(0x0000)=1;
				share_buf(0x0000)=1;
				state0_flag=1;				
			}
			if((share_buf(0)==0x5a)&&(share_buf(1)==0xa5))	//与CP的DRAM
			{
				share_buf(0)=0xa5;
				share_buf(1)=0x5a;
				state0_flag=1;
			}

		}

		if((!state3_flag))	//串口发送回传否
		{	
			send_test();
			state3_flag=1;	
		} 

		if((!state1_flag))	//收发
		{	
			runnum1++;
			if(runnum1==50000)	
			{
				runsum1++;
				runnum1=0;
			}
			if(runsum1==50000)		//D1写错或读错,D20写错或读错
			{	
				state1_flag=1;	
			}
		}
    }                                                                                                                                          
 }










































































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -