计数器定时器的应用
来源:互联网 发布:java微信商城源码下载 编辑:程序博客网 时间:2024/04/30 21:39
任务一:
1、五个中断要求:2个定时器中断、2个外部中断、1个串行端口中断
2、中断控制寄存器
(1)IE(中断使能寄存器)
EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
EX0:使能外部/INT0的中断;
ET0:使能TIMER0的中断;
EX1: 使能外部/INT1的中断;
ET1: 使能TIMER1的中断;
ES:使能串行口的中断。
EA:如果EA=0时,屏蔽所有中断;如果EA=1,则各中断由各中断为加以设定;
(2)IP(中断优先权控制寄存器)
- | - | - | PS | PT1 | PX1 | PT0 | PX0 |
PX0:定义外部/INT0的优先权;
PT0:定义外部TIMER0的优先权;
PX1:定义外部/INT1的优先权;
PT1:定义外部TIMER1的优先权;
PS:定义串行端口的优先权;
3、定时器0和定时器1和外部中断
定时器或计数器的功能是由特殊功能寄存器内TMOD的C/T位所决定的。这两个定时器有4种工作方式,它是由TMOD内的两个位M1和M0加以选择。
(1)TMOD(定时器模式控制寄存器)说明如下:
TIMER1 | TIMER0 | ||||||
GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
定时器模式控制器各位名称
M
M1 | M0 | 工作方式 | 功 能 |
0 | 0 | MODE0 | 13位定时器/计数器 |
0 | 1 | MODE1 | 16位定时器/计数器 |
1 | 0 | MODE2 | 8位定时器/计数 自动载入 |
1 | 1 | MODE3 | (TIMER0)TL0为8位定时器/计数器,由T0控制;TH0为另一个8位定时器,由T1控制 |
1 | 1 | MODE3 | (TIMER1) 定时器/计数器1停止定时计数 |
GATE:当TRX=1且GATE=1时,定时器只在/INTX引脚为高电平时才会计时;当GATE=0时,则定时器只在TRX=1时会计时;
C/T:C/T=0时为定时器,C/T=1时为计数器。
(2)TCON(定时器控制寄存器)
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TCON定时器控制寄存器各位名称
IT0:/INT0的中断电位控制,IT0=1时为下降沿触发,IT0=0时为低电平触发;
IE0:/INT0的中断标志位,当中断发生时,硬件会设定此位;当中断被处理时,硬件会清除此位。
IT1:/INT0的中断电位控制,IT1=1时为下降沿触发,IT1=0时为低电平触发;
IE1:/INT0的中断标志位,当中断发生时,硬件会设定此位;当中断被处理时,硬件会清除此位。
TR0:TIMER0的启动位,TR0=1时为启动,0时为停止;
TF0:TIMER0的溢出标志位,当TIMER0溢出时,会设定为1;当执行中断子程序时会清除为0。
TR1:TIMER1的启动位,TR1=1时为启动,0时为停止;
TF1:TIMER1的溢出标志位,当TIMER1溢出时,会设定为1;当执行中断子程序时会清除为0。
任务二:
1、打开WAVE软件,新建一个文件,输入以下程序:
#include<reg52.h>
sbit a0=P3^5;
sbit a1=P3^4;
char date[3];
int C100us;
int m=0,n=0,o=0;
void T0Int(void) interrupt 1 using 0 //T0中断服务函数
{
C100us--;
if(C100us==0) //100us计数器为0,重置计数器
{C100us=20000;
m++;
date[0]=date[0]+1;
if(m==10)
{n++;
m=0;
date[0]=0x00;
date[1]=date[1]+1;
}
if(n==6)
{o++;
n=0;
date[1]=0x10;
date[2]=date[2]+1;
}
if(n==10){n=0; date[1]=0x20;}
}
}
void main(void) //主函数
{unsigned int i,j=0;
TMOD=0X02; //设置T0工作方式与初值
TH0=0xd2;
TL0=0x00;
IE=0X82; //开中断
date[0]=0x00;
date[1]=0x10;
date[2]=0x20;
C100us=20000;
while(1)
{TR0=0;
P0=date[0];
for(i=0;i<100;i++);
P0=date[1];
for(i=0;i<100;i++);
P0=date[2];
for(i=0;i<100;i++);
if(a0==0)
{j=1;
TR0=1; //启动定时器0
while(j)
{P0=date[0];
for(i=0;i<100;i++);
P0=date[1];
for(i=0;i<100;i++);
P0=date[2];
for(i=0;i<100;i++);
if(a1==0){j=0;TR0=0;}
}
}
if(a1==0)
{if(a0==0)
{
date[0]=0x00;
date[1]=0x10;
date[2]=0x20;
}
}
}
}
- 计数器定时器的应用
- 定时器计数器的应用提高
- 定时器/计数器应用
- 定时器/计数器应用提高 ----1
- 51单片机的定时器/计数器
- 单片机 定时器计数器的相关
- 单片机的定时器与计数器
- 定时器/计数器
- 定时器/计数器
- ZOJ1095计数器的应用
- redis的计数器应用
- 定时器/计数器的定时或计数范围
- 51单片机的定时器/计数器概念
- MCS-51单片机的定时器/计数器概念
- 定时器/计数器的提高实验报告
- (单片机原理与应用)定时器/计数器设计实验
- 作业2:计数器的应用
- 计数器与定时器
- 数码管显示与扫描原理
- Queueing Networks and Markov Chains : Modeling and Performance Evaluation with Computer Science Appl
- 转成功经验宝典
- Beginning JSP 2: From Novice to Professional
- SQL2005 安装时 “性能监视器计数器要求(错误)” 解决方案
- 计数器定时器的应用
- 液晶显示与串行通信的应用
- 单片机音乐播放器制作
- 借助gdb实现pstack
- 资源文件读取数据库地址
- 五句话
- 一位成功女性的七大秘诀
- 封装读取数据库
- 软件红外线接收程序