许久没有发了,分享下最近的感悟。如有错误的地方往指正,互相学习,哈哈。废话不多说,入正题,今天就Modbus说一下。
对于modbus相信大家并不陌生,我不知道大家怎么写的,我也希望大家有好 写法提供参考,那是不胜感激的。在此感谢这段时间大家的帮助,如孙工,韩工,等等。本次讲解就是在孙工的基础上建立的,硬件是用的STM8S系列,
这里直说串口接收中断与定时器中断,
以前是这么写的,用到了一个定时器,一个UART串口,咱先不说stm8 如果用在STC芯片上,那可是很昂贵的,本身就三个定时器,一个UART用,还需要一个定时器辅助,就剩下可怜的一个定时器了。这只是个通讯啊大哥,其他的工作科怎么做。反复的看,反复的改,是不是可以这样啊,work();这个函数拿出来,再写一个函数,在这个函数里面包含着它,建立属于它的标志位,于是出来下边这个版本,
我们分析下这样的好处,首先用了标志位后可以与其他函数共享定时器,节约了资源,接下里是省去了 开关定时器的繁琐步骤。效率自然就上去了。接着往下看,在485通讯时是否遇到过返回数组不全的问题,(接收的前段数据时正确的),我遇到过,在STM8 上边,为什么呢,愿意在于DE端的控制上,还未发送完成就关闭的发送使能,程序如下未改正前。
发现问题后你可能会这么改。如下
哈哈,成功返回所有数据,高枕无忧了。是吗?我咋么觉得这个延时这么碍眼啊,配合简单的任务可能不会出问题,如果1S通讯10次的话你还能笑出来吗?[page]
那会你应该考虑怎么改良一下那,继续往下看 ,再用标志位,
仔细看的会发现 DE端的控制跟work()写在一块了,给发送完成提供了充足的时间,又把CPU腾出来干别的事情,一举两得吧,哈哈,这样通讯50/s次表示无压力,再往下说,是不是遇到过调试通讯无返回的情况,是不是还不知道问题出来那一块,好吧,我们不如加点指示的东西,学习下人家TCPIP,加一个通讯指示灯,怎么加呢,是不是会这样。
这里就不写用延时手段或者是再各定时器的写法了,以上这个写法通讯时会起到指示作用,也很节约CPU,但是他接收错误数据时也会指示,作用不是很好,再看一下放在哪里好呢,恩 下边这里,
好了 就到这里,有什么不对 地方麻烦指正,这里先谢谢。 纯属个人见解献丑了
关键字:标志位 释放CPU
引用地址:
小谈标志位 如何释放CPU
推荐阅读最新更新时间:2024-03-16 13:54
80C51复位标志位的设置与应用研究
引言
设置复位标志位便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。
MC68HC08系列有一个复位状态寄存器,负责记录6种复位标志位:上电复位、引脚复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。SPMC65系列有一个系统控制寄存器,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地址
[应用]
80C51复位标志位的设置与应用研究
引言
设置复位标志位便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。
MC68HC08系列有一个复位状态寄存器,负责记录6种复位标志位:上电复位、引脚复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。SPMC65系列有一个系统控制寄存器,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地址
[单片机]
PIC单片机程序编写和动作标志位的使用方法解析
控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: listP=16c73 calllefthandup callrighthan
[单片机]
stm32中关于读取状态标志位函数的自我理解
为了让程序能够读取多个状态标志位的状态。固件设计了一个通用的函数RCC_GetStatus(),来读取各标志位的状态。 下面是RCC的所有标志位: * - RCC_FLAG_HSIRDY: HSI oscillator clock ready * - RCC_FLAG_HSERDY: HSE oscillator clock ready * - RCC_FLAG_PLLRDY: PLL clock ready * - RCC_FLAG_LSERDY: LSE oscillator clock ready *
[单片机]
为何AVR使用写1作为清0中断标志位的手段
关于“为何AVR使用写1作为清0中断标志位的手段”这个问题我看过很多的相关资料。在AVR的手册中并没有给出为什么的解释,只是强调了“写1清0中断标志位”。同时我也看到很多新的芯片,如DSP等,也是采用写1清零标志位的。但没有找到更专业的,或从根源上的说明,如果那位有这方面的知识或资料,欢迎深入的讨论学习。 下面是我个人的分析和解释,供参考。 1。首先从硬件上的考虑,通常的读写处理单元是以8BIT字节为单位的,因为数据总线一般是8位的倍数。这样对位的操作就不方便,不能直接写1位(会改变其它的位),需要先读到寄存器,然后改动1位,最后回写,需要更多的时间。 2。对于RAM操作一般采用直接写的方式,所以对RAM基本上没有直接的位操作指令
[单片机]