1 stc89c52 定时计数器
定时器1.2相关寄存器
TF1(TF0):定时器/计数器T1(T0)溢出标志。响应中断后,由硬件清零(也可由程序查询清零)。
TR1(TR0): 定时器T1(T0)的运行控制位。由软件置位和清零。置位后计数条件:GATE=0或者GATE=1,INT1脚为高电平。
IT1(IT0): 外部中断1触发方式控制位。IT1=0,外部中断INT1引脚为低电平触发。IT1=1,下降沿触发。
IE1(IE0): 外部中断1请求源标志。当引脚INT1低电平或者下降沿,置位IE1. 响应中断后,由硬件清零。
GATE:为0不影响。置1时,只有INT引脚为高时,TR才能有效。(可以测量INT脚高电平时间)
C/T: 清零为定时器(内部时钟输入),置1为计数器(从T引脚输入)。
M1、M0: 模式选择。00(13位)、01(16位)、10(8位自动重装载)、11(定时器0作为双8位)
#include <REGX52.H>
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //晶振频率
#define TIMS (65536-FOSC/12*0.001) // 16位定时器,12T模式,1毫秒(0.001秒)中断一次
WORD count; //计数变量,对1ms计数1000次,即1s执行一次代码
void tm0_isr() interrupt 1
{
TL0=TIMS; //16位赋值给8位,自动取低8位
TH0=TIMS>>8;
if(count--==0)
{
count=1000;
//执行代码
}
}
void main()
{
TMOD &= 0xF0; //setp1:设置定时器模式1,16位模式
TMOD |= 0x01; //
TF0 = 0; //清除TF0标志
TL0=TIMS; //setp2:设置定时器初始值
TH0=TIMS>>8;
ET0=1; //setp3:打开中断
EA=1;
count=0;
TR0=1; //setp4:最后才启动定时器,以免启动早,进入中断
while(1);
}
定时器2相关寄存器表:
TF2:定时器2溢出标志,必须由软件清除。定时器2用作串口时(RCLK或TCLK=1),TF2将不会置位。
TR2: 定时器2启动/停止控制位,置1时启动定时器。
C/T2: 0=内部定时器(12T或者6T),1=外部事件计数器(T2引脚下降沿触发)
EXEN2:定时器2外部使能标志。置位时且定时器2未作为串行口时钟时,允许T2EX的负跳变产生捕获或重装。
EXF2:定时器2外部标志。当EXEN2=1且T2EX的负跳变产生捕获或者重装时,EXF2置位。必须软件清零。递增递减模式(DCEN=1)中,EXF2不会引起中断。
RCLK:接收时钟标志。置位后,定时器2作为串行口模式1和3的接收时钟。RCLK=0,串行口用定时器1。
TCLK:发送时钟标志。置位后,定时器2作为串行口模式1和3的发送时钟。TCLK=0,串行口用定时器1。
CP/RL2: 捕获/重装标志。置位且EXEN2=1时,T2EX的负跳变产生捕获。清零且EXEN2=0时,定时器溢出或者T2EX的负跳变都可使定时器自动重装。定时器2用作串行口时,此位无效,溢出自动重装。
T2OE:定时器2输出使能位
DECN:向下计数使能位。为0时,默认向上计数。为1时,T2EX引脚确定递增或者递减计数。
定时器2的捕获模式:
定时器2作为16位定时器或者计数器,溢出置位TF2。该模式中,无重新装载值。
当EXEN2=1时,T2EX的负跳变,将TL2、TH2的值捕获到RCAP2L、RCAP2H中,并且置位EXF2。
TF2、EXF2中断地址相同,中断程序中查询。
定时器2的自动重装模式(递增、递减计数器)
DCEN=0,自动重装模式:16位向上计数,溢出或者负跳变(EXEN2使能)时16位重新装载。
DCEN=1,递增递减模式:T2EX=1时,递增计数,溢出置位TF2,且把RCAP2值重新装载。
T2EX=0时,递减计数,当计数到等于RCAP时,中断,重装值为0XFFFF。
2 中断系统
中断允许位
EA: 总中断允许控制位。
ET2、ET1、ET0: 定时/计数器T2、T1、T0中断允许位。
ES: 串行口1中断允许位。
EX0、EX1、EX2、EX3 : 外部中断0、1、2、3中断允许位。
中断请求标志位
TF0、TF1、TF2、EXF2 :定时/计数器T0、T1、T2溢出标志位,定时器2外部标志位。
IE0、IE1、IE2、IE3:外部中断中断请求标志位。
RI、TI 串行口中断标志位。
外部中断源类型选择位
IT0、IT1、IT2、IT3 :为0,引脚低电平触发外部中断,为1,下降沿触发。
中断优先级(只设置IP,2级)
PX3H,PX3、PX2H,PX2、PX1H,PX1、PX0H,PX0: 外部中断。00-01-10-11对应优先级0-1-2-3
PT2H,PT2、PT1H,PT1、PT0H,PT0 :定时器。
PSH,PS : 串口1.
3 串行口通信
SM0 SM1(SMOD0=0时): 串行口工作方式,0 0 方式0,移位寄存器。0 1 方式1,8位UART,波特率可变。1 0 方式2,9位UART。1 1 方式3,9位,波特率可变. (SMOD0=1时,SM0用于帧错误检测,无效停止位时置位)
SM2:多机通信允许控制位。方式2、3时,如果SM2=1,REN=1,只有接收到RB8为1(地址帧)时,RI才为一。
REN: 允许、禁止串行接收控制位。为1,允许接收。为0,禁止接收。
TB8、RB8:方式2、3中是发送或接收到的第9位。
TI、RI:发送(接收)中断请求标志位。必须用软件复位。中断入口是 一个,中断处理程序中判断。
SMOD:置位时,方式1、2、3波特率加倍。
SMOD0:帧错误检测有效控制位。置位时,SM0用于帧错误检测,无效停止位时置位。
SADEN SADDR: 从机地址掩膜寄存器,从机地址寄存器。
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/275335.html