实验五 8051单片机定时中断实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五8051单片机定时中断实验
一实验目的:
了解8051系列单片机的定时中断基本工作原理。掌握8051系列单片机定时中断的用法。
二实验原理:
在上一个实验里我们介绍了8051单片机的外中断应用,本实验要介绍的是定时器中断的应用。
8051系列单片机至少有两个16位的内部定时器/计数器,既可以编程为定时器使用,也可以作为计数器使用。如果是计数内部晶振驱动时钟,它是定时器,如果是计数8051的输入管脚的信号,就是计数器。
MCS-51单片机内部的定时/计数器的结构如图5-1所示,定时器T0特性功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。程序开始时需对TL0、TH0、TL1和TH1进行初始化编程,以定义它们的工作方式和控制T0和T1的计数。
图5-1
TMOD特殊功能寄存器的格式参见下表(表5-1):
表5-1
高4位为定时器/计数器1的控制字,低4位为定时器/计数器0的控制字。其中GATE
为门控信号,C/T为定时器或计数器的选择,而M1,M0是工作方式选择位。
当M1M0=00时,T/C工作在方式0。方式0为13位的T/C,其计数器由TH的8位和TL的5
位构成,计数器的计数值范围是: 1—8192(213),但是启动前可以预置计数初值。当C/T为
0时,T/C为定时器,计数脉冲为振荡源12分频的信号;当C/T为1时,T/C为计数器,对输入端T0或T1输入的脉冲进行计数。计数脉冲加到计数器上与否决定于启动信号。当GATE=0时,TR=1时T/C便启动,当GATE=1时,启动受到TR与INT的双重控制,即二者同时为高
时才启动。当计数满时,TH向高位进位,这时中断溢出标志TF置1,即产生中断请求。而当CPU转向中断服务程序时,TF自动清零。
当M1M0=01时,T/C工作在方式1。方式1和方式0的区别仅在于方式0的计数器位数为13位,而方式1的为16位。
当M1M0=10时,T/C工作在方式2。区别于前面的两种工作方式的是,方式2具有自动重装载的功能。TH和TL作为两个8位的计数器,TH中的8位初值始终保持不变,由TL进行8位计数。在计数溢出时不但会产生中断请求,而且自动将TH中的值加载至TL 中,即自动重装载。
当M1M0=11时,T/C工作在方式3。但是这种工作方式只存在于T/C0中,这时TH0与TL0成为两个独立的计数器。只有在T/C1作为串行口的波特率发生器使用,而造成定时器不够用时,T/C0才能工作在方式3。
下面是定时器时间常数计算公式,这个公式在方式1,即16 位定时或计数模式可用。
THX=(65536-定时时长[µS]/(机器周期数/时钟频率[MHz])/256;
TLX=(65536-定时时长[µS]/(机器周期数/时钟频率[MHz])%256;
在定时器重装载过程中因为TL1=0可以不写。
三实验内容:
利用中断方式在LED上输出10HZ方波,系统晶体频率11.059MHz。
四实验电路图:
图5-2
五实验方法:
1.根据如上电路图连接好实验电路。实验板中只要将P1.3与LED1相连。
2.按照实验要求编写实验程序,建立新工程,保存为TINT。
3.调试程序。
4.将keilC51产生的tint.hex文件通过在线下载ISP或商用编程器。
六参考程序:
1.汇编源程序
ORG 0000H
LJMP MAIN
ORG 001Bh ;定时1中断服务入口地址
LJMP TMR1_INT_SRV
MAIN: LCALL INIT_TMR1
LCALL INIT_TMR1INT
AGAIN: SJMP AGAIN
TMR1_INT_SRV: MOV TH1,#0x4C ;中断服务子程序
CPL P1.3
RETI
INIT_TMR1INT: SETB ET1 ;定时中断初始化
SETB EA ;开中断
RET
INIT_TMR1: MOV TMOD,#0x11 ;初始化定时器
MOV TH1,#0x4C
CLR A
MOV TL1,A
SETB TR1
RET
END
2.C语言源程序
/********************************************************
文件名:tint.c
*描述:方波输出
********************************************************/ #include
sbit LED= P1^3;
/********************************************************
* 描述:定时中断设置子程序
* 输入:无
* 返回:无
********************************************************/ void INIT_TMR1(void)
{
TMOD=0x11;
TH1=0x4C; // (65536-50000uS/(12cyc/11.0592MHz))/256
TL1=0; // (65536-50000uS/(12cyc/11.0592MHz))%256
TR1=1;
}
/**************************************************
* 描述:定时器 1 开中断程序
* 输入:无
* 返回:无
**************************************************/
void INIT_TMR1INT(void)
{
ET1=1;
EA=1;
}
/**************************************************
* 描述:中断服务子程序,输出方波
* 输入:无