您的位置 首页 基础

51单片机和PC串口异步通讯续

上一篇文章主要罗列了一些编写串口通信必要的知识点。在具体的编程中,还有很多要注意的地方。下面的程序的主要功能为:通过串口调试助手向…

上一篇文章首要罗列了一些编写串口通讯必要的知识点。在详细的编程中,还有许多要注意的当地。

下面的程序的首要功用为:经过串口调试帮手向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();

包括头文件的首要意图为使用库函数toupper(),能够讲读入的字母均转换成大写,便于调用Display函数在数码管上显现。

主函数很简单,首要初始化,然后便进入永远为真的循环中,等候中止的产生,并处理。

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

初始化函数用于敞开中止,设置计时器,串口通讯的作业方式,变量初始化的作业:

void Inital(){//变量清零letter=0;wela=0;dula=0;//波特率设置为9600SCON=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);   //在电脑上回显letterDisplay(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;               //发送完毕后软件清零}

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/266014.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部