#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/*本代码实现串口的收发功能,PC发送什么单片机就接收什么,
然后单片机又把接收的发出去,本次编写了在发送单个字符串
函数上添加了字符串函数,方便以后发送字符串调用*/
//毫秒延迟函数
void delay(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<113;i++);
}
//串口初始化函数
void Uart_init()
{
TMOD |= 0x20; //定时器1工作在模式2,自动重装模式
SCON = 0x50; //串口工作方式1
PCON = 0;
TH1 = 0xfd; //波特率9600 (12M)
TL1 = 0xfd;
TR1 = 1; //启动定时器1
REN = 1; //允许接收
EA = 1; //允许中断
ES = 1; //串行中断允许
}
//串口发送一个字符函数
void Uart_send(unsigned char a)
{
SBUF = a; //SBUF是一个寄存器,将字符a寄存在SBUF中
while(!TI); //等待发送完毕
TI = 0; //软件复位
}
//串口发送字符串函数
void Uart_str(unsigned char *s)
{
while(*s != '\0') //判断字符串是否发送完毕
{
Uart_send(*s);
s++; //字符地址+1
}
}
void main()
{
Uart_init(); //串口初始化
while(1)
{
delay(1000);
}
}
//串口中断服务函数
void Uart() interrupt 4
{
unsigned char temp; //用于存放读出的寄存器SBUF中的值
if(RI) //检测串口接收中断标志,接收时为1
{
temp = SBUF; //将SBUF寄存器的值存在temp中
Uart_send(temp); //发送temp
RI = 0; //清中断标志
}
}
?
|