/* file name: uart.c
* author: yilonglucky#gmail.com
* description: loopback of uart for 51, and duplicate to P1
* NOTE: 波特率设置为9600. 无奇偶校验. 晶振11.0592MHz
*/
#include<reg52.h>
void SendByte(unsigned char c)
{
SBUF = c;
while(!TI)
{
/* do nothing */;
}
TI = 0;
}
void SendStr(unsigned char *s)
{
while('\0' != *s)
{
SendByte(*s);
s++;
}
/* add a new line after the string */
SendByte(13); /* 0x0D: CR (carriage return) */
SendByte(10); /* 0x0A: LF (NL linefeed, new line) */
}
void InitUART(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
//ES = 1; //打开串口中断
}
void main(void)
{
InitUART();
SendStr("UART Loopback Test: You can input anything to test!");
ES = 1; /* 打开串口中断 */
while (1)
{
/* trap here */;
}
}
void uart_routine(void) interrupt 4 //串行中断服务程序
{
unsigned char temp;
if(RI) //判断是接收中断产生
{
RI = 0; //标志位清零
temp = SBUF; //读入缓冲区的值
SBUF=temp; //把接收到的值再发回电脑端
P1 = temp; //把值输出到P1口,用于观察
}
if(TI) //如果是发送标志位,清零
{
TI = 0;
}
}
51之串口环回测试
最新推荐文章于 2024-06-18 11:29:29 发布