📄 8250.c
字号:
/************************************************************/
8250 Module Subroutine by 易兵
Copyright 《单片机编程世界》 1999
/************************************************************/
#define UartBase 0x6000
#define UartData XBYTE[UartBase+0x0000]
#define UartDLL XBYTE[UartBase+0x0000]
#define UartIER XBYTE[UartBase+0x0001]
#define UartDLM XBYTE[UartBase+0x0001]
#define UartIIR XBYTE[UartBase+0x0002]
#define UartLCR XBYTE[UartBase+0x0003]
#define UartMCR XBYTE[UartBase+0x0004]
#define UartLSR XBYTE[UartBase+0x0005]
#define UartMSR XBYTE[UartBase+0x0006]
#define UartSCR XBYTE[UartBase+0x0007]
/* for UART routine */
data char uart_rx_char;
data bit uart_rx_ready;
void UartInit(void); /* Photo type of routine */
void UartInit()
{
UartLCR = 0x80; /* Change to Baud Gen. mode*/
UartDLL = 0x0c; /* Baud = 1.8432M /16 /0x0c*/
UartDLM = 0x00;
UartLCR = 0x03; /* Change to N,8,1*/
UartIER = 0x01; /* 0000 0001 - Int When Rx data */
Uart2LCR = 0x80; /* Change to Baud Gen. mode*/
Uart2DLL = 0x0c; /* Baud = 1.8432M /16 /0x0c*/
Uart2DLM = 0x00;
Uart2LCR = 0x03; /* Change to N,8,1*/
Uart2IER = 0x01; /* 0000 0001 - Int When Rx data */
}
void UartSend(char); /* Photo type of routine */
void UartSend(char c)
{ UartData = c; /* Tx the char.*/
UartCrcCalc(c);
while((UartLSR&0x20)==0);
}
char UartGet(void); /* Photo type of routine */
char UartGet()
{ if (UartLSR&0x01)
return(UartData);
return(0x00);
}
void UartStr(char *); /* Photo type of routine */
void UartStr(char *c)
{ data unsigned char d=0;
while (c[d]!=0)
UartSend(c[d++]); /* char to Uart */
}
/* subroutine for Interrupt Service */
void interrupt1() interrupt 2
{
EX1=0;
uart_rx_char=UartData;
if (!uart_rx_ready)
{
uart_rx_ready=1;
UartInit();
}
EX1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -