您好,欢迎来到九壹网。
搜索
您的当前位置:首页实验三单片机定时计数器实验

实验三单片机定时计数器实验

来源:九壹网


实验三单片机定时/计数器实验

1、实验目的

1、学习计数器的使用方法。 2、学习计数器程序的编写。 3、学习定时器的使用方法。 4、学习定时器程序的编写。 5、熟悉汇编语言 2、实验说明

1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。

2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转3、实验仪器和条件 计算机

伟福实验箱(lab2000P) 4、实验内容

1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个统统的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。

1 / 9

3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

5、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。 五、思考题

1、使用其他方式实现本实验功能; 2、改为门控方式外部启动计数;

3、如果改为定时间隔为200us,如何改动程序;

4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。 六、源程序修改原理及其仿真结果

思考题一:使用其他方式实现本实验功能 方法一:

movTMOD, #00000100b;方式0,记数器 movTH0, #0 movTL0, #0

setbTR0;开始记数;由于方式0的特点是计数时使用TL0的低五位和八位TH0,故用加法器a用

2 / 9

“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。

Loop: mova,TL0 anla,#1fh movr1,a mova,TH0 callyiwei adda,r1

movP1, a;将记数结果送P1口ljmpLoop

;实现TH0的高三位移位为高三位,本身TH0是八位,故需要移位五次才能实现 yiwei: movr0,#05h Loop1: rla

djnzr0,Loop1 ret end

3 / 9

硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲 方法二:

movTMOD, #00000110b movTH0, #0 movTL0, #0 setbTR0 Loop:

MovP1,TL0方式2,记数器暂存初值,可自动加载八位加一计数器 ;开始记数;将记数结果送P1口; ; ;

ljmpLoop End

硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲 硬件仿真结果说明:

按动单步脉冲按钮LED灯P0到P7会按照二进制的顺序点亮,即第一次P0亮其他灭,第二次P1亮其他灭,第三次P0、P1亮其他灭,第四次P2亮其他灭……以此类推,实现了用八位LED灯表示计数器的计数过程的目的。

4 / 9

思考题二:改为门控方式外部启动计数

movTMOD, #00001101b;方式1,记数器,门控方式 movTH0, #0 movTL0, #0 setbTR0;开始记数 Loop:

movP1, TL0;将记数结果送P1口 ljmpLoop

end;INT0即P3.2接开关硬件仿真结果说明:

在P3.2所接开关没有拨为高电平之前,按动单步脉冲按钮LED灯没有响应;开关拨为高电平之后按动单步脉冲按钮LED灯的响应同上。实现了计数器的门控外部启动。

思考题三:如果改为定时间隔为200us,如何改动程序 (2^8-x)*2*10^-6=200*10^-6; 故x=256-100

程序其他部分无需改变,定时变为2sLED灯的状态翻转一次 Tickequ10000; 10000 x 200us = 2s T100usequ 256-100; 200us时间常数(6M); C100usequ30h; 200us记数单元

5 / 9

程序选用方式1定时,故计算初值: (2^16-x)*2*10^6=10*10^3; 故x=65536-5000=60536

思考题四:使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序 Tickequ 500; 500 x 10ms = 5s T100usequ 60536 ; 10ms计数单位 C100usequ30h; 10ms记数单元 LEDBufequ0 LEDequP1.0 org0000h ljmpStart org000bh

方式1与方式2的区别不仅在于它是16位计数,同时在于它不能从头装入初值,赋值时要分高八位和低八位分别赋值,并且必须进入中断时手动重装初值T0Int:

movTH0, #high(t100us) movTL0, #low(t100us) pushPSW mova, C100us+1

6 / 9

jnzGoon decC100us Goon: decC100us+1 mova, C100us orla, C100us+1

jnzExit;100us记数器不为0,返回movC100us, #high(Tick) movC100us+1, #low(Tick) cplLEDBuf

记数器为0,重置记数器;取 反 Exit: popPSW reti Start:

movTMOD, #01h

7 / 9

1,定时器

movIE, #10000010b IT0 = 1 setbTR0

开始定时LED;方式 ;; 100us; EA=1,clrLEDBuf clrLED

movC100us, #high(Tick) movC100us+1, #low(Tick) Loop: movc, LEDBuf movLED, c ljmpLoop end

硬件仿真结果说明:

程序开始执行后LED灯以5s为周期重复的点亮,并且每次点亮时可以维持5s,即LED灯会亮5s,然后灭5s……如此循环往复。从现象中可以看出,程序实现了在P1.0口周期性地输出周期为10s的方波,且占空比为1:1,使得LED灯出现上述点亮规律。

8 / 9

继续阅读

9 / 9

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务