打印

工作之后这样写程序1

[复制链接]
7437|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在21ic也混了有一段时间,以前都是查资料看帖子,从不发言,现在工作了,觉得工作之后写程序的程
序体挺好的,就写给大家看看,欢迎板砖啊!!呵呵……这是第一篇先主要把主程序的思想介绍个大家
,以后会结合实际的子程序的写法来继续说明。
先说说我我是怎么学单片机的吧
我单片机入门时看了天祥电子的十天学会单片机
如果有网友还没入门的话一定要看看这个教程
在次也要感谢天祥大哥能给这样的教程给大家
有机会见面请你喝酒啊哈哈……:lol
   
但是学那个教程入门可以但是真的要写些东西去卖就有点难了
工作以后感觉最大的是程序体变了接下来就给大家来说一下这个程序体该怎么写
首先要定个主程序的时基,来定时执行下面的子程序。
比如说我的主程序的时基是2ms在扫描各子程序之前用查询定时器标志位的方式来查询是否到了2ms
到了2ms扫描各个子程序,没到2ms就继续查询等待!
这样做的好处是扫描各个子程序的时间固定,易于添加其它程序!
这样的做法的前提是你各个子程序扫描一次的时间要小于2ms
下面举个例子来说明一下
如果我要做一个闹钟子程序有3个
按键扫描
数码管扫描
时间计时
程序会每隔2ms来扫描一遍这三个子程序
按键扫描程序,读取管脚电平,如果没有按键按下跳出
有按键按下存储管脚状态,比较前次和本次状态是否相同,相同按键计时寄存器加一,不相同则清除按
键计时寄存器跳出,看好,判断有键无键都跳出子程序扫描,只是对按键计时寄存器来操作(以后会结
合程序详说明)。
在按键计时寄存器达到一定数值则说明此键有效
数码管扫描时主程序没2ms扫描一个数码管,扫描一个数码管后,接通数码管的电平就固定了,这样再执
行其它程序,数码管也会一直点亮,这样要比传统的数码管扫描程序用延时更加省单片机的时序。数码
管也会显示更加稳定,以前用简单延时写出数码管显示用手一碰就会有鬼影,用这种方法就不会。
计时程序在这样的主程序体下就更加随便写了
以为是每2ms进时间计时程序一次,所以每进一次就给相应的计时寄存器加一就可以方便计时了。

以上是我参加工作以后写的程序体,对于高手可能是简单的东西了,也欢迎来板砖!

未命名.JPG (90.62 KB )

未命名.JPG

相关帖子

沙发
戒指320| | 2009-8-7 22:44 | 只看该作者
我给你个ban zhuan!

使用特权

评论回复
板凳
虾军师| | 2009-8-8 13:27 | 只看该作者
楼主把脸捂好啦·····哈哈:lol

使用特权

评论回复
地板
思考| | 2009-8-8 14:11 | 只看该作者
这种主程序的结构应该是楼主的原创吧?(因为我之前没见过).

能够习惯于运用自己的观察力和想象力写一些属于自己创作和发现的东西,就算写的不好也比那些只会去信奉书本上的知识,而从不自我创新的人要好很多.所以原创的东西我很喜欢.

这种程序结构我觉得有些缺点,主要CPU的效率较低,我觉得是这样,一个任务或者说一个子程序或者功能模块,再我们封装了之后,它就具备了一些属性,如:执行的最长与最短时间,要求被执行的频率,是否可重入等等,在一个完整的程序中各个任务要求的执行频率是不一样的,如果我们执行的过快那么就会浪费CPU的时间,执行过慢程序就可能会出错,如一般键盘扫描,10MS执行一次;数码管动态扫描根据位数要求被执行的频率不一样等.

象楼主的每个任务执行频率都一样,这将导致CPU有很多时间都在做无用的重复劳动.

使用特权

评论回复
5
gaohq| | 2009-8-8 20:41 | 只看该作者
我也才学单片机,很期待楼主的实例。
4楼讲的也很好,但我想楼主还是新手离4楼说的还有相当的距离,暂时还顾不上那么多,一两年后楼主就可以顾及4楼说的那些了。

使用特权

评论回复
6
程序匠人| | 2009-8-8 20:49 | 只看该作者
这不就是定时扫描吗?

当然,和用延时程序来做相比,用定时器是一大进步。

并且,如果楼主是在独立状态下“发现”或“发明”这种方法,还是值得鼓励的。

论坛里经常被人提及的所谓“零耗时”键盘扫描方法,也是类似于这个思路(有的是放在定时中断中,有的是通过定时来传递标志,然后到后台程序执行)。

使用特权

评论回复
7
ixiaoyige| | 2009-8-8 21:58 | 只看该作者
本帖最后由 ixiaoyige 于 2009-8-8 22:01 编辑

匠人 大侠有好的方法介绍一下给我们这些菜鸟吧

使用特权

评论回复
8
一朝成名| | 2009-8-8 21:59 | 只看该作者
哈哈,人、大被**了~又发现一个屏蔽关键词~

使用特权

评论回复
9
程序匠人| | 2009-8-8 22:04 | 只看该作者
匠人 大侠有好的方法介绍一下给我们这些菜鸟吧
ixiaoyige 发表于 2009-8-8 21:58


网上有很多关于“分时控制”的思路方法。你先搜索着看看。

使用特权

评论回复
10
戒指320| | 2009-8-8 22:18 | 只看该作者
四楼 思考兄 说的很有理啊

使用特权

评论回复
11
红金龙吸味| | 2009-8-8 22:29 | 只看该作者
定时扫描~~确实有点实用,再加上状态机,可以解决一般情况下的程序结构问题了。

使用特权

评论回复
12
一个牧师|  楼主 | 2009-8-9 20:20 | 只看该作者
对于大家的回复本人虚心接受
对于四楼说的时间不一样的问题我会在后面实例当中来解决
在这先说下思想
就是给子程序一个指针寄存器
每执行到这个子程序时候按照指针所指的内容指向程序
每执行一次加一下指针(还要加上范围判定)
如果说主程序的基准时间是2ms要10ms执行一次按键扫描最好的方法就是在这个子程序指针指向的四个程序
指向为跳出这个程序
剩下的一项为执行这个程序



三楼的兄弟   希望你以后常看我以后的更新   我会在以后更新中让你捂脸 哈哈……
六楼   感谢这么忙还能到我这来逛啊
这不是独立发现的   确实是定时扫描    我们培训的时候是叫分时复用
十二楼   我也想写个操作系统   呵呵  水平有限啊    再说我们平时用的mcu最大的是4k

再和大家说下 啊
用着种方法确实很好   我现在在接一个“大”子写汇编代码就要写超过两千行
难是不难   就是功能有点烦  运用这种方法加功能和解决问题很好解决

使用特权

评论回复
13
thanksgiving| | 2009-8-10 10:10 | 只看该作者
mark

使用特权

评论回复
14
gyjdk0601| | 2009-8-13 23:09 | 只看该作者
期待更新中,觉得楼主写的很好,顶一下!

使用特权

评论回复
15
hhhhhhgggg| | 2009-12-15 15:35 | 只看该作者
MARK

使用特权

评论回复
16
xiaobai54| | 2009-12-15 15:50 | 只看该作者
程序方面倒是可以看看C的书,反正从写程序来说windows和单片机也没什么区别。

使用特权

评论回复
17
huise2008| | 2010-3-20 18:25 | 只看该作者
wokanhao

使用特权

评论回复
18
wsjhy1| | 2010-3-20 20:32 | 只看该作者
xin shou

使用特权

评论回复
19
itelectron| | 2010-3-21 16:31 | 只看该作者
本帖最后由 itelectron 于 2010-3-21 16:33 编辑

分时控制 (时间片吧?) 感觉用UCOS  那种时间管理可能更好些

使用特权

评论回复
20
学海泛舟| | 2010-3-25 21:08 | 只看该作者
学了~~~~~
支持~~~~

使用特权

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

本版积分规则

5

主题

22

帖子

2

粉丝