- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)