综合资讯 技术文章 原文阅读 在线商城 下载专区 DATASHEET 技术论坛 商务频道

电子技术 | 技术资料 | 嵌入式系统 | 单片机专题 | DSP专题
EDA/PLD专题 | 电源技术专题 | 电子制作专题 | 其他综合 | 芯片选型

所在的位置:首页在线阅读单片机专题自己动手学习PIC单片机正文
 
十一、定时器

本次的实验仍然沿用计数器的电路,不作电的改变,但却要更换程序。使用新的程序,可以赋予旧电路新的功能,以定时器来说,原先在计数器的递增按钮,在这里因程序的改写 而变成清除按钮;而原先的归零按钮,也变成计时开关按钮;至于两个七段显示,则由显示递增次数改为显示递增秒数,但上限仍然是"99"。
当送电开始后,秒数是不计时的,只显示"00"。按下计时开关钮后,即启动计时功能,显示就开始显示递增的秒数。当再度按下计时按钮(计时开关)后,这时显示持续显示暂停前的秒数,不再改变。
计时开关按钮就是一个计时的启动与暂停开关,与计数器的归零按钮异曲同工。无论是在计时中或是在暂停计时中,按下此按钮马上可以将定时值归零,而原先是计时的状态依然继续计时,暂停的状态依然继续。
1. 目的
□电路上:与实习5-7的相同。
□程序上:学习如何在不修改电路的情况下,增加或转变硬件的功能。
2. 材料
与实习5-7的相同
3. 电路
图5-34 原理图
4. 实照
图5-35 实照
5. 步骤
与实习5-7的相同。
6. 流程
图5-36 流程图
7. 程序
□标号说明
· RESET:起始程序的进点
· DISP_ZERO:显示"00"字进入点
· RE_OP:重新循环执行进入点
· CLRB:按钮状态值保存处
· BIT4:等待同步判断程序的进入点
· BIT8:等待同步判断程序的进入点
· BIT12:等待同步判断程序的进入点
· BIT13:等待同步判断程序的进入点
· NO_CY_ONE:定时值个位数递增,但十位数不受影响的数值处理进入点
· NO_CY_TEN:定时值十、个位数都递增,但十位数递增不溢了的数值处理进入点
· WAIT_DISP:等待同步判断程序的进入点
· WAIT_DISP3:等待同步判断程序的进入点
· WAIT_DISP4:等待同步判断程序的进入点
· WAIT_DISP5:等待同步判断程序的进入点
· DISP_CURR:显示程序进入点
· DELAY_10MS:请参照实习先例
· DELAY1:请参照实习先例
· DELAY2:请参照实习先例
· DELAY_7US:请参照实习先例
· DLY7:请参照实习先例
· DELAY_1MS:请参照实习先例
· DDA:请参照实习先例
· DDB:请参照实习先例
寄存器使用配置
· F3:程序状态字
· F7:I/O端口,包含读取按键电位、输出显示值、
· F23:欲显示数据的暂放区
· F24:延时子程序递减循环计数
· F25:延时子程序递减循环计数
· F26:循环计数,达50次为秒钟
· F27:开始计时按钮状态的保存处(1:按下0:未按)
· F28:导入按键值的的暂放处
· F29:定时值的十位数存放处
· F30:定时值的个位数存放处
· F31:定时值存放处,使用BCD格式保存
 
8. 说明
(1)初始设置
这是设置端口引脚状态的程序,与计数器的初始设置相同。
(2)显示起始值
当刚送电后,显示器显示"00",表示由零开始计时。
(3)读取按钮
我们每秒取样导入按钮状态一百次振荡频率,只要两次取样的按钮值相等即代表按钮状态成立,而前后值若不等则视同抖动,不予理人。取样的间隔为10μs,是以消除抖动之用。
(4)判断按钮
当取入的按钮值成立时,以清除按钮的处理优先于计时开并按钮,如果清除按钮被按下的话,便显示"00"重新开始计时,如果没被按下,则进行计时开关按钮的判断。
(5)判断按钮二
此处是判断计时开关按钮是否被按下?如果有,则切换计时状态位。计时状态位为1表示按下,0表示未按下。
(6)同步处理
由于上述的各个步骤处理时间不一但为了使计时时间准确,所以在这里插入同步的处理。上述程序中处理较快完成的程序,当处理完时就将它跳跃至延时时间较长的地址去执行,反之处理较慢完成的程序,则将它跳跃至延时时间较短的地址去执行。这样无论程序处理流程条件如何,计时时间都不会受到影响。
(7)定时值递增
这里的递增程序与计数器的雷同,不过必须执行此处达50次才可递增一次,原因是程序全程执行一次是20毫秒,即是指1秒之内会执行50次,当重复执行至此50次后,便是时间经过1秒了,此时才可使定时值递增。为了能够知道是否已累积达50次,所以设立了一个记录次数的寄存器,每招待到此1次,就递增此寄存器的数1次,并判断是否已达50次?若不是则不可递增定时值,若是已达50 ,便递增定时值,并清除计满50次的寄存器,以便重新累积次数。
(8)同步处理二
作用与前一个同步处理是相同的经过定时值递增的程序执行后,由于递增过程中使用到许多分个执行,使得程序分个执行完后又产生不同步的现象,所以在此又做一次同步处理,以使计时更准确。
(9)循环处理
到此处时已经将主程序全程执行一遍了,耗时约20毫秒,然后又重新开始执行,这样周而复始,永远循环,直到断电或复位才改变。
(10)读值延时
此程序约能延时10毫秒的时间。
(11)显示定时值
这里的程序操作与计数器的显示程序一模一样,可参考以前的说明。
(12)熄灭延时
此程序约能延时7毫秒的时间。
(13)显示延时
此程序约能延时5毫秒的时间。

9.除错
□电路方面的错误:参照实验5-9。
□程序方面的错误:
1. 延时参数的数值不能任意更改,不然会造成计时的间隔时间不准确。
2. NOP指令的数目不能任意更改,不然会造成计时的间隔时间不准确。
3. BTFSS与BTFSC指令交替使用次数颇多,切勿混淆。
4. 指令结果保存位置指向复杂,指向操作数的值需用要特别注意。
5. 调用延时子程序的次数颇多,且本次延时程序有3种,注意不要调用错误。


返回 上一页 下一页   信息发布:工号01   转引自: 【 】 【打印】 【关闭

关于我们 ┋ 友情链接


深圳市福田区海滨广场福业大厦12C
电话:0755-88305880 25960580 传真:0755-88305880
Copyright©2005-2007 无忧电子开发网版权所有

粤ICP备05064233号