0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用延时法模块串口

CHANBAEK 来源:嵌入式开发教程 作者:郭学提 2023-07-12 11:52 次阅读

使用波特率为9600bpS,晶振频率为11.0592MHz,通过计算可知,串口的每位需延时0.104ms,通过执行96个指令周期可能完成0.104ms的延时。与其相关的程序在结构上可分为:IO口定义、串口发送函数、串口接收函数、延时函数。下面依次介绍各个部分。

1.IO口定义程序等

这部分程序主要包括基本的IO口定义、全局变量定义、头文件包含、函数声明等。为后面程序提供编程基本。其程序代码如下:

sbit  RXD1 = 0x90; 
sbit  TXD1 = 0x91; 
#define  WR_delay     44 //写延时 
#define  RD_delay     43 //读延时

2.串口发送函数

串口发送函数首先发送起始位,再发送数据,根据通信协议选择是否发送校验位。最后发送停止位。延时法模拟串口发送流程如图所示。

图片

其程序代码如下:

#define  Check_bit_switch_on_off    0//不使用校验位
uchar Check_bit;
//往串口写一个字节 
void Send_Byte(uchar input,bit Check_bit) 
{ 
    uchar i=8; 
    TXD=(bit)0; //发送启始位 
    Delay(39); 
    //发送8位数据位 
    while(i--) 
    { 
      TXD=(bit)(input&0x01); //先传低位 
      Delay(36); 
      input=input >>1; 
    } 
    //发送校验位(无) 
    #if Check_bit_switch_on_off
    {
      TXD1=(bit)(Check_bit); //发送校验位
      Delay(36); 
    }
    #else
    Check_bit = Check_bit;
    #endif
    TXD1=(bit)1; //发送结束 位 
    Delay(46); 
}

3.串口接收函数

串口接收函数首先等待起始位,然后接收数据,根据通信协议选择是否需要接收校验位。最后等待停止位。延时法模拟串口接收流程如图所示。

图片

其程序代码如下:

//从串口读一个字节 
uchar Revice_Byte(void) 
{ 
    uchar Output=0; 
    uchar i=8; 
    uchar temp=RD_delay; 
    //发送8位数据位 
    Delay(RD_delay *1.5); //此处注意,等过起始位 
    while(i--) 
    { 
      Output > >=1; 
      if(RXD1) 
        Output |=0x80; //先收低位 
      Delay(35); //(96-26)/2,循环共 
      //占用26个指令周期 
    } 
    //接收校验位
    #if Check_bit_switch_on_off
    (Check_bit)=TXD; //接收校验位
    Delay(35); 
    #endif
    while(--temp) //在指定的 
    //时间内搜寻结束位。
    { 
      Delay(1); 
      if(RXD1)
      break; //收到结束位便退出 
    } 
    return Output; 
}

用延时方式可以模拟多个个串口,但是使用延时方式模拟的串口在接收上存在一定的难度,主要是采样定位要求严格,另外还必须知道每条语句的指令周期数。在调试过程中,读者可以借助编译软件通过反汇编的方式查看编译后的汇编语句,已确定你所使用的C语句的执行时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 晶振
    +关注

    关注

    34

    文章

    2866

    浏览量

    68027
  • 串口
    +关注

    关注

    14

    文章

    1554

    浏览量

    76498
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62597
  • 波特率
    +关注

    关注

    2

    文章

    307

    浏览量

    34137
  • IO口
    +关注

    关注

    3

    文章

    170

    浏览量

    24040
收藏 人收藏

    评论

    相关推荐

    有关串口通讯延时问题的讨论

    最简单的串口通讯作为子VI(写、延时50ms、读),然后单独运行子VI可以很好的通讯,然后在主程序调用该串口通讯子VI时问题来了,写进去以后要延时五六秒才能有返回数据,而且只要调用该子
    发表于 12-24 16:49

    串口通信延时发送问题or调用延时问题

    本帖最后由 eehome 于 2013-1-5 10:08 编辑 有没有人遇到过以下奇怪的串口通信问题哈:简单的串口读写作为子VI供主程序调用,单独运行时读写正常,但是一旦在主程序中运行时就出
    发表于 12-25 09:55

    串口延时问题

    最近写串口程序,遇到如下问题,在写与读之间设置延时,波特率为187500,发的16字节,收的8字节。但是运行一次延时需要设置在7ms以上才能每次都收到数据,只能延时设置小点,只运行一次
    发表于 07-01 21:12

    Labview串口读写的延时问题

    先说一下通讯的目的:读取PLC中保持寄存器(MD)的值,通讯方式采用Modbus 485串口,波特率设置为19200;我采用VISA写函数将Modbus读指令写入串口中,再延时10ms后,采用
    发表于 12-01 09:23

    单片机IO 口模拟串口通信低到延时

    单片机IO 口模拟串口通信低到延时,void WByte(uchar input){uchar i=8;TXD=(bit)0;//发送启始位Delay2cp(39);//发送8位数据位while
    发表于 05-18 14:31

    为什么4432无线串口模块有很大延时

    4432无线串口模块直接接在USB转TTL上通信就没有延时。。。。为什么接到单片机上就有延时。。。。。。。而且写得串口协议也都不能用了。。。
    发表于 07-21 21:44

    串口通讯模块的信息与使用

    串口通讯模块的信息与使用
    发表于 08-20 17:04 27次下载

    SCI串口模块

    SCI串口模块
    发表于 10-20 10:33 5次下载
    SCI<b class='flag-5'>串口</b><b class='flag-5'>模块</b>

    一文深度了解串口WiFi模块作用,串口WiFi模块的应用场景

    串口WiFi模块作用,串口WiFi模块的应用场景
    发表于 03-01 14:25 28次下载

    AN1450 - 延时模块去抖动器

    在本应用笔记中,我们将使用PIC10F322实现延时模块/去抖动器。其延时值可设定,范围介于2 Us至193 ps之间。它可有效用作噪声鉴别器,也可用于开关去抖动。用作延时
    发表于 03-27 18:44 1次下载

    51内核软件延时串口的巧妙方法介绍

    51内核软件延时串口的巧妙方法介绍,具体的跟随小编一起来了解一下。
    的头像 发表于 07-28 11:28 4141次阅读
    51内核软件<b class='flag-5'>延时</b>和<b class='flag-5'>串口</b>的巧妙方法介绍

    你不知道单片机延时的种种情况

    模块某协议的时序,比如串口,IIC的通讯协议,使用延时来满足时序变化的要求和通讯速度的控制。
    发表于 05-04 17:40 5671次阅读
    你不知道单片机<b class='flag-5'>延时</b>的种种情况

    无线串口模块的概念与选型要点

    首先我们来说一下什么是无线串口模块?无线模块即是通过无线电信号来传输数据的软硬件模组,串口模块即是使用
    的头像 发表于 06-17 11:42 2428次阅读

    串口模块选型要点

    无线模块:通过无线电信号来传输数据的软硬件模组; 串口模块:使用串口通信协议来传输数据的软硬件模组; 无线串口
    发表于 05-31 15:23 3次下载
    <b class='flag-5'>串口</b><b class='flag-5'>模块</b>选型要点

    什么是无线串口模块?无线串口模块怎么用?

    常看到很多网友在百度知道,天涯问答,搜搜问问等问答平台上提问什么是无线串口模块,无线串口模块怎么用等等这样的问题。可能是刚接触这个行业的人想了解这样的产品才会产生疑问,思为无线针对这个
    的头像 发表于 08-04 14:01 5862次阅读
    什么是无线<b class='flag-5'>串口</b><b class='flag-5'>模块</b>?无线<b class='flag-5'>串口</b><b class='flag-5'>模块</b>怎么用?