?? 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 + -