📄 8251.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 RECBUFADDR 0x0000
#define uchar unsigned char
#define uint unsigned int
uchar xdata *RecBufPtr = RECBUFADDR;
uchar err = 0;
void init8251(void);
void COMM8251TX(uint,uchar);
uint COMM8251RX(uint);
void Compare(uchar, uchar);
void delay(uchar);
void main(void)
{
uchar tx_data, rx_data;
init8251();
while(1)
{
for(tx_data=0;tx_data<=0xff;tx_data++)
{
COMM8251TX(S8251D_1,tx_data);
delay(2);
COMM8251TX(S8251D_2,COMM8251RX(S8251D_2));
delay(2);
if(RecBufPtr<=0x7fff)
{
*RecBufPtr = COMM8251RX(S8251D_1);
rx_data = *RecBufPtr;
RecBufPtr++;
}
else
RecBufPtr = RECBUFADDR;
Compare(tx_data, rx_data);
}
}
}
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 COMM8251TX(uint tx_addr, uchar tx_value)
{
while(!(XBYTE[tx_addr+1]&0x01));
XBYTE[tx_addr] = tx_value;
}
uint COMM8251RX(uint rx_addr)
{
uchar temp;
while(!(XBYTE[rx_addr+1]&0x02));
temp = XBYTE[rx_addr];
return(temp);
}
void Compare(uchar tx_value, uchar rx_value)
{
if(tx_value == rx_value)
err = 0;
else
err++;
}
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 + -