一、 实验简介:
本程序通过数码管,LED指示灯的闪亮来表示当前串口通信的结果,串口通信使单片机与电脑之间通信的桥梁,通过对它的学习,可以很好的用电脑来进行单片机的控制,及对单片机数据的采集。因此串口通信被广泛的用于工业控制中。
二、 实验原理图:
过程中可以看到P13闪亮了一下,表明上次正确接收到数据。
三、 实现代码:
//================================================================== //
// 开发日期:2009/01/29 //
// 修改日期:: //
// 程序作者:guojun //
// 程序备注:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。 //
// 特别声明: 此程序可作研究之用,但引用、转载、使用请注明出处。 //
//================================================================== //
#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; //将指示灯显示端口取反
}
}
四、 运行效果:
程序运行效果:打开本机电源开关后,可以看到P1端LED指示灯在不停的闪耀,我们使用“串口调试助手”或其它软件向单片机发送数据,可以看到相应的数据显示在数码管上,并且发送的数据又返回到电脑中。(只显示0-9数字)
文章评论(0条评论)
登录后参与讨论