📄 serial port.c
字号:
/******************************************************************
* *
* 单片机开发系统演示程序 - 串行通迅(中断方式) *
* *
* P0口 LED 显示 *
* *
* 工作芯片:AT89S52 晶振频率:11.0592MHz *
* *
* 版本: V1.0 (2006/11/20) *
* *
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
* *
*******************************************************************
* *
* 描述: *
* *
* 主机发送数据给单片机,单片机接收到数据后,再发送给主机。 *
* *
* P0口LED显示接收数据的ASCII码。 *
* *
******************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar buf;
/*********************************************************
发送数据函数
*********************************************************/
void senddata(uchar dat)
{
SBUF =dat;
while(!TI);
TI = 0;
}
/*********************************************************
串行中断服务函数
*********************************************************/
void serial() interrupt 4
{
ES = 0; //关闭串行中断
RI = 0; //清除串行接受标志位
buf = SBUF; //从串口缓冲区取得数据
if(buf!=0x0D)
{
if(buf!=0x0A)
senddata(buf);
P0=~buf;
}
ES = 1; //允许串口中断
}
/*********************************************************
主函数
*********************************************************/
void main(void)
{
P0 = 0xff;
P2 = 0xff;
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
while(1); //等待串行中断
}
/*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -