原创 MCU-51串口通信程序

2009-2-10 10:58 37283 4 15 分类: MCU/ 嵌入式

MCU-51串口通信程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


51串口通讯是51单片机的基本,以前每次用串口通信都要自己写程序,想偷懒的话到网上找程序,每次都要花费很长时间才能调通串口。其实对于<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />51 c语言程序来说,写好一个通用程序后,以后每次复制粘贴,程序中调用相应函数既可,而不用每次都为程序发愁。


 


本文keil项目文件 https://assets-stash.oss-cn-shanghai.aliyuncs.com/album/old-resources/2009/2/10/30f9d9a1-6ff8-4a4c-85f1-31ff01233798.rar


 


#include <reg51.h>


#include <string.h>


  


unsigned char ch;


  


bit read_flag= 0 ;


  


void init_serialcom( void )


   {


       SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr  


                         //UART为模式18位数据,允许接收


          TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload            


                         //定时器1为模式2,8位自动重装


          PCON |= 0x80 ; //SMOD=1;


          TH1 = 0xFD ;   //Baud:19200 fosc="11".0592MHz


          IE |= 0x90 ;     //Enable Serial Interrupt


          TR1 = 1 ;       // timer 1 run


          TI=1;


         


       }


         


//向串口发送一个字符


void send_char_com( unsigned char ch)


         {


            SBUF=ch;


            while (TI== 0);


               TI= 0 ;


          }


 


//串口接收中断函数


void serial () interrupt 4 using 3


{


    if (RI)


          { 


                 RI = 0 ;


                 ch=SBUF;             


                 read_flag= 1 ; //就置位取数标志


              }


}


 


 main()


    {


           init_serialcom(); //初始化串口


                  while ( 1 )


                        {


                            if (read_flag) //如果取数标志已置位,就将读到的数从串口发出


                                    {


                                              read_flag= 0 ; //取数标志清0


                                                 send_char_com(ch);


                                          }


                            }


       }


 


这个程序由四部分组成


init_serialcom( void )                              //初始化串口


send_char_com( unsigned char ch)     //向串口发送字符


serial () interrupt 4 using 3                    //中断串口接收字符


main()                                                     //主函数


 


其中前三个函数都不太需要改变,以后应用的时候直接复制粘贴就行,主要修改的是主函数。这个程序实现的是接收字符,再把这个字符串口发送。


还要一个要注意的是波特率,而波特率可用用下面两个小程序算出


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 

77838550-1e70-4ece-b93f-69fa3a0635e4.JPG


 


下载:https://assets-stash.oss-cn-shanghai.aliyuncs.com/album/old-resources/2009/2/10/aa1a4062-3250-49ae-81d2-a616788bb760.rar


 


d2a4219d-3e2a-49e6-9da8-4aa68e311382.JPG



 


下载:https://assets-stash.oss-cn-shanghai.aliyuncs.com/album/old-resources/2009/2/10/769ab1ba-1b4e-447d-b303-4c2f805cebb7.rar


 


     关于keil对串口调试,可以参见下一篇博文。


 


参考资料:


1. 单片机C51串口中断接收和发送测试例程(含通信协议的实现)


http://www.dz863.com/interface-circuits/RS232-Seria-circuits/rs232-C51.htm


2. 51单片机串口波特率计算--博客之家


http://street.bloghome.cn/posts/86892.html

文章评论11条评论)

登录后参与讨论

xujuan868_859359671 2010-11-21 17:57

你好,init里面TMOD后面的那个竖|是什么意思?

xujuan868_859359671 2010-11-21 15:44

谢谢楼主,感谢

wanglei_142_937447002 2009-9-1 18:56

楼主太好,小弟在此学习了! 谢谢!

coyoo 2009-8-24 11:41

to:flash2ant 感谢分享你的经验!

zhuzizi_116252733 2009-8-23 12:33

谢谢

flash2ant_595507322 2009-8-22 08:40

我试过,也可以在tcl代码前加上 package require Tk,最后面加上 tkwait window .就可以在quartus下调用tk了

coyoo 2009-8-20 11:28

还有一个问题是我开始无法启动gui是因为,我的所以的部件都是放置在根窗口“.”上,无法启动。根据Altera AE的例子将所有的部件放置在一个toplevel窗口里就可以了。不知道什么原因?

tengjingshu_112148725 2009-7-6 09:10

TO hesor: 程序里有一个发多个字符的函数,只不过被注释掉而已

hesor 2009-7-2 12:19

博主你好,如果我要实现连续发5个字节,然后返回5字节的程序该怎么写,比如Pc发送FF 00 02 01 0D ,然后单片机要判断这5位是否都正确,如果正确则返回,FF 00 04 01 0D,这个程序改怎么写,望博主赐教.

tengjingshu_112148725 2009-4-20 09:00

to wx3456: 你试试我的程序。至于没有从main运行,你可以看一下汇编是不是从main开始的。
相关推荐阅读
藤井树 2015-10-12 14:43
印制电路板的抗干扰设计 zz
印制电路板的抗干扰设计     作者:中船重工集团第707所 肖麟芬   摘   要:本文以印制电路板的电磁兼容性为核心,分析了电磁干扰的产生机理...
藤井树 2013-10-22 15:32
2010.5.30 黄草梁上包饺子一日登山活动——摘韭菜篇
        上次桃花节的时候也有野韭菜,那时候的我连草和韭菜叶分不清,才回去的韭菜也不敢吃,哈哈,这次可算真正见识了韭菜,黄草梁也叫韭菜梁,因为满山遍野都是野韭菜而闻名,比较圆比较粗的就是野韭...
藤井树 2013-10-22 15:28
2010.5.30 黄草梁上包饺子一日登山活动——包饺子篇
摘韭菜回来,大家已经忙开了 我也装模作样地“工作着” 哈哈,还不让我包,包饺子是技术活,一定要皮薄馅厚才有资格包,像我这样的只能旁观了 摘的韭菜应该足够了,旁边那个袋子是我摘来带回学校的 ...
藤井树 2013-08-09 15:19
datasheet下载网站整理(查IC芯片手册)【原创】
*************************************************************************         作为电子工程师,芯片的dat...
藤井树 2010-06-04 00:21
陈伟宁王辉一家捐助渠道(北京菲亚特—英菲尼迪)
       王辉的最新消息请关注 http://chenweining.org/       目前事故责任认定已经出来了——陈家全责。        发信人: program (程序), 信区: D...
藤井树 2010-06-01 13:43
2010.5.30 黄草梁上包饺子一日登山活动——美景篇
这天不得不说的是天空,蓝蓝的天空,白白的云    绿油油的山脊  我、洪涛哥哥、huangna妹妹还有她同事小艾走在黄草梁上    在蓝天白云下合影       阳光照过来,景色真美 象鼻山,走不...
广告
我要评论
11
4
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /4 下一条