单片机实验报告定时器.doc
文本预览下载声明
实验四 定时器实验
自动化121班 1202100236 张礼
一.实验目的
掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。
二.实验仪器
单片机开发板一套,计算机一台。
三.实验任务
编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。
开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到 2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。两片锁存器的输出使能端都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。而U2的锁存使能端LE由P2.1控制,所以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。
汇编语言程序流程如图4-2:
四.实验步骤:
1.数码管的0~9的字型码表如下:
0 1 2 3 4 5 6 7 8 9 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f
2.参考图4-2所给的程序流程图编写实验程序。(注:以下程序为两位60秒计数程序)
#include reg52.h
sbit wei=P2^0;
sbit duan=P2^1;
char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int i,j,k,num,shi,ge;
void delay(int a)
{
for(i=0;ia;i++)
for(j=0;j100;j++);
}
void display(int shi,int ge)
{
wei=1;
P1=0xfe;
wei=0;
duan=1;
P1=table[shi];
duan=0;
delay(5);
wei=1;
P1=0xfd;
wei=0;
duan=1;
P1=table[ge];
duan=0;
delay(5);
}
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
num=0;
while(1)
{
display(shi,ge);
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
k++;
if(k==20)
{
k=0;
num++;
if(num==60)num=0;
shi=num/10;
ge=num%10;
}
}
3.实验接线,如图4-1。
用一条8芯的杜邦线将单片机的P1与开发板的J3端子相连;用2条单芯杜邦线将单片机的P2.0、P2.1分别与开发板的位锁存(A)和段锁存(B)相连;用1个跳线将J50的两个端子连接,用于给数码管提供电源。
4.上机调试、运行程序。
5.记录实验程序。
6.分析实验中出现的问题。
7.独立完成实验报告。
五.实验总结:
通过本实验,我对定时器有了更深刻的理解。更熟练的应用定时器中断。并且我还额外扩展了本实验,实现了两位计数。收获甚多。
主程序
① 送中断矢量地址
② 设置定时器的工作方式
③ 开放中断,并允许定时器溢出请求中断
④ 送计数初值
⑤ 设定中断次数以确保定时时间
⑥ 赋字型码首地址
⑦ 赋字型码偏移量
⑧ 启动定时器定时
等待中断
N
中断服务程序
重新送计数初值
N
Y
Y
1秒到否?
① 指向下一个字型码
② 定时下一个1秒钟
中断返回
是否显示完“9”否?
重新显示“0”字符
① 送位码,并锁存
② 送段码,并锁存
图4-2 汇编语言程序流程图
显示全部