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