日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯基础模块06_1:定时器计数器

發(fā)布時(shí)間:2023/12/2 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯基础模块06_1:定时器计数器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、模塊題目

二、原理簡(jiǎn)述

(轉(zhuǎn)載,刪改)
1、定時(shí)器、計(jì)數(shù)器定義
在沒有鐘表的時(shí)候,定時(shí)的方式通過有一注香的時(shí)間,或者一桶水的時(shí)間。前者燒香不斷減少是減法,后者滴水不斷增加是加法。
定時(shí)/計(jì)數(shù)器,是一種能夠?qū)?nèi)部時(shí)鐘信號(hào)或外部輸入信號(hào)進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到設(shè)定要求時(shí),向CPU提出中斷處理請(qǐng)求,從而實(shí)現(xiàn)定時(shí)或者計(jì)數(shù)功能的外設(shè)。定時(shí)/計(jì)數(shù)器的最基本工作原理是進(jìn)行計(jì)數(shù)。作為定時(shí)器時(shí),計(jì)數(shù)信號(hào)的來源選擇周期性的內(nèi)部時(shí)鐘脈沖;用作計(jì)數(shù)器時(shí),計(jì)數(shù)信號(hào)的來源選擇非周期性的外部輸入信號(hào)。
不管是定時(shí)器還是計(jì)數(shù)器,本質(zhì)上都是計(jì)數(shù)器。

2、51單片機(jī)的定時(shí)/計(jì)數(shù)器
51單片機(jī)有兩個(gè)定時(shí)/計(jì)數(shù)器T0和T1,為16位加法計(jì)數(shù)器,由低8位TLx和高8位THx兩個(gè)寄存器組成,最大計(jì)數(shù)值為65535個(gè)計(jì)數(shù)脈沖。
該加1計(jì)數(shù)器的計(jì)數(shù)脈沖來源有2個(gè):
<1> 系統(tǒng)時(shí)鐘振蕩器輸出的12分頻。
<2> T0或T1引腳輸入的外部脈沖信號(hào)。
每接收到一個(gè)計(jì)數(shù)脈沖,計(jì)數(shù)器就會(huì)加1,當(dāng)計(jì)數(shù)值累計(jì)至全為1時(shí)(8位255,13位8191,16位65535),再輸入一個(gè)計(jì)數(shù)脈沖,計(jì)數(shù)器便會(huì)溢出回零,并且計(jì)數(shù)器的溢出是TCON寄存器的TF0或TF1位置1,同時(shí)向內(nèi)核提出中斷請(qǐng)求。如果定時(shí)/計(jì)數(shù)器工作于定時(shí)模式,則表示間隔定時(shí)時(shí)間到,如果工作與計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿。
假設(shè)單片機(jī)的外部晶振為12MHz,那么,經(jīng)過12分頻后輸入計(jì)數(shù)器的計(jì)數(shù)脈沖為1MHz,即每個(gè)脈沖的周期為1us。因此定時(shí)器T0的16位工作模式最大的定時(shí)時(shí)間為65535us,65.5ms。如果要定時(shí)10ms的話,計(jì)數(shù)器就不能夠從0開始計(jì)數(shù)了,必須給它一個(gè)計(jì)數(shù)初值。怎么計(jì)算這個(gè)初值呢?
要定時(shí)10ms,則相當(dāng)于計(jì)數(shù)10000個(gè)脈沖后計(jì)數(shù)器的值就到達(dá)65535了,那么開始計(jì)數(shù)的這個(gè)地方就是計(jì)數(shù)初值。
65535 - 10000 = 55535 = 0xd8ef
把這個(gè)計(jì)算得到的初值寫入TH0和TL0寄存器即可:
TH0 = 0xd8;或者 TH0 = (65535 - 10000) / 256;
TL0 = 0xef; 或者 TL0 = (65535 - 10000) % 256;

3、定時(shí)/計(jì)數(shù)器相關(guān)的寄存器
與定時(shí)/計(jì)數(shù)器相關(guān)的寄存器除了計(jì)數(shù)初值寄存器THx和TLx之外,就是TMOD寄存器和TCON寄存器,務(wù)必掌握。
<1> TMOD模式控制寄存器,不能進(jìn)行位尋址,只能字節(jié)操作。

<2> TCON中斷標(biāo)志寄存器

4、定時(shí)/計(jì)數(shù)器的編程思路
在定時(shí)/計(jì)數(shù)器的程序設(shè)計(jì)中,通常有兩個(gè)函數(shù):初始化函數(shù)和中斷服務(wù)函數(shù)。
在初始化函數(shù)中,一般需要進(jìn)行以下幾個(gè)配置:
<1> 配置工作模式,即對(duì)TMOD寄存器編程。
<2> 計(jì)算技術(shù)初值,即對(duì)THx和TLx寄存器進(jìn)行賦值。
<3> 使能定時(shí)/計(jì)數(shù)器中斷,即ET0或ET1置1。
<4> 打開總中斷,即EA =1。
<5> 啟動(dòng)定時(shí)器,即TR0或TR1置1。
在中斷服務(wù)函數(shù)中,一般需要進(jìn)行以下的編程:
<1> 如果不是自動(dòng)重裝模式,需要對(duì)THx和TLx重新賦值。
<2> 進(jìn)行間隔定時(shí)到達(dá)的邏輯處理(越少越好)。
其程序框架和代碼編寫基本上差不多:

三、源碼

//頭函數(shù) #include "reg52.h" //位定義 sbit L1 = P0^0; sbit L8 = P0^7; //573初始選擇 void SelectHC573() {P2 = (P2 & 0x1f) | 0x80; }//================================= //初始化定時(shí)器0 void InitTimer0() {TMOD = 0x01; //TMOD模式設(shè)置TH0 = (65535 - 50000) / 256;TL0 = (65535 - 50000) % 256;ET0 = 1; //定時(shí)中斷EA = 1; //中斷總開關(guān)TR0 = 1; //打開定時(shí)計(jì)數(shù)器,讓它工作 } //定時(shí)器0中斷服務(wù)函數(shù) unsigned char count = 0; void ServiceTimer0() interrupt 1 {TH0 = (65535 - 50000) / 256;TL0 = (65535 - 50000) % 256;count++;if(count % 10 == 0){L1 = ~L1;}if(count == 100){L8 = ~L8;count = 0;} } //================================ void main() {SelectHC573();InitTimer0();while(1){ } }

四、開發(fā)板燒錄結(jié)果

如題。

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯基础模块06_1:定时器计数器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。