STC15W408AS單片機定時器/計數器的相關寄存器_世界看熱訊

2023-06-16 10:17:09 來源:小猿豬哥

一、定時器計數器簡介

STC15W408AS只有定時器0和定時器2,工作工作位定時器或者計數器模式。定時器/計數器的核心部件是一個加法計數器,其本質是對脈沖進行計數。只是計數脈沖來源不同:如果計數脈沖來自系統時鐘,則為定時方式,此時定時器/計數器每12個時鐘或者每1個時鐘得到一個計數脈沖,計數值加1;如果計數脈沖來自單片機外部引腳(T0為P3.4,T1為P3.5,T2為P3.1,T3為P0.7,T4為P0.5),則為計數方式,每來一個脈沖加1。

當定時器/計數器T0、T1及T2工作在定時模式時,特殊功能寄存器AUXR中的T0x12、T1x12和T2x12分別決定是系統時鐘/12還是系統時鐘/1(不分頻)后讓T0、T1和T2進行計數。

定時器/計數器0有4種工作模式:模式0(16位自動重裝載模式),模式1(16位不可重裝載模式),模式2(8位自動重裝模式),模式3(不可屏蔽中斷的16位自動重裝載模式)。定時器T2的工作模式固定為16位自動重裝載模式。T2可以當定時器使用,也可以當串口的波特率發生器和可編程時鐘輸出。


(資料圖片)

二、定時器/計數器的相關寄存器

2.1 定時器/計數器0/1控制寄存器TCON

TCON為定時器/計數器T0、T1的控制寄存器,同時也鎖存T0、T1溢出中斷源和外部請求中斷源等,TCON格式如下:

TCON : 定時器/計數器中斷控制寄存器 (可位尋址)

TF0:T0溢出中斷標志。T0被允許計數以后,從初值開始加1計數,當產生溢出時,由硬件置“1”TF0,向CPU請求中斷,一直保持CPU響應該中斷時,才由硬件清0(也可由查詢軟件清0)。

TR0: 定時器T0的運行控制位。該位由軟件置位和清零。當GATE(TMOD.3)=0,TR0=1時 就允許T0開始計數,TR0=0時禁止T0計數。當GATE(TMOD.3)=1,TR0=1且INT0輸 入高電平時,才允許T0計數,TR0=0時禁止T0計數。

2.2 定時器/計數器工作模式寄存器TMOD

定時和計數功能由特殊功能寄存器TMOD的控制位C/T進行選擇,TMOD寄存器的各位信息如下表所列。可以看出,2個定時/計數器有4種操作模式,通過TMOD的M1和M0選擇。2個定時/計數器的模式0、1和2都相同,模式3不同,各模式下的功能如下所述。

寄存器TMOD各位的功能描述

2.3 輔助寄存器AUXR

STC15系列單片機1T 的8051單片機,為兼容傳統8051,定時器0 , 復位后是傳統8051的速度,即12分頻,這是為了兼容傳統8051。但也可不進行12分頻,通過設置新增加的特殊功能寄存器AUXR,將T0,T1,T2 設置普通111條機器指令執行速度是固定的,快4到24倍,無法改變。

AUXR格式如下:

AUXR : 輔助寄存器

2.4 定時器T0和T1的中斷控制寄存器:IE和IP

三、測試程序

3.1 定時器0模式0(16位自動重裝載模式)

#include "stc15.h"#define uint unsigned intuint t = 0;void main(){  P1M0 = 0x02;  P1M1 = 0x00;// 定時器 0   AUXR |= 0x80;  // 定時器0 1T模式  TMOD = 0x00;   // 定時器模式0 16位自動重載模式  TL0 = 0xAE;  TH0 = 0xFB;    // 計數值 100us@11.0592MHz  TR0 = 1;       // 定時器開始計時  ET0 = 1;       // 使能定時器1中斷  EA  = 1;       // 打開總中斷  while (1);}void tm1_isr() interrupt 1{  t = t + 1;  if(t >= 100){ // 100 * 100us = 10ms P1.1端口取反輸出    t = 0;    P11 = !P11;  }}

通過示波器可以測得波形搞好是50Hz,每個周期20ms。

這里有個問題就是定時器的初始值的計算。

定時器定時時長(100us) = SYSclk/(65536 - [TH0,TL0]), SYSclk = 11.0592MHz。

這里計算得到[TH0,TL0] = 64430,轉換為十六進制就是FBAE,則TH0 = FB,TL0 = AE。

3.2 定時器2作為計數器

#include "stc15.h"void main(){  P1M0 = 0x02;  P1M1 = 0x00;    P11 = 0;       // 初始設置為0  AUXR |= 0x1C;  //  定時器2 工作為計數器模式 P3.1為計數引腳  允許計數器運行  T2L = 0x00;  T2H = 0x00;  while(1)  {    if(T2L==16) // 計數器到了16 就把P1.1口輸出取反            {       T2L=0X00;      P11 = !P11;    }  }}

定時器0個定時器2都可以工作位定時器/計數器模式,這里為了區分就把定時器2作為計數器使用了。

標簽:

上一篇:【環球播資訊】功率放大電路的分類和要求
下一篇:最后一頁