- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
KeilC学习定时器定时s.ppt
实例3-1:定时器中断来闪灯 单片机的主程序是从0x0000开始运行的,单片机服务程序从哪里开始运行呢?在51里,有多个中断服务程序入口,0号入口是外中断0,地址在0x0003;1号入口是定时器0,在0x000B;2号入口是外中断1;地址在0x0013,3号入口是定时器2;地址在0x001B,等等。当中断发生时,程序就记下当前运行的位置,跳到对应的中断入口去运行中断服务程序,运行完之后,又跳回到原来的位置继续运行。 在C51中,你不用理会中断服务程序放在哪里,会怎么跳转。你只要把某个函数标识为几号中断服务函数就可以了。在发生了对应的中断时,就会自动的运行这个函数。 在定时器服务函数里,需要重新置入定时器的值,这样才能保证每次溢出时,都是你指定的时间。这里置入的是0x0006,还需要走0x10000-0x0006个机器周期才溢出。换成10进制也就是每65530个机器周期中断一次。我们仿真的晶振Z,每12个时钟一个机器周期。65530×120.036秒。也就是差不多28HZ的闪烁频率。 计算初值 12M晶振 50MS中断 12M的晶振,则机器周期是1us(12个振荡周期为1个机器周期) 方式1下 定时时间=(65536-T0初值)*机器周期; 最大定时时间=2的16字方*机器周期=0.065516s 所以你可以选择 50MS中断一次+1 一直加到20 就可以定时1s了 TH0=(65536-定时时间/机器周期)/256 (取整) TL0=(65536-定时时间/机器周期)%256(取余) 实例3-2:定时器精确定位1秒钟(使用AT89C52的定时器2) 要精确定时,必须使用自装载方式。这里我们使用T2定时器,让它工作在16bit自动装载方式,这时,有另一个位置专门装着16位预装载值,T2溢出时,预装载值立即被置入。这就保证了精确定时。 即使是16位定时器,最长的溢出时间也就几十毫秒,要定时一秒,就需要一个变量来保存溢出的次数,积累到了多少次之后,才执行一次操作。这样就可以累加到1秒或者更长的时间才做一次操作了。 如果使用T2定时器实现1秒精确定时? 下面我们就来计算: 仿真器的晶振Z,每秒钟可以执行1843200个机器周期(12个时钟周期为1个机器周期)。而T2每次溢出最多65536个机器周期。我们尽量应该让溢出中断的次数最少,这样对主程序的干扰也就最小。 选择每秒中断24次,每次溢出1843200/24=76800个机器周期,超出65536,无效。 选择每秒中断30次,每次溢出1843200/30=61440个机器周期 选择每秒中断32次,每次溢出1843200/32=57600个机器周期 选择每秒中断36次,每次溢出1843200/36=51200个机器周期 选择每秒中断40次,每次溢出1843200/40=46080个机器周期 从上面可以看到我们可以选择方式有很多,但是最佳的是每秒中断30次,每次溢出61440个机器周期。也就是赋定时器T2初值65536-61440=4096,换成十六进制就是0x1000。 我们在定时器服务函数里,设置了一个静态变量t,静态变量的值在进入函数时是不会被初始化的,而是保持上次的值。它用来计数定时器的溢出次数,也就是T2中断函数进入的次数,每溢出30次,就控制一次LED灯的反转显示。这时的时间就正好是1秒,而且是精确的1秒!只与晶振的精度有关。 练习:MAX7219显示,参考3Keil C学习.ppt 练习3: 显示用MAX7219显示器 用定时器显示2位(十位,个位)LED数码管的数字,个位显示0-9,加到9后十位加1,并个位为0.十位显示0-5. 定时器1s自动加1。(可以使用其他的晶振时间,也可以选用AT89C51。12M晶振) 任务书:电子钟设计 显示电子钟的时、分、秒,并能进行自动加1s;秒加到59进分,分加到59进小时,时进到23重新开始计时。 实例4 读IO,用按钮控制点灯 请看一下电路,今天我们要学习用单片机读取按键的值,并且使用一个按键K1(连接与P1.4)去控制点亮P1.0控制的LED,用另一个按键K2(连接与P1.5)去控制P1.1控制的LED。 下面讲述一下识别按键的原理。在单片机中,我们可以读取某个IO的值。在51的IO口,如果处于输出1的状态(51上电后IO就默认为1),这时IO内部可以简化为有一个几十K的电阻上拉到电源VCC(P0除外),这时这个IO就可以作为输入脚用。 如果直接读一个没有按下按键的IO,就会读到1。如果这个按键按下了,这个IO就通过按键短路到了地。这是就会读到0。这就是读按键的原理。 练习4:计数器 设计一个计数器,当按下一个键盘时,LED显
您可能关注的文档
- Java程序设计(chap).ppt
- java程序设计(辛运帏_饶一梅_马素霞_第二版)课后习题答案.doc
- java程序设计(辛运帏饶一梅马素霞第二版)课后习题答案.doc
- Java程序设计6.ppt
- Java程序设计9.ppt
- Java程序设计B复习范围(已解答).doc
- Java程序设计chap.ppt
- Java程序设计Java入门.ppt
- Java程序设计Java基础语法.ppt
- Java程序设计LectureJava语法基础.ppt
- 2025江浙沪居民睡眠健康小调研报告.pdf
- 毕业论文的开题报告范文.docx
- 团委活动方案(拓展).docx
- 汽车智能驾驶行业深度报告:端到端与AI共振,智驾平权开启新时代.pdf
- 小核酸行业深度:技术平台和适应症不断验证,迎来销售和临床密集兑现期-华福证券-2025.3.31-65页.docx
- 医药生物行业医疗AI专题报告二多组学篇AI技术驱动精准诊断实现重要突破-25031440页.docx
- CXO行业系列报告三寒冬已过行业需求逐步回暖-25031430页.docx
- 全国租赁市场报告2025年3月_可搜索.pdf
- 玩具行业“情绪经济”专题:创新玩法+IP赋能,重新定义玩具-华鑫证券-2025.docx
- 医疗保健行业PCAB抑制剂药物深度报告抑酸药物市场空间广阔PCAB抑制剂大有可为-25.pdf
文档评论(0)