网站大量收购闲置独家精品文档,联系QQ:2885784924

采用单片机内部定时器0计时,定时器1对外部脉冲计数.doc

采用单片机内部定时器0计时,定时器1对外部脉冲计数.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
采用单片机内部定时器0计时,定时器1对外部脉冲计数

定时器/计数器中断实验 一、实验目的 1. 学习单片机内部定时计数器的使用和编程方法。 2. 进一步掌握中断处理程序的编程方法。 二、实验内容 1. 用cpu内部定时器T0中断方式计时,产生周期为2s,占空比为80%的脉冲波形,显示在P1.0口。 2. 用cpu内部计数器T1,按计数模式工作,对P1.0口输出的脉冲进行计数,并显示在P2口。 三、实验说明 编写程序需要注意的问题是: 1.系统晶振为6MHz,定时器初始化设置及中断初始化设置。 2、定时时间较长,需采用何种方式处理。 2.注意显示计数溢出时,该如何处理。 四、硬件设计 利用以下元件:AT89C52、RESPACK-8(200欧)、共极数码管7SEG-COM- 仿真图: 源程序: #includereg52.h #define uchar unsigned char #define uint unsigned int uchar total = 40; //2000ms = 50ms*40 uchar part = 32; //高电平 占空比80% uchar time; //定时器0计数 uchar count; //定时器1计数 sbit P1_0 = P1^0; //脉冲端口 uchar code leddata[]={ 0x3F, //0 0x06, //1 0x5B, //2 0x4F, //3 0x66, //4 0x6D, //5 0x7D, //6 0x07, //7 0x7F, //8 0x6F, //9 }; //共阴极数码管 void delay(uint z) { uint x,y; for(x=z;x0;x--) for(y=114;y0;y--); //延迟1ms } void main() { P0 = leddata[0]; //P0初始化 TMOD = 0x61; //定时器0计时 模式1 //定时器1计数 模式2 TH0 = (65536-25000)/256; TL0 = (65536-25000)%256; //定时器0定时50ms TH1 = 256 - 1; TL1 = 256 - 1; //定时器1对外部脉冲计数 IP = 0x08; //优先级 EA = 1; //开总中断 ET0 = 1; //开定时器0中断 ET1 = 1; //开定时器1中断 TR1 = 1; TR0 = 1; while(1); } void in_in0() interrupt 1 //定时器0中断程序 { TH0 = (65536-25000)/256; //重装初值 TL0 = (65536-25000)%256; time++; if(time == part) P1_0 = 0; //低电平 else if(time == total) { time = 0; P1_0 = 1; //高电平 } } void in_it1() interrupt 3 //定时器1中断程序 { count++; P0 = leddata[count]; //计数显示 delay(5); if(count 9) { count = 0; P0 = leddata[0]; } }

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档