打印
[技术问答]

单片机io模拟串口发送

[复制链接]
443|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhamatu|  楼主 | 2020-7-28 08:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【本文转载自网络】
1、单片机不能直接与
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 | 只看该作者
二、串口发送时序图
1、如上图所示为8位UART协议格式
(1)一帧信息总共10位
(2)开头一位是起始位(start bit),最后一位是结束位(stop bit)
(3)中间8位是数据位(低位在先)
(4)脉冲的宽度是由波特率决定的,例如波特率位1200,则脉冲宽度为1/1200s,大约为833us

使用特权

评论回复
板凳
zhamatu|  楼主 | 2020-7-28 08:46 | 只看该作者
三、代码实现
/********************************************************
// 函数名称:UART_Send_Char(用IO模拟串口协议)
// 输入参数:uartData
// 输出参数:无
// 函数功能:发送一个字节
// 注意:延时用定时器延时(时序更准),不要用软件延时
********************************************************/
void UART_Send_Char(unsigned char uartData)
{
    unsigned char i;
    uartTXD = 1;            //单片机TX引脚拉高
    uartTXD = 0;            //start bit
    Delay883us();           //延时一个脉冲的时间(对应1200的波特率)
    for (i=0;i<8;i++)
    {
        if(uartData & 0x01)
        {
            uartTXD = 1;
        }
        else
        {
            uartTXD = 1;
        }
        uartData >>= 1;
    }
    uartData = 1;            // stop bit
    Delay883us();
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝