[技术问答] 单片机io模拟串口发送

[复制链接]
 楼主| zhamatu 发表于 2020-7-28 08:44 | 显示全部楼层 |阅读模式
【本文转载自网络】
1、单片机不能直接与
1576588-20200718174655803-1464587873.jpg
1、单片机不能直接与电脑端进行通讯,两端的电平标准不一样
(1)pc端遵循的232电平,-12V左右表示的是高电平,而+12V左右表示的是低电平
(2)单片机端遵循的是TTL电平,5V表示高电平,0V表示电平
2、如何解决单片机和pc的通讯?
(1)可以通过SP232或MAX232转换芯片进行解决
(2)另外一个问题,现在大多笔记本电脑都没有串口,而只有usb接口,那么我们可以用CH340G、PL2303、CP2102或FT232等芯片解决,上图就是通过CH340芯片进行解决的

 楼主| zhamatu 发表于 2020-7-28 08:45 | 显示全部楼层
二、串口发送时序图
1576588-20200718180243335-888121167.jpg
1、如上图所示为8位UART协议格式
(1)一帧信息总共10位
(2)开头一位是起始位(start bit),最后一位是结束位(stop bit)
(3)中间8位是数据位(低位在先)
(4)脉冲的宽度是由波特率决定的,例如波特率位1200,则脉冲宽度为1/1200s,大约为833us

 楼主| zhamatu 发表于 2020-7-28 08:46 | 显示全部楼层
三、代码实现
  1. /********************************************************
  2. // 函数名称:UART_Send_Char(用IO模拟串口协议)
  3. // 输入参数:uartData
  4. // 输出参数:无
  5. // 函数功能:发送一个字节
  6. // 注意:延时用定时器延时(时序更准),不要用软件延时
  7. ********************************************************/
  8. void UART_Send_Char(unsigned char uartData)
  9. {
  10.     unsigned char i;
  11.     uartTXD = 1;            //单片机TX引脚拉高
  12.     uartTXD = 0;            //start bit
  13.     Delay883us();           //延时一个脉冲的时间(对应1200的波特率)
  14.     for (i=0;i<8;i++)
  15.     {
  16.         if(uartData & 0x01)
  17.         {
  18.             uartTXD = 1;
  19.         }
  20.         else
  21.         {
  22.             uartTXD = 1;
  23.         }
  24.         uartData >>= 1;
  25.     }
  26.     uartData = 1;            // stop bit
  27.     Delay883us();
  28. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

63

主题

504

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部