博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51单片机和PC串口异步通信(续)
阅读量:7104 次
发布时间:2019-06-28

本文共 1839 字,大约阅读时间需要 6 分钟。

上一篇文章主要罗列了一些编写串口通信必要的知识点。在具体的编程中,还有很多要注意的地方。

下面的程序的主要功能为:通过串口调试助手向51单片机发送一个字母,单片机接收后,在数码管上显示这个字母,并将这个字母反向显示到串口调试助手的界面里。

51单片机的头文件中已经定义了串口缓冲区等一系列特殊功能寄存器,打开头文件就可以找到下面这样的定义:

sfr SCON  = 0x98;

sfr SBUF  = 0x99;

等等。

首先新建立一个头文件,将程序中要用到的变量和函数声明写进去:

#include 
#include
#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;//从计算机发送给单片机的字母uchar letter;//table数组中存储数码管显示0~F对应的编码//这里只用A~F即可uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void Inital();void Display(uchar mydata);void Putchar(uchar mydata);void ShortDelay();

包含头文件<ctype.h>的主要目的为利用库函数toupper(),可以讲读入的字母均转换成大写,便于调用Display函数在数码管上显示。

 

主函数很简单,首先初始化,然后便进入永远为真的循环中,等待中断的发生,并处理。

void main(){  Inital();  //初始化  while(1)    {  }}

初始化函数用于开启中断,设置计时器,串口通信的工作方式,变量初始化的工作:

void Inital(){  //变量清零  letter=0;  wela=0;  dula=0;   //波特率设置为9600  SCON=0x50;  TMOD=0x20;  TH1=0xfd;  TL1=0xfd;  TR1=1;   //开串口中断  EA=1;  ES=1;}

中断服务函数在中断发生时由CPU调用,在其内部又调用了 Display,Putchar函数用于在数码管显示字母,和在电脑上回显输入的字母。

//中断服务函数void ser() interrupt 4{  //如果读完数据  if(RI==1)  {    RI=0;   //软件清零    letter=SBUF;   //从单片机Receive缓冲区内读入数据    Putchar(letter);   //在电脑上回显letter    Display(letter);    //在数码管上显示对应的字母  }}

 

Display函数用到的只是在前面有关数码管的文章中已有涉及,直接贴出代码:

 

void Display(uchar mydata)  {  uchar BigLetter;    BigLetter=toupper(mydata);    //先将读入字母均转换为大写,以便统一处理    //位选数码管  wela=1;  P0=0xfb;  wela=0;    P0=0xff;    //段选  //BigLetter-'A'+10索引为该字母在table中的下标  dula=1;  P0=table[BigLetter-'A'+10];  dula=0;  ShortDelay();}
 
void ShortDelay(){  uchar a=100;  while(a--);}

向计算机发送信息的Putchar函数

void Putchar(uchar mydata){  SBUF=mydata;        //单片机的Transfer缓冲区内写入数据  while(!TI)   ;      //发送是否结束  TI=0;               //发送结束后软件清零}

如此这样,利用串口调试助手就可以向单片机发送字母,在数码管显示此字母,并能够在软件界面上显示刚刚发送出去的字母内容了。

 

 

 

转载于:https://www.cnblogs.com/xmfbit/archive/2012/08/22/2985794.html

你可能感兴趣的文章
闲话WPF之十一(Dependency属性 [3] )
查看>>
JS组件系列——基于Bootstrap Ace模板的菜单Tab页效果优化
查看>>
eclipse中tomcat快速启动关闭参数设置
查看>>
C++ extern "c "的作用
查看>>
实践:几十亿条数据分布在几十个节点上的毫秒级实时排序方法
查看>>
PMWiki安装教程
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
一个经典编程面试题的“隐退”
查看>>
POJ2109
查看>>
显示创建一个表的SQL语句
查看>>
光流和KLT
查看>>
Linux c括号作用域【原创笔记】
查看>>
分分钟带你玩转 Web Services【2】CXF
查看>>
ASP.NET MVC+LINQ开发一个图书销售站点(7):图书分类管理
查看>>
如何做一名技术管理者
查看>>
Resouce, platform_device 和 platform_driver 的关系【转】
查看>>
HTML标记大全参考手册(转载)
查看>>
查看表空间与对应的表空间文件
查看>>
linux C判断文件是否存在【转】
查看>>
《J2EE Tutorial中文版》读书笔记(1)
查看>>