实验(六)定时器中断实验

一.实验目的、内容、仪器

实验目的:

  1. 了解单片机的定时器系统,定时器1和定时器0的功能及工作方式。
  2. 了解中断服务程序的写法。
  3. 了解定时器每个引脚的功能。

实验内容:使用定时器0的工作方式一,采用中断方式,控制led(数码管显示)的闪烁(1s),同时led2的闪烁(0.5s)。

实验仪器:AT89C51:51单片机,RES:电阻,BUTTON:按键、CAP:电容、CRYSTAL:晶振、RES:电阻、Led:发光二极管

二.硬件原理

 三.程序流程图

 四.代码实现

#include <reg51.h> 
sbit led1=P0^0; 
sbit led2=P1^0; 
int count0,count1;
 //定时器0溢出中断程序 
void timer0() interrupt 1
 //定时器0中断标志位为1 
{
 //重新装载定时器0计数初值 
TH0=(65536-50000)/256; 
TL0=(65536-50000)%256; 
if(count0==10) 
//T0*10=1s LED1闪烁 
{ 
led1=~led1;
count0=0; 
}
 count0++;
 } //定时器1溢出中断程序 

void timer1() interrupt 3 //定时器1中断标志位为3
{ 
//重新装载定时器1计数初值 
TH1=(65536-25000)/256; 
TL1=(65536-25000)%256; 
if(count1==10) //T1*10=0.5s LED2闪烁 
{ 
led2=~led2; 
count1=0;
 } 
count1++; 
} 

int main() 
{
EA=1; //全局中断使能 
ET0=1; //定时器0溢出中断使能 
ET1=1; //定时器1溢出中断使能 
TR0=1; //定时器0使能 
TR1=1; //定时器1使能 
TMOD=0x11;  //00010001B,定时器0、1使用工作方式1,16位定时器 
//装载定时器0计数初值 
TH0=(65536-50000)/256; //内置时钟频率为6MHz,定时器0计数50000次,计数初值为15536转为16进制 
TL0=(65536-50000)%256; //机械周期为2us,T0=(65536-计数初值)*2us=0.1s 
//装载定时器1计数初值 
TH1=(65536-25000)/256; //内置时钟频率为6MHz,定时器0计数25000次,计数初值为40536转为16进制 
TL1=(65536-25000)%256; //机械周期为2us,T1=(65536-计数初值)*2us=0.05s 
led1=0; //控制P0.0 
led2=0; //控制P1.0 
while(1) 
{
 } 
 }	

五.实验步骤

(1)了解译码器的功能,以及动态显示原理

(2)搭建仿真电路,勾选debug,建立keil工程,选择单片机型号

(3)给工程创建源码文件,并以.c结尾,添加文件到源组里

(4)生成hex文件,点击魔术棒,在output中勾选Create HRX_File

(5)对代码进行编译,调试debug,点击USE,在下拉菜单里选中“Proteus VSM Monitor 一 51 ”进行设置

(6)将程序导入到单片机中运行,双击单片机,选择生成的hex文件

(7)在keil中启动调试,开始运行,观察proteus中的电路

六.结果及讨论

主要是需要掌握定时器1和定时器0的功能,EA、ET0、ET1 、TR0 、TR1都代表什么意思,在进行主函数编码时就需要对其赋值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值