一、定时器(内设)
1.作用:
1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
2)替代长时间的delay,提升CPU的运行效率和处理速度
2.定时器个数:
T0,T1,T2
T0,T1一般都可以兼容,T2是STC89C52新增的
3.定时器的功能实现:
4.单片机的工作模式:
1)T1和T0均有四种工作模式:
模式0:13位定时器/计数器
模式1:16位定时器/计数器(常用)
模式2:8位自动重装模式
模式3:两个8位计数器
2)模式1:
(从左到右分别是:时钟、计数单元、中断系统)
3)时钟:
SYSclk:系统时钟,即晶振周期(1M是一百万,12MHz就是一秒一千两百万,换算成 一次就是一微秒一次)
4)中断系统:
a.定义
b.流程
c.中断资源
中断源个数:8个(外部中断0、定时器0中断、外部中断1、定时器1中断、定时器2中 断、串口中断、外部中断2、外部中断3)
中断优先级个数:4个
中断号:
d.结构
二、代码示例
1.开头设置函数:
TMOD:定时器/计数器模式控制
TF0=0,初始中断,避免中断系统开始
TR0=1:电机开始工作
void Timer0_Init()
{
TMOD=0x01;
TF=0;
TR0=1;
TH0=64535/256;
TL0=64535%256;
ET0=1;
EA=1;
PT0=0;
}
2.中断程序:
中断函数要记得复制初始值!!!
unsigned int T0Count;
void Timer0_Routine() interrupt 1
{
TH0=64535/256;
TL0=64535%256;
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
P2_0=~P2_0;
}
}
3.使用与/或进行清零和置一
TMOD&=0xF0;//把TMOD的低四位清零,高四位保持不变
TMOD|=0x01;//把TMOD的最低位置一,高四位保持不变
4.使用stc自动生成定时函数:
记得改【系统频率】、【定时器模式】、【定时器时钟】
复制完记得把第一句删掉!!
5.步骤:
1)复制代码(复制的时候记得删掉去第一句)
2)增加中断代码
ET0=1;
EA=1;
PT0=0;
3)改函数名(保持统一)
4)加中断函数(中断函数要复制初值!!)
6.static:
运用在子函数中,在离开子函数时,变量值不清零,而是保持不变
7.独立按键模块
unsigned char Key()
{
unsigned char KeyNumber=0;
if(P3_1==0){Delay(20);while(P3_1==1);Delay(20);KeyNumber=1;};
if(P3_0==0){Delay(20);while(P3_1==1);Delay(20);KeyNumber=2;};
if(P3_2==0){Delay(20);while(P3_1==1);Delay(20);KeyNumber=3;};
if(P3_3==0){Delay(20);while(P3_1==1);Delay(20);KeyNumber=4;};
}
8.循环移动函数:
#include<INTRINS.H>
左移:extern unsigned char _cror_(,)
右移:extern unsigned char _iror_(,)
例子:P2=—_cror_(P2,1)
9.本期自己动手:
做一个时钟(显示小时、分钟、秒)