📄 mcpu.c
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define S8251C_1 0x9001
#define S8251D_1 0x9000
#define S8251C_2 0xa001
#define S8251D_2 0xa000
#define S8251C_3 0xb001
#define S8251D_3 0xb000
#define S8251C_4 0xc001
#define S8251D_4 0xc000
#define COMM_CPU 0xd000
#define RECBUFADDR 0x0000
#define uchar unsigned char
#define uint unsigned int
uchar xdata *RecBufPtr = RECBUFADDR;
uchar err = 0;
sbit p33 = P3^3;
bit rx_flag = 0;
void InitMcpu(void);
void init8251(void);
void COMM8251TX(uint, uchar);
void delay(uchar);
void SendDataToScpu(uchar);
uchar ReadDataFromScpu(void);
void Compare(uchar, uchar);
void main(void)
{
uchar tx_data, rx_data, temp;
InitMcpu();
init8251();
while(1)
{
/* for(tx_data=0;tx_data<=0xff;tx_data++)
{
SendDataToScpu(tx_data);
p33 = 1;
_nop_();
p33 = 0;
_nop_();
p33 = 1; */
while(!rx_flag);
temp = ReadDataFromScpu();
rx_flag = 0;
SendDataToScpu(temp);
COMM8251TX(S8251D_1,temp);
p33 = 1;
_nop_();
p33 = 0;
_nop_();
p33 = 1;
/* if(RecBufPtr<=0x7fff)
{
*RecBufPtr = temp;
rx_data = temp;
RecBufPtr++;
}
else
{
RecBufPtr = RECBUFADDR;
*RecBufPtr = temp;
rx_data = temp;
RecBufPtr++;
}
// Compare(tx_data, rx_data); */
}
}
void InitMcpu(void)
{
p33 = 1;
IE = 0;
IT0 = 1;
EX0 = 1;
EA = 1;
}
void init8251(void)
{
XBYTE[S8251C_1] = 0;
XBYTE[S8251C_1] = 0;
XBYTE[S8251C_1] = 0;
XBYTE[S8251C_1] = 0x40; //方式字:异步x16,8位,无校验,1个停止位
delay(10);
XBYTE[S8251C_1] = 0x4e;
XBYTE[S8251C_1] = 0x37; //控制字:TxEN=1,DTR=1,RxE=1,SBRK=0,ER=1,RTS=x,IR=EN=0;
XBYTE[S8251C_2] = 0;
XBYTE[S8251C_2] = 0;
XBYTE[S8251C_2] = 0;
XBYTE[S8251C_2] = 0x40; //方式字:异步x16,8位,无校验,1个停止位
delay(10);
XBYTE[S8251C_2] = 0x4e;
XBYTE[S8251C_2] = 0x37; //控制字:TxEN=1,DTR=1,RxE=1,SBRK=0,ER=1,RTS=x,IR=EN=0;
}
void ExInt0(void) interrupt 0 using 2
{ uchar temp;
EX0 = 0;
rx_flag = 1;
// temp = ReadDataFromScpu();
EX0 = 1;
}
void SendDataToScpu(uchar tx_data)
{
XBYTE[COMM_CPU] = tx_data;
}
uchar ReadDataFromScpu(void)
{
uchar tmp;
tmp = XBYTE[COMM_CPU];
return(tmp);
}
void Compare(uchar tx_value, uchar rx_value)
{
if(tx_value == rx_value)
err = 0;
else
err++;
}
void COMM8251TX(uint tx_addr, uchar tx_value)
{
while(!(XBYTE[tx_addr+1]&0x01));
XBYTE[tx_addr] = tx_value;
}
void delay(uchar time)
{
uchar i, j;
for(j=0;j<time;j++)
for(i=0;i<0xff;i++)
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -