📄 d1cputest.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 + -