【Keil5 C51】AT89C52 中断系统与定时/计数器的介绍
生活随笔
收集整理的這篇文章主要介紹了
【Keil5 C51】AT89C52 中断系统与定时/计数器的介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
80C51中斷系統(tǒng)
結(jié)構(gòu)
80C51有5個中斷源(89C52有6個),2個優(yōu)先級,可實現(xiàn)二級中斷嵌套
TCON中斷標(biāo)志
IT0(TCON.0),外部中斷0觸發(fā)方式控制位
IE0(TCON.1),外部中斷0中斷請求標(biāo)志位
IT1(TCON.2),外部中斷1觸發(fā)方式控制位
IE1(TCON.3),外部中斷1中斷請求標(biāo)志位
TF0(TCON.5),定時/計數(shù)器T0溢出中斷請求標(biāo)志位
TF1(TCON.7),定時/計數(shù)器T1溢出中斷請求標(biāo)志位
中斷源響應(yīng)優(yōu)先級
中斷響應(yīng)條件
- 中斷源有中斷請求
- 此中斷源的中斷允許位置1
- CPU開中斷(即EA = 1)
定時/計數(shù)器的結(jié)構(gòu)
定時/計數(shù)器的實質(zhì)是加1計數(shù)器(16位),有由高8位和低8位兩個寄存器組成,TMOD是定時/計數(shù)器的工作方式及寄存器,確定工作方式和功能,
TCON是控制寄存器,控制T0,T1的啟動和停止及設(shè)置出標(biāo)志位。
TMOD
- GATE 門控位
- C/T 模式選擇位 1定時器模式,0計數(shù)器模式
- M0M1工作方式位
00 方式0 13位定時計數(shù)器
01 方式1 16位定時計數(shù)器
10 方式2 8位自動重裝定時計數(shù)器
11 方式3 T0分為兩個獨立的8位定時計數(shù)器,T1停止計數(shù)
定時/計數(shù)器初始化
- 對TMOD賦值,以確定T0和T1的工作方式。
- 計算初值,并將其寫入TH0,TL0或TH1,TL1
假設(shè)晶振12 計滿時間為 t = 65535 * 1/12(震蕩周期) * 12 = 65535 - 中斷方式,對IE賦值,開放中斷
- 使TR0或TR1置位,啟動定時/計數(shù)器
定時器實現(xiàn)延時
#include <reg52.h> #define uint unsigned int #define uchar unsigned charsbit LE_D = P2^6; //數(shù)碼管段 該LE控制數(shù)碼管顯示的數(shù)字 sbit LE_W = P2^7; //數(shù)碼管位 該LE控制數(shù)碼管顯示的位置uint num = 0; uint time = 0;//數(shù)碼管從0->9 uchar code table[] = {0xC0,0xF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x98};//數(shù)碼管的數(shù)次從0開始每隔1s加1,用定時器實現(xiàn) void main(){ //中斷函數(shù)初始化EA = 1; //開總中斷ET0 = 1; //開T0定時/計數(shù)器中斷TR0 = 1; //啟動TO TR0為T0運行控制位,置1開始工作TMOD = 0x01;//設(shè)置T0的工作方式 0000 0001TH0 = 0x3C; //65535 - 50000 = 15535 (50000為50mS)為3CAF TH0為高8位所以賦值3CTL0 = 0xAF; //TL0低8位所以賦值A(chǔ)F//數(shù)碼管顯示的位置LE_W = 1; //開位鎖存器P0 = 0x01; //第一個數(shù)碼管顯示數(shù)字LE_W = 0; //關(guān)鎖存器//數(shù)碼管顯示的初始數(shù)字LE_D = 1;P0 = table[0];LE_D = 0;while(1){if(time == 20){ //進入20次中斷后,(每次中斷為50mS) 20*50=1000ms = 1s time = 0; //time清零,重新開始定時LE_D = 1; //開鎖存器P0 = table[num];//鎖存器存入table[num]LE_D = 0; //關(guān)寄存器num++; //使數(shù)碼管顯示的數(shù)字+1} if(num == 10){ //當(dāng)數(shù)碼管顯示的數(shù)字為9時num清0 又從0開始num = 0;}} }//定時器中斷函數(shù) void exter1() interrupt 1{ //1為定時/計數(shù)器0(T0)TH0 = 0x3C; //每次進入定時器函數(shù)說明TH0,TL0已加滿后清0,所以重新賦值TL0 = 0xAF; //TL0低8位time++; //沒進入一次中斷給time+1 }Proteus仿真圖
總結(jié)
以上是生活随笔為你收集整理的【Keil5 C51】AT89C52 中断系统与定时/计数器的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: w5100 资料整理
- 下一篇: 基于AT89C52单工串行通信系统设计