c51定时中断实验报告.docx

上传人:b****7 文档编号:16556354 上传时间:2023-07-14 格式:DOCX 页数:10 大小:18.06KB
下载 相关 举报
c51定时中断实验报告.docx_第1页
第1页 / 共10页
c51定时中断实验报告.docx_第2页
第2页 / 共10页
c51定时中断实验报告.docx_第3页
第3页 / 共10页
c51定时中断实验报告.docx_第4页
第4页 / 共10页
c51定时中断实验报告.docx_第5页
第5页 / 共10页
c51定时中断实验报告.docx_第6页
第6页 / 共10页
c51定时中断实验报告.docx_第7页
第7页 / 共10页
c51定时中断实验报告.docx_第8页
第8页 / 共10页
c51定时中断实验报告.docx_第9页
第9页 / 共10页
c51定时中断实验报告.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c51定时中断实验报告.docx

《c51定时中断实验报告.docx》由会员分享,可在线阅读,更多相关《c51定时中断实验报告.docx(10页珍藏版)》请在冰点文库上搜索。

c51定时中断实验报告.docx

c51定时中断实验报告

竭诚为您提供优质文档/双击可除

c51定时中断实验报告

 

  篇一:

51单片机定时器实验报告

  51单片机定时器实验

  实验内容:

  实验内容:

  

(1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。

  

c语言程序

  #include

  #defineuintunsignedint

  #defineucahrunsignedchar

  sbitFm=p0^0;

  voidmain()

  {

  TmoD=0x01;

  Th0=(65535-50000)/256;

  Th0=(65535-50000)%256;

  eA=1;//开总中断

  eT0=1;//开定时器0中断

  TR0=1;

  while

(1);

  }

  voidT0_time()interrupt1

  {

  }

  汇编程序

  oRg0000hJAmpmAInoRg000bhTh0=(65535-50000)/256;Th0=(65535-50000)%256;Fm=~Fm;

  LJmpInT0_InToRg0100h

  mIAn:

seTbeA

  seTbeT0AJmp$

  InT0_InT:

moVR2,#0FAh

  moVR3,#0c8hDJnZR3,$DJnZR2,InT0_InTReTI

  

(2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

  #include

  #defineuintunsignedint

  #defineucahrunsignedchar

  uintnum,num1;

  sbitFm=p0^7;

  intshi,ge,a;

  voiddelay(uint);

  voidshumaguan();

  unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管0-F编码表

  voidmain()

  {

  TmoD=0x01;

  Th0=(65535-50000)/256;

  Th0=(65535-50000)%256;

  eA=1;//开总中断

  eT0=1;//开定时器0中断

  TR0=1;

  while

(1)

  }

  voidT0_time()interrupt1

  {

  }

  voidshumaguan()

  {

  p3=0x01;

  p2=table[shi];

  delay(5);

  p3=0x02;

  p2=table[ge];

  delay(5);Th0=(65535-50000)/256;Th0=(65535-50000)%256;num1++;if(num1==10){}num1=0;num++;shi=num/10;ge=num%10;if(num==100){num=0;}{}shumaguan();

  voidzuoyi()

  {

  }

  voiddelay(uintx)

  {

  }

  (3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

  #include

  #defineuintunsignedint

  #defineucahrunsignedchar

  uintnum,num1;

  intshi,ge,a;

  voiddelay(uint);

  voidshumaguan();

  voidzuoyi();

  unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管0-F编码表

  voidmain()inti,j;for(i=0;i  TmoD=0x02;

  Th0=255-200;

  Th0=255-200;

  eA=1;//开总中断

  eT0=1;//开定时器0中断TR0=1;

  p3=0x01;

  while

(1)

  }

  voidT0_time()interrupt1{

  }

  voidshumaguan(){num1++;if(num1==2500){num1=0;num++;shi=num/10;ge=num%10;if(num==100){num=0;}}{shumaguan();}

  篇二:

c51单片机定时器及数码管控制实验报告

  昆明理工大学信息工程与自动化学院学生实验报告

  (201—201学年第1学期)

  课程名称:

单片机技术

  开课实验室:

年月日

  一、实验目的

  1.掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。

  2.掌握LeD数码管动态显示程序设计方法。

  二、实验原理

  1.89c51单片机有五个中断源(89c52有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0溢出中断请求、定时器/计数器0溢出中断请求及串行口中断请求。

每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器Tcon和scon中。

当中断源请求中断时,相应标志分别由Tcon和scon的相应位来锁寄。

五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。

在同一优先级别中,靠内部的查询逻辑来确定响应顺序。

不同的中断源有不同的中断矢量地址。

  中断的控制用四个特殊功能寄存器Ie、Ip、Tcon(用六位)和scon(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。

中断程序由中断控制程序(主程序)和中断服务程序两部分组成:

  1)中断控制程序用于实现对中断的控制;

  2)中断服务程序用于完成中断源所要求的中断处理的各种操作。

  c51的中断函数必须通过interruptm进行修饰。

在c51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按mcs-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。

  在该修饰符中,m的取值为0~31,对应的中断情况如下:

  0——外部中断0

  1——定时/计数器T0

  2——外部中断1

  3——定时/计数器T1

  4——串行口中断

  5——定时/计数器T2

  其它值预留。

  89c51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。

T1还可以作为其串行口的波特率发生器。

  2.定时器T0由特殊功能寄存器TL0和Th0构成,定时器T1由Th1和TL1构成,特殊功能寄存器TmoD控制定时器的工作方式,Tcon控制其运行。

定时器的中断由中断允许寄存器Ie,中断优先权寄存器Ip中的相应位进行控制。

定时器T0的中断入口地址为000bh,T1的中断入口地址为001bh。

  定时器的编程包括:

  1)置工作方式。

  2)置计数初值。

  3)中断设置。

  4)启动定时器。

  定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

  3.单片机的拉电流比较小(100~200uA),灌电流比较大(最大是25mA,一般不能超过10mA),不能直接驱动数码管,需要扩流电路。

可以用三级管来驱动,但是51单片机只有32个I/o口,可能需要外接多种器件,I/o口是不够用的。

故可选用74hc573锁存器来解决这个问题,开发板上数码管的硬件设计电路图,如图1所示。

  Tx-1c实验开发板用两个74hc573锁存器(输出电流较大,接口简单),通过p0口控制六个数码管的段选及位选,其中p2.6控制锁存器u1(DuLA),p2.7控制锁存器u2(weLA)。

单片机控制锁存器的锁存端,进而控制锁存器的输出,这种分时控制的方法可方便地控制任意数码管显示任意数字。

  图1LeD数码管电路原理图

  三、实验内容

  利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500ms速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“heLLo”。

到此保持住。

  计算初值公式

  定时模式1th0=(216-定时时间)/256tl0=(216-定时时间)%256

  四、实验步骤

  1、按实验要求在Keilc中创建项目,编辑、编译程序。

  2、将编译生成的目标码文件(后缀为.hex)下载到实验板电路中。

  3、在实验板中运行程序,观察实验运行结果并记录。

  五、实验结果

  开始时数码管的数字是765432,随后是765429,流水灯显示的是第一个灯,实验结果如下图所示:

  当数码管显示765406时,流水灯显示是第六个灯,实现现象如下图所示:

  当数码管显示765398时,流水灯显示的是第七个灯,由于LeD灯变化快,难以捕捉到此时刻,以下图片是随后LeD闪烁,数码管保持765398的现象:

  篇三:

51定时器实验报告

  一、实验名称:

定时计数器的应用

  二、实验目的:

  熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。

了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。

掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在c51中的设置与程序的书写格式以及使用方法。

  三、实验原理:

  8051型有两个十六位定时/计数器T0、T1,有四种工作方式。

mcs-51系列单片机的定时/计数器有几个相关的特殊功能寄存器:

  方式控制寄存器TmoD;

  加法计数寄存器Th0、Th1(高八位);TL0、TL1(低八位);

  定时/计数到标志TF0、TF1(中断控制寄存器Tcon)

  定时/计数器启停控制位TR0、TR1(Tcon)

  定时/计数器中断允许位eT0、eT1(中断允许寄存Ie)

  定时/计数器中断优先级控制位pT0、pT1(中断优Ip)

  四、实验仪器:

  硬件:

pc机;

  软件:

KeILc51单片机仿真调试软件,proteus系列仿真调试软件;

  五、实验步骤

  第一步:

.计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213=8192、216=65536和28=256,定时间隔为T,计数初值为a,则有

  T=12×(T_all–a)/fosc

  a=T_all–T×fosc/12

  a=–T×fosc/12(注意单位)

  Thx=a/256;TLx=a%256;

  第二步:

确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断:

  eT0=1;eA=1;

  第三步:

编写中断服务函数:

  voidT0_srv(void)interrupt1using1

  {

  TL0=a%256;

  Th0=a/256;

  中断服务程序段}

  第四步:

启动定时器:

TR0(TR1)=1。

  六、实验记录:

  利用protues仿真软件设计一个可以显示秒表时间的显示电路。

利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。

刚开始led数码管显示0,每过一秒数码管显示值加一,当显示到59时返回0,依此反复。

  程序:

  #include

  unsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

  unsignedchara;

  unsignedchari=0;

  第1页共2页

  voiddelay(charz){charx,y;

  for(x=z;x>0;x--)

  for(y=123;y>0;y--);}

  main()

  {

  TmoD=0x10;

  Th1=-50000/256;TL1=-50000%256;eA=1;eT1=1;TR1=1;while

(1)

  {p2=0xfe;

  p0=tab[i/10];delay(5);

  p2=0xfd;

  p0=tab[i%10];delay(5);

  }

  }

  voidtime()interrupt3{Th1=-50000/256;TL1=-50000%256;a++;

  if(a==10)

  {a=0;

  i++;

  if(i==60)

  {i=0;

  }

  }}

  第2页共2页

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2