📄 串口通信.c
字号:
//=====================================================================//
// 串口通信程序演示 //
// 本程序通过数码管,Led指示灯的闪亮来表示当前串口通信的结果,串口通信使//
//单片机与电脑之间通信的桥梁,通过对它的学习,可以很好的用电脑来进行单片 //
//的控制,及对单片机数据的采集.因此串口通信被广泛的用于工业控制中. //
// 程序运行效果: 打开本机电源开关后,可以看到P1端Led指示灯在不停的闪耀//
//,我们使用"串口调试助手"或其它软件向单片机发送数据,可以看到相应的数据 //
//显示在数码管上,并且发送的数据又返回到电脑中.(只显示0-9数字) //
//---------------------------------------------------------------------//
// 开发日期: 2009/01/29 编写串口通信程序演示的最初代码 //
// 修改日期: //
// 程序作者: guojun 邮箱:Guojun2008a@126.com //
// 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. //
//=====================================================================//
#include <at89x51.h> //包含51单片机相关头文件
#define RunLed P1 //定义运行指示灯显示端口
#define ShowPort P2 //定义数码管显示端口
unsigned char code LedShowData[]= //定义数码管显示数据变量
{0x03,0x9F,0x25,0x0D,0x99,0x49, //定义固定存储显示字符
0x41,0x1F,0x01,0x19};//1,2,3,4,5,6,7,8,9,0
void ComBreak() interrupt 4 //定义串口通信子程序
{unsigned char RecvData; //定义串口数据接收变量
if(RI==1) //判断是否接收数据
{ RecvData=SBUF; //将接收到的数据放入暂时变量
if(RecvData<10) //判断接收到的数据是否小于10
{
ShowPort=LedShowData[RecvData];//将接收到的数据通过数码管显示出来
}
SBUF=RecvData; //向电脑返回当前接收到的数据
RI=0; //清除接收中断标志位
}
if(TI==1) //判断是否是发送中断
{
TI=0; //清除发送中断标志位
}
}
void main() //主程序入口
{
unsigned int FlashTime=8000; //程序运行指示灯延时变量
SCON=80; //设置串口模式为8位数据
TMOD=32; //设置定时/计数器模式
TH1=0xFD; //给定时器1高八位初始化初值
TL1=0xFD; //给定时器1低八位初始化初值
TR1=1; //开启定时器1
ES=1; //开启串口通信功能
REN=1; //开启接收中断标志
EA=1; //总中断开启
while(1) //程序主循环
{ while(FlashTime--); //延时子循环,用于运行闪灯效果
FlashTime=8000; //对指示灯延时初始化
RunLed=~RunLed; //将指示灯显示端口取反
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -