华 南 农 业 大 学 实 验 报 告
专业班次 08电信1 组别 200831120102
题目 实验六 定时器控制循环彩灯 姓 名 陈 建 泽 日期 2010.11.4
一、实验目的
1.学习89C51内部定时器的使用和编程方法。
2.进一步掌握中断处理程序的编写方法。
二、实验设备:
STC89C52单片机实验板、串口下载线、USB连接线、电脑
实验原理
1.定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样, 为振荡频率的1/12。本实验中时钟频率为12.0 MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=0AH,即可实现0.5秒延时。
时间常数可按下述方法确定:
机器周期=12÷晶振频率=12/(12×106)=1us
设计数初值为X,则(216-x)×1×10-6=0.05,可求得X=15536
化为十六进制则X=3CB0H,故初始值为TH1=3CH,TL1=B0H
2.初始化程序
包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP不必设置。
3.设计中断服务程序和主程序
中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
四、实验步骤
1. 分析实验所用到的电路原理图,根据需要连接跳线帽。
2. 89C51内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的LED1~LED8。要求编写程序模拟一循环彩灯。彩灯变化花样为:①LED1、LED2、…LED8依次点亮;②LED1、LED2、…LED8依次熄灭;③LED1、LED2、…LED8全亮、全灭。各时序间隔为0.5
成绩: 教师: 日期:
秒。让发光二极管按以上规律循环显示下去。
3.根据流程图,编写实验程序,并完成调试。
五、实验流程图
中断产生各灯依次点亮
中断产生
各灯依次点亮
各灯依次熄灭
全亮、全灭
给A重装初值
中断返回
开始
定时器初始化,50ms一次中断
R0做中断次数寄存器
A控制P1口
等待中断
定时器控制循环彩灯流程图
实验程序
根据实验流程图,编写出一下实验程序,并完成调试。
//*******************实验6 定时器控制循环彩灯实验**************
;实验名称:定时器控制循环彩灯实验
;功 能:彩灯变化花样为:①LED1、LED2、…LED8依次点亮;
; ②LED1、LED2、…LED8依次熄灭;③LED1…LED8全亮、全 灭。
; 各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。
;编 写 人:08电信1 陈建泽
;编写时间:2010年11月4日
//***********************程序代码如下*****************************
ORG 0000H
AJMP START
ORG 000BH ;定时器0中断服务子程序入口
AJMP T0INT
ORG 0030H
START:MOV TMOD,#01H ;定时0工作模式1
MOV TH0,#(65536-50000)/256 ;定时器0高八位初值
MOV TL0,#(65536-50000)MOD 256 ;定时器0低八位初值
SETB EA ;开总中断
SETB ET0 ;开定时器0中断
SETB TR0 ;启动定时器0
MOV A,#0FEH ;先点亮第一盏灯
MOV P1,A
MOV R0,#00H ;R0为中断次数寄存器
AJMP $
//*******************定时器0中断服务子程序***************