找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11023|回复: 5
收起左侧

学51单片机-UART口发送一个字符

[复制链接]
ID:74835 发表于 2015-4-8 22:35 | 显示全部楼层 |阅读模式
      
       UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。
    当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。
       UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。
       UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表:
       表格太大了,放不下,放个ASCII码链接吧: http://www.51hei.com/mcu/4342.html 大家可以自己看看。就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。
       驱动电路主要有有两种,一种是基于MAX232这类芯片的:
       上图中,MAX232的10脚接到单片机的TXD上,9脚接到单片机的RXD上。
       另一种以CH340或者PL2303这类芯片为主,因为电脑上的RS232接口越来越少,所以这类芯片使用USB转UART口的方式来实现,应用电路如下:
       通信过程中主要参数如下:
       波特率:传输速率,常用范围9600~115200.
       数据位:就是每次发送的这个数据有几位,常用的是8位,别的还有4、5、6、7.
       校验位:用来校验传输资料的正确性。
       停止位:是一个字符数据传输结束的标志,一般设为1位。
       波特率如何计算?
       方式1,3的波特率=1/32或1/16*计时器2的溢出率。
此处有一个公式:
波特率=1/16或1/32*(晶振的频率/12*(256-TH1))
代入:
9600=11059200/32*12*(256-TH1)
TH1=TH0=FDH
       代码比较多,不贴出来了,已经加好注释了。有兴趣的可以自己下载去研究,如下:
  1. /**********************51单片机学习例程************************
  2. *  平台:Keil U4 + STC89C52
  3. *  名称:UART口传输一个字符 A
  4. *  编写:起航
  5. *  晶体:11.0592MHZ
  6. ******************************************************************/

  7. #include <reg52.h>
  8. typedef   unsigned char  uint8;
  9. typedef   unsigned int   uint16;

  10. uint8 num = 65;
  11. /***************************************************
  12. *
  13. *                                                        延时子函数
  14. *
  15. ****************************************************/
  16. void delay(uint16 n)
  17. {
  18.         while(n--);
  19. }


  20. /***************************************************
  21. *
  22. *                                                        串口初始化子函数
  23. *
  24. ****************************************************/
  25. void UART_init(void)
  26. {
  27.         SCON = 0x50;                                //工作在方式1 ,8位异步收发,波特率由定时器控制
  28.         TMOD = 0x20;                                //选择定时器1做为波特率发生器,方式2
  29.         TH1  = 0xFD;                                //定时器赋初值
  30.         TL1  = 0xFD;
  31.         TR1  = 1;                                                //启动定时器
  32.         ES   = 1;                                                //串口中断允许
  33.         EA   = 1;                                                //开启总中断
  34. }

  35. /***************************************************
  36. *
  37. *                                                        字节发送子函数
  38. *
  39. ****************************************************/
  40. void UART_send_byte(uint8 dat)
  41. {
  42.         SBUF = dat;
  43.         while(!TI);                                        //等待发送完成
  44. }



  45. int main()
  46. {
  47.         UART_init();
  48.         while(1)                                                //循环发送字符 A
  49.         {
  50.                 UART_send_byte(num);
  51.                 delay(20000);
  52.         }
  53.         return(0);
  54. }
复制代码

程序及hex文件下载: UART1.zip (28.52 KB, 下载次数: 71)
回复

使用道具 举报

ID:111422 发表于 2016-3-30 14:59 | 显示全部楼层
值得一赞
回复

使用道具 举报

ID:120844 发表于 2016-5-16 23:15 | 显示全部楼层
赞一个,下载下来了,先看一下,正在试着写232通讯方式的程序
回复

使用道具 举报

ID:120844 发表于 2016-5-16 23:17 | 显示全部楼层
赞一个,正好学习232通讯方式的程序
回复

使用道具 举报

ID:120844 发表于 2016-5-16 23:22 | 显示全部楼层
?附件的代码也不多啊,也是64行而已的啊
回复

使用道具 举报

ID:208733 发表于 2017-9-13 11:53 | 显示全部楼层
好教程,值得我们新手学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表