单片机实验三-定时器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 定时器实验
——循环彩灯实验
1、 实验目的
1. 学习8051内部计数器的使用和编程方法。
2. 进一步掌握中断处理程序的编写方法。
2、 实验原理
1. 定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的
1/12。比如实验中时钟频率为12MHZ,现要采用中断方法来实现
0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒
产生一次中断,CPU响应中断后将RO中计数值减一,令RO=0AH,即
可实现0.5秒延时。
初值=65536-50000
2. 初始化程序
包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送
入定时器中。
3. 设计中断服务程序和主程序
中断服务程序除了要完成计数减一工作外,还要将时间常数重新
送入定时器中,为下一次中断做准备。主程序则用来控制发光二
极管按要求顺序燃灭。
3、 实验要求
由8051内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发
光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化
花样可自行设计。建议变化花样为:L1、L2、…L8依次点亮;
L1、L2、…L8依次熄灭;L1、L2、…L8全亮、全灭。各时序间
隔为0.5秒。让发光二极管按以上规律循环显示下去。
4、 实验连线
P1.0~P1.7分别接发光二极管L1~L8即可。
5、 程序
org 0000h
Ljmp main
org 000Bh
Ljmp INTT
org 0100h
main:
mov sp,#60h /*设置堆栈指针
mov TMOD,#01h /*设置TMOD,仅由TRx控制中断,定时器
模式,工作方式1
mov TH0,#3CH
MOV TL0,#0B0H /*设置初值x=65536-50000 (12M晶振)
SETB EA /*开中断
SETB ET0 /*开定时器中断T0
SETB TR0 /*启动定时器
MOV R1,#8 /*中断子程序工作方式1的工作次数
MOV R2,#8 /*中断子程序工作方式2的工作次数
MOV R3,#1 /*中断子程序工作方式3的工作次数
MOV R0,#0AH /*延时次数(产生中断的次数)
MOV A,#0FFH
WAIT1:AJMP WAIT1
INTT:
MOV TH0,#3CH
MOV TL0,#0B0H /*计数器赋初值
DJNZ R0,RETT /*R0减1后判断延时的次数是否足够,足够顺序执
行,不足够跳中断返回
CJNE R1,#0,INTT1 /*判断彩灯工作方式1工作是否完毕,完毕顺序执行
下一种方式,未完毕跳转继续执行此种方式
CJNE R2,#0,INTT2 /*判断彩灯工作方式2工作是否完毕,完毕顺序执行
下一种方式,未完毕跳转继续执行此种方式
CJNE R3,#0,INTT3 /*判断彩灯工作方式3工作是否完毕,完毕顺序执行
下一种方式,未完毕跳转继续执行此种方式 JMP INTT4 /*跳转执行第4种方式
INTT1:MOV R0,#0AH /*重新向延时次数计数器赋初值
CLR C /*C清零
RLC A /*带进位左循环移位,低位移入0,即LED
相继点亮(低电平亮)
DEC R1 /*工作次数减1
JMP RETT /*跳中断返回
INTT2:MOV R0,#0AH
SETB C /*C置1
RRC A /*带进位右循环移位,高位移入1,即LED
相继熄灭(低电平灭)
DEC R2
JMP RETT
INTT3:MOV R0,#0AH
MOV A,#0 /*8位LED灯全部点亮
DEC R3
JMP RETT
INTT4:MOV R0,#0AH
MOV P1,#0FFH /*8位LED灯全部熄灭
MOV R1,#8
MOV R2,#8
MOV R3,#1
MOV R0,#0AH
MOV A,#0FFH /*重新装入相应初值,循环执行彩灯的四种工作方式
JMP INTT
RETT:
MOV P1,A /*输出彩灯的各种状态
RETI
END
6、 结论
通过本次试验掌握了8051内部计数器的使用和编程方法。而且进一步掌握中断处理程序的编写方法。