㈠ 怎么实现单片机多个函数功能同时执行
设计主要思想:
单片机不可能同时执行多个函数,但是可以先后执行程序给他安排的每一件事,假如每个事件间隔时间非常短,ms、us级别,或者间隔时间更短,那么连续一段时间内执行的事件,看起来就是同时执行的。每一个事件可以看做一个或多个函数,也就意味着只要程序安排的合理,很多函数看起来是同时运行的;
模型举例:假如要做几件事,烧开水,洗衣服,打游戏;
A:烧开水,等好了之后,洗衣服,洗完之后,打游戏;
B:烧开水,洗衣服时监听水壶的声音,两件事执行完,打游戏;
C:选择一个烧水开了会停止工作的电水壶,不要等了,用洗衣机洗衣服,打游戏;
耗时:A最长,其次B,C最短。
不同的工具占用人时间精力也是不同的,同理单片机周围外设选择不同,也会影响CPU占用时间;
实例:
要求:假如单片机要“同时”执行,数码管显示、蜂鸣器、流水灯移动;
具体实施A:设置一个定时器,假如每隔1ms进入中断,设置几个全局变量x、y、z,定时器中断里自加,在程序主循环里查询全局变量的数值,当x大于500后,清零x,让流水灯移位,当y大于,1000时清零y,数码管加1,当z大于2时,清零z,反转控制蜂鸣器的IO电平,以此类推其他事情也是如此。
具体实施B:设置单片机本身PWM驱动蜂鸣器,设置一个定时器,假如每隔1ms进入中断,设置几个全局变量x、y、z,定时器中断里自加,在程序主循环里查询全局变量的数值,当x大于500后,清零x,让流水灯移位,当y大于,1000时清零y,数码管加1,以此类推其他事情也是如此。
使用内部PWM资源可以更省CPU时间!
总结:
如果外设资源不足只能算法来补充;
以上方法适合资源较少的单片机,若是单片机资源够多(RAM>4K,Flas>8K),很多实时操作系统可以选择:ucos,FreeRTOS等,这些实时操作系统可以方便管理事件的切换。
㈡ 求教:单片机怎么同时运行几个程序啊
你说的是状态机。你可以立一个flag表示模式,模式一,模式二,模式三,这样循环运行,那你可能要问了,我每个模式程序的有延时怎么办?
这时可以用定时器,定时器flag时间到了,主程序判断运行某一个模式的下一步。
又或者你是比较简单的程序不用定时器,比如电机,每4S开关,蜂鸣器每2S开关,取你最小的延时时间。那么程序只需要放一个2S延时对应的flag,flag%1==0,蜂鸣器开关,flag%2==0,电机开关。
㈢ 单片机开机后,怎么继续上次运行的程序
外接一个铁电
单片机每执行一条指嫌春令 就给指针赋一次当前flash地址 然后往铁电里 写一次当前指拦做针地址
铁电掉电数据不丢失
单片机上电后 先执行 读取铁电中指针地址 然后指令跳转到目标地址 铁电无地芹衡耐址 则跳出函数 从下面开始执行