单片机架构设计

我们使用单片机去做一些任务的时候,通常把程序写成顺序结构,基本可以解决大部分的设计要求了。而且这种结构便于理解,而且程序易构成模块化,在各个模块中调用实现更复杂的任务。

然而顺序结构的写法,有时候避免不了沉重冗长的时间等待。例如键盘扫描,你就给我弄了一个delay_20ms()函数,而在这延时的过程,其实MCU可以做很多事情的,这不白白的浪费掉这段时间吗?其实,delay的这段时间用数码管显示代替,也就是在等待的过程,我们可以做一下显示。但仅此而已?

之前,我在做3寸大数码钟的时候就遇到过一个时间要求苛刻的问题,我采用了17个数码管,分成两组来动态显示。为了不闪烁,那么刷新频率起码大于50Hz。而单片机还有其他任务,比如说读DS1302实时时钟,串口收发数据,按键扫描,读DS18B20等等,而其中最要命的是读取DS18B20温度传感器的数据,大家都知道其中等待温度转换的时间,基本要达到900ms了,这样一来,数码管就会闪烁得很厉害了。

所以,我网上找了一些资料学习。大家都采用“时间片轮询”算法的程序架构来写,这样既保证了实时,也充分利用了任务等待的时间。

下面简单来看看,关于时间片轮调的程序思想,而按照这种思路,可以衍生出很多程序结构。

假定,单片机要执行的任务有task_1(); task_2(); task_3(); ……task_n();  各个任务对时间要求不同。

下面是我对时间片轮调的相关认识。

系统基准时间片:

我们采用定时器中断来产生系统的基准时间片,也叫系统的基准节拍,例如每4ms中断一次。这可以形象的比喻成脉搏心跳。

任务(事件)的轮调:

每一次心跳,我们就给任务执行的时间标志计数。当标志计数到了,就执行该任务函数!

事件的要求:

1.每一个事件的执行时间不允许超过一个时间片。

2.事件中不使用较长的delay();函数,可以使用定时延时等待,但永远必须遵守第一条要求。

3.执行时间较长的任务,或者较为复杂的任务,可以分割到多个时间片内执行。

实时性任务要求:

对于实时性要求较高的任务。比如串口收发事件,可以考虑放在主循环调用,或者再定时中断中调用。

参数传递要求:

各个任务函数之间参数传递,建议使用全局变量。任务中的内部函数,可以使用局部变量。

程序结构:

分析一下上面的程序结构,使用了一个定时器产生系统时钟滴答,然后时钟滴答到了,就更新时间标志,然后统一用一个事件函数来根据时间标志分时的执行各个任务函数。

但任务执行完后,时间标志被重置,并重新计数。那么这个任务函数就相当于被调度在了任务队列的末尾了!(感觉是不是有点任务调度管理的意思了?)

当然,各个任务函数调用的时间不同,就造成了任务执行频率的不同。这也是时间片的大小商定,以及时间片分布的问题,这需要从实际的任务考虑,并取得一个最佳的时间片,以及合理的安排各个任务函数的关系。

另外一种时间片轮调程序结构

其实,原理大致相同。执行机制不同罢了,各种程序结构有它优缺点,有最适合使用的地方。

下面,简单了解。

程序结构:

对于时间片轮询法的程序结构,无疑有比顺序结构程序更多的优点,但任务函数有时候被拆分成多段,不方便理解程序整体思路。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当我听到“51单片机”时,我首先想到的是一款基于MCS-51架构的微控制器,它在嵌入式系统中广泛应用。 对于单片机设计来说,设计师需要考虑很多因素,比如系统的时钟速度、存储器的容量和接口的选择等等。时钟速度非常重要,因为它决定了单片机能够执行的指令数量。同时,存储器的容量也非常关键,因为它限制了单片机能够存储的程序和数据的大小。 当选择51单片机时,设计师需要考虑这些因素以及其他一些因素,例如应用的复杂程度和所需的性能等。然后,他们可以选择适合他们应用需求的具体型号,并设计出一个完整的系统。 总之,51单片机是一款功能强大的微控制器,它在嵌入式系统中广泛使用,可以用于控制各种不同类型的设备和系统。 ### 回答2: 基于51单片机设计时钟需要进行以下步骤: 1. 硬件设计:选择适当的时钟芯片来提供外部时钟信号。这可以是晶振、时钟模块或者RTC芯片。同时,还需要设计合适的电路用于连接单片机和时钟芯片。 2. 程序设计:使用汇编或C语言进行程序编写。首先,需要编写初始化代码,设置单片机相关寄存器和外部中断设置。然后,编写时钟模块的代码,包括获取当前时间,显示时间和实现闹钟功能。 3. 时钟模块设计:在时钟模块中,需要使用定时器来读取时钟芯片的时间,并将其转换为可读的格式。定时器可以设置一个适当的时间间隔,以确保时钟准确无误地进行。 4. 数码管显示:通过数码管显示时间,需要将时钟数值转换为数码管控制代码,并通过IO口输出到数码管。可以使用数码管显示驱动文件进行编程。 5. 闹钟功能设计:通过添加按钮和外部中断实现闹钟功能。当设定的闹钟时间到达时,产生一个中断信号,即触发闹钟,可以通过发出声音或者闪烁LED等方式来提醒用户。 6. 能源管理:为了保证时钟的正常运行,可以考虑添加电池供电功能,以防停电或者外部电源故障情况下时钟无法正常工作。 7. 调试和测试:完成硬件和软件的设计之后,需要对整个时钟进行调试和测试,验证时钟的准确性和稳定性。 总之,基于51单片机设计时钟需要进行硬件设计、程序设计、时钟模块设计、数码管显示、闹钟功能设计、能源管理以及调试和测试。这个过程中需要综合运用电子技术、编程技术和测试技术,确保时钟的功能和性能达到要求。 ### 回答3: 设计基于51单片机的时钟是一个很有趣的项目。首先,我们需要一个51单片机,这是一个非常流行且常用的单片机型号,容易获得且价格便宜。接下来,我们需要一块LCD屏幕,用于显示时间。可以使用4位数码管显示时间,但LCD屏幕更加直观且易读。还需要一个实时时钟模块,它能够提供精确的时间数据。 首先,将单片机与LCD屏幕和实时时钟模块连接。然后,编写程序来读取实时时钟模块的时间,并将其显示在LCD屏幕上。此外,还可以加入一些附加功能,如设置闹钟、显示日期等。 为了确保时钟的准确性,可以使用外部晶振来提供更稳定的时钟信号。此外,还可以添加蜂鸣器,以在设定的闹钟时间发出警报声。 在设计时钟的过程中,还需要考虑电源问题。可以通过连接适当的电池来提供电源,以确保时钟在断电情况下仍能继续运行。 最后,在设计完成后,可以将时钟固定在一个漂亮的外壳中,以增加外观的美观度。 总之,基于51单片机设计时钟是一个有趣的项目,它不仅能够提供准确的时间显示,还可以拥有多种功能,如设置闹钟等。同时,这个项目也可以增强我们对单片机编程和硬件设计的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值