本文以6MHz时钟的单片机AT89C51系统为例,说明时钟中断的应用:
定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及 W的值压入堆栈,然后即把0D8F7h装入T0。
设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DI ,用/MOV A,INCPI/ADD A,#25/MOV W_DI ,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DI 再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。
在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。
主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。
例:在P1.1输出1秒的高电平脉冲
MOV A,INCPI
INC A
CJNE A,INCPI$ ;等待一次中断处理完成
SET P1.1 ;设P1.1为H,脉冲开始
ADD A,#50 ;50个20mS为1秒
CJNE A,INCPI,$ ;等中断将INCPI加一50次
CLR P1.1 ;设P1.1为L,脉冲结束
结束语:从上看出,要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。
注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。
关键字:单片机编程 时钟中断 执行时间
引用地址:
单片机编程中的时钟中断应用
推荐阅读最新更新时间:2024-03-16 13:09
盘点那些常见的单片机编程框架!
随着科技的不断发展,单片机已经广泛应用于各种各样的领域。而随着单片机编程的需求越来越大,编程框架也变得越来越重要。本文将为大家盘点常见的单片机编程框架。 1. Arduino Arduino是目前最常用的单片机编程框架之一。它使用C++编程语言和开源硬件平台,能够快速上手。Arduino还有一个丰富的库和example,可以方便的实现各种功能和项目。 2. STM32Cube STM32Cube是ST公司发布的一款免费的单片机编程框架。它基于HAL(Hardware Abstraction Layer)和LL(Low-Layer)驱动库,并集成了代码生成器、配置工具和性能分析器等工具。STM32Cube支持多种编程
[单片机]
单片机编程:求8个无符号数的平均值
单片机编程:求8个无符号数的平均值。 有8个无符号数,存放在内部RAM以20H开始的8个单元中,要求将它们的平均值保存在R2中。 ;------------------------------------------------------------------------------ 最佳答案: 做这个题目,要有两个阶段,先求和,再除以8。程序如下: ;8个无符号数存放在内部RAM以20H开始的8个单元中,先求和: ; MOV R0, #20H ;设定数据起始地址 MOV R1, #8 ;共有8字节,将循环相加8次 MOV R2, #0 ;R2 R3清零 MOV R3,
[单片机]
你不知道的单片机编程器分类
G840联机/脱机烧写编程器 1、40针准全驱动,进口优质锁紧座。满足绝大多数IC烧录的脚位需求,充分提供了未来升级的基础条件。 2、用户享受终身升级支持。纯软件升级,只要从网上下载最新版本软件,就可完成升级。您的编程器将永远是最新的。 3、提供联机操作模式和脱机操作模式,既适用于开发、试验、教学,又适用于小批量量产,无须总是开电脑。 4、触摸键控制,你可以不用点击鼠标,使操作更为方便。触摸键经久耐用,永不损毁。 5、针脚接触检测准确无误。遇接触不良或插放错误,及时中止操作进程。 6、操作结果三重指示:软件界面显示、指示灯显示、可选择的蜂鸣指示。 7、双重电源模式。专用外部稳压电源供电方式,进一步确保稳定工作。有效避免部分电脑
[单片机]
单片机编程:键控定时灯
如图所示的电路,要求开机时灯灭,按一下按钮,灯D1亮,延时10秒后自动熄灭。 若在灯亮期间再按一下按钮,则灯立即熄灭。 试编写实现上述功能的完整程序。 要用汇编的哦,C俺还没学。 ;------------------------------------------------------- 这个题目,共有四人给出了程序,楼主选择的,却是一个最差的程序。 有位网友,已经对做而论道的程序和另一个程序,进行了对比,结果说明做而论道的程序是正确的。 下面把做而论道的程序写在下面,供大家评论。 下列程序,经过仿真,可以满足要求。 ;================================ ORG 0000H START:
[单片机]
单片机编程好学吗?单片机初学者怎样看懂代码?
单片机在很多人看来好像门槛很高,在某些人看来很简单。 所以,单片机编程好不好学,这取决于谁去学,有没有基础,有没有兴趣。 我自己是通过自学学会的,我个人认为相对java那些纯软件,单片机比较好学。 单片机编程只需要学习C语言,很多人也会把汇编也学了,但是实际产品开发汇编一般用的还是比较少。 反正我从来没用汇编做过项目,所以只需要学习C语言就可以了。 至于单片机嘛,入门51的单片机也很简单,就是看手册配置单片机的寄存器而已。 就像你买一个冰箱,它配一个说明书给你,教你怎么用。 学习编程的过程才是最枯燥,连续看1个月视频,敲一个月的代码,只能在屏幕前显示冷冰冰一些字符。 而单片机则有趣的多,你只要会C语言入门语句,再加一点单片机寄存器
[单片机]
如何自学单片机编程
目前 单片机 对于工科学生而言就会象电路基础原理一样成为基础课。 其实不是单片机难学,而是不知道怎么入门。请大家记住一句话“单片机不是学出来的,而是玩出来的”。下面结合自己自学单片机的体会,和大家一起来“玩”单片机。准备好了吗?我现在开始教大家如何学习单片机。 第一步:先读通一本教材 唉!?太没创意了吧,还要看书?不错,第一步还是要通读一遍教材,这样我们才能站在巨人的肩膀上。读了一遍什么感觉,一个字晕。着很正常,不然你就看不到这篇文章。很多人在晕了之后就泄气了,或者换教材,接着晕,直至晕倒。不过,现在告诉大家我们要向酒鬼学习,晕了不要紧,嘴上一直说“没醉”,至少有可以多喝半斤。所以信心很重要。 第二:晕着脑袋实践 第一步我
[单片机]
自制简单51单片机编程器(烧写器)
AT89C51是一款应用最为广泛的8051单片机,更重要的是他具有反复烧写(FLASH)的特性。一般情况下可重复烧写1000次,这样为初学者试验提供了一个廉价的平台。为了满足广大单片机爱好者动手的需要,本人利用半个月的时间,参考国外资料,实际设计制作成功一款简单的AT89C51/52/55单片机编程器。由于单片机编程时序不同,这一款编程器仅仅支持ATMEL公司的AT89C51, AT89C52, AT89C55芯片,不支持华邦或飞利浦兼容芯片。下面是单片机编程器电路图. 注:元器件清单见附录 工作原理简述: Q2, Q4以及周围的几个元件构成了电平转换电路,这样节省了1片max 232芯片,在要求不高的场合,这个电路在
[单片机]
数码显示管显示按键总个数 89c51单片机编程实例
;AT89C51单片机P1口接8个按键(switch),P2口接1个共阴极数码显示管,数码显示管显示按键按下的个数 ;注:连接电路图时,将实例2.1中的八个button按键换成switch按键 org 00h sjmp start org 30h start: mov p2,#3fh mov dptr,#table cc: mov r3,#0 next: mov a,p1 cpl a clr c mov r4,#8 bb: rlc a jnc aa inc r3 aa: djnz r4, bb mov a,r3 movc a,@
[单片机]