原创
短期大量的训练单片机程序才有效果
2013-7-18 11:18
1024
21
22
分类:
消费电子
以前学习单片机程序都是有一截没一截的写些程序,总是没有效果,真要拿一个很简单的课程设计也可能会很头大。没有像做硬件那样的激情。
不过激情和动力无非内在和外在,内在的兴趣只有做硬件才有激情,那么外在的课程设计考试可是实实在在的推动力,我在也坐不住要去写点程序了。
第一个程序就是流水灯,当然是有要求的流水灯,不过也非常简单,要求用51控制最少10盏显示6种彩灯样式,可以用按键控制彩灯的暂停、继续、手动或者自动切换彩灯样式。用定时器和中断可以加分。
做硬件很简单,P0、P1控制16盏彩灯,三个按键都用二极管接入中断口0,硬件做出来后直接写程序,思路是很清晰的,把程序分别测试各个如按键功能彩灯功能都分别测试好后,巴拉巴拉整合写完后下载到单片机里,结果程序没有反应了,又重头到尾检查了程序,没有错呀!但是就是没有反应。就这样从晚上9点开始写到凌晨两点钟也没有解决。根据之前准备省级比赛的经验,当一个问题在晚上被发现自己却怎么也没有办法解决时,最好的解决办法就是睡一觉再说。果然在第二天早上打开程序一眼就发现了问题所在,稍微改动一下程序就解决了。
错误是这样的,用51的8位自动填装(定时器3)来计算彩灯更换样式的时间,在函数顶端就先定义了一个全局变量time_number用在每次触发中断后计算时间长度,原本定时器100us定时触发一次中断,那就直接用if(time_number == 10000)就可以判断1秒钟,可是没注意到是在8位定时器中断里用的,以为和以前一样用16位(定时器2)用char定义一个数等于1000是没有问题的,万万没想到 0<=time_number<=255 。
其实自己这两年的时间只是学习硬件方面的知识,软件方面仅仅是能用而已,在较为宽松的编程环境里不用考虑太多的关于变量大小的东西,也不太注意定时器的使用。但是经过流水灯,秒表这种外设不多却要打好基础的题目确实会让人提高不少。2个星期后的单片机课堂随堂练习原本两次课要求完成的交通灯程序在短时间内就完成了,第一次课下课就可以直接找老师登成绩,第二次课就可以自己学其他东西了。
用户1602177 2013-7-18 11:18