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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一、实验目的

1、学习计数器的使用方法。

2、学习计数器程序的编写。

3、学习定时器的使用方法。

4、学习定时器程序的编写。

5、熟悉汇编语言

二、实验说明

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

2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转

三、实验仪器和条件

计算机

伟福实验箱(lab2000P )

四、实验内容

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

2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。

3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转

4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

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

五、思考题

1、使用其他方式实现本实验功能;

2、改为门控方式外部启动计数;

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

4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。

六、源程序修改原理及其仿真结果

计数器实验:

原程序:

mov TMOD, #00000101b ; 方式1,记数器0

mov TH0, #0

mov TL0, #0

setb TR0 ; 开始记数

Loop:

mov P1, TL0 ; 将记数结果送P1口

ljmp Loop

end

修改一:在原程序基础上,改用方式2进行计数,现象与原程序的现象相同。

mov TMOD, #00000110b ; 方式2,记数器0

mov TH0, #0

mov TL0, #0

setb TR0 ; 开始记数

Loop:

mov P1, TL0 ; 将记数结果送P1口

ljmp Loop

end

修改二:采用计数器0,方式1计数,门控方式外部启动。

mov TMOD, #00001101b ;方式1,记数器0,采用门控方式外部启动计数

mov TH0, #0

mov TL0, #0

setb TR0 ; 开始记数

Loop:

mov P1, TL0 ; 将记数结果送P1口

ljmp Loop

end

以上三种方式都实现了按键的计数,且实验现象相同。

定时器实验:

原程序:

Tick equ 10000 ; 10000 x 100us = 1s

T100us equ 256-50 ; 100us时间常数(6M)

C100us equ 30h ; 100us记数单元

LEDBuf equ 0

LED equ P1.0

org 0000h

ljmp Start

org 000bh

T0Int:

push PSW

mov a, C100us+1

jnz Goon

dec C100us

Goon: dec C100us+1

mov a, C100us

orl a, C100us+1

jnz Exit ; 100us 记数器不为0, 返回

mov C100us, #high(Tick)

mov C100us+1, #low(Tick)

cpl LEDBuf ; 100us 记数器为0, 重置记数器; 取反LED Exit:

pop PSW

reti

Start:

mov TMOD, #02h ; 方式2, 定时器

mov TH0, #t100us

mov TL0, #t100us

mov IE, #10000010b ; EA=1, IT0 = 1

setb TR0 ; 开始定时

clr LEDBuf

clr LED

mov C100us, #high(Tick)

mov C100us+1, #low(Tick)

Loop:

mov c, LEDBuf

mov LED, c

ljmp Loop

end

修改:定时器使用方式1,定时间隔为200us。

Tick equ 20000 ; 20000 x 200us = 4s

T200us equ 256-100 ; 200us时间常数(6M)

C200us equ 30h ; 200us记数单元

LEDBuf equ 0

LED equ P1.0

org 0000h

ljmp Start

org 000bh

T0Int: push PSW

mov a, C200us+1

jnz Goon

dec C200us

Goon: dec C200us+1

mov a, C200us

orl a, C200us+1

jnz Exit ; 100us 记数器不为0, 返回

mov C200us, #high(Tick)

mov C200us+1, #low(Tick)

cpl LEDBuf ; 100us 记数器为0, 重置记数器; 取反LED Exit:

pop PSW

reti

Start:

mov TMOD, #01h ; 方式1 定时器

mov TH0, #t200us

mov TL0, #t200us

相关文档
最新文档