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

📄 d1cputest.c

📁 通过对双口ram 操作判断硬件正确性
💻 C
字号:
/********************************************************************************************************************************************
   0000H-07FFH----D10,SHARED WITH D20         																							  	*                                                                                           
   8000H-9FFFH----D11,SHARED WITH CP          																							  	*
   2000H-27FFH----D12,SHARED WITH D21         																							  	*
   E000H-FFFFH----D15,SHARED WITH NP          																							  	*
   A000H-BFFFH----HIGH BYTE                   																							  	*
   EX_INT1---双口RAM(D10,D12)中断 (外部中断1)																							  	*
   S_INT---RS232 COMMUNICATION                																							  	*																							  	*
   电路板接口验收程序																																		  	*
						SDF		2007.12.26																								  	*
*********************************************************************************************************************************************/
#include <reg52.h>
#include <absacc.h>

typedef unsigned char byte;
typedef unsigned int  word;

//sfr T2MOD=0xc9;
//sfr WDTRST=0xa6;//看门狗寄存器地址
//sfr AUXR=0x8e;//辅助寄存器地址
//sfr AUXR1=0xa2;//辅助寄存器1地址

#define np_ram(p) XBYTE[0xe000+p]//NP存储区p地址处数据
#define cp_ram(p) XBYTE[0x8000+p]//CP存储区p地址处数据
#define hign      XBYTE[0xa000]
#define share_buf(p) XBYTE[p]		//D10,D12

sbit INTACLR=P1^0;
sbit INTRE3=P1^1;
sbit INTRE4=P1^2;
///////////////////////////////////////////////////////
void ex0_isr() interrupt 0 using 3
{//外部中断0程序入口,与CP共享DRAM有数据存入,JBU to GC
	 
}

void ex1_isr() interrupt 2 using 2
{//外部中断1程序入口,D20或D21有数据输入
     
}

void start_cpu(){//初始化子程序
     IE=0x95;   //开中断,允许外部中断0、1和串口中断
     IP=0x00;   //外部中断0,1为高优先级中断为高优先级中断
     TCON=0x01; //外部中断0为下降沿触发,1为电平触发
	 INTRE3=0;	//初始化54LS74
	 INTRE4=0;
	 INTACLR=0;	//输出端清0,D22A输出为高电平
	 INTACLR=1;
}
/////////////////////////////////////////////////////
void main(void){
	word runnum0=0,runsum0=0;
	bit state0_flag=0;
	word runnum1=0,runsum1=0;
	bit state1_flag=0;
	word runnum3=0,runsum3=0;
	bit state3_flag=0;

	for(runnum1=0;runnum1<0x7ff;runnum1++)	//清DRAM	
		share_buf(runnum1)=0;
	runnum1=0;
	share_buf(0)=0x5a;
	share_buf(1)=0xa5;
    start_cpu();//初始化单片机
		     
	INTRE3=1;//发中断信号
	INTRE3=0;	
    while(1){
		if((!state0_flag))	//CP与IP DRAM
		{	
			runnum1++;
			if(runnum1==50000)	
			{
				runsum1++;
				runnum1=0;
			}
			if(runsum1==50000)		//出错
			{	
				cp_ram(0x0000)=1;
				cp_ram(0x0000)=1;
				state0_flag=1;				
			}
			if((cp_ram(0)==0x5a)&&(cp_ram(1)==0xa5))	//与CP的DRAM
			{
				cp_ram(0)=0xa5;
				cp_ram(1)=0x5a;
				state0_flag=1;
			}

		}

		if((!state1_flag))	//D1写	D20读出错否
		{	
			runnum1++;
			if(runnum1==50000)	
			{
				runsum1++;
				runnum1=0;
			}
			if(runsum1==50000)		//D1写错或读错,D20写错或读错
			{	
				cp_ram(0x0002)=2;
				cp_ram(0x0003)=2;
				state1_flag=1;	
			}
			if((share_buf(0)==0xa5)&&(share_buf(1)==0x5a))//正确
			{
				cp_ram(0x0002)=1;
				cp_ram(0x0003)=1;
				state1_flag=1;
			}
			else if((share_buf(0)==1)&&(share_buf(1)==1))	//D1写错或D20读错
			{
				cp_ram(0x0002)=2;
				cp_ram(0x0003)=1;
				state1_flag=1;
			}

		}
		
		if((!state3_flag))	//串口发送回传否
		{	
			runnum3++;
			if(runnum3==50000)	
			{
				runsum3++;
				runnum3=0;
			}
			if(runsum3==50000)		//出错
			{	
				cp_ram(0x0004)=2;
				state3_flag=1;
				
			}
			if((share_buf(2)==0x5a)&&(share_buf(3)==0xa5))//串口收发正确
			{
				cp_ram(0x0004)=1;
				state3_flag=1;	
			}
		}
		
   }
}

⌨️ 快捷键说明

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