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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Keil5 C51】AT89C52 中断系统与定时/计数器的介绍

發(fā)布時間:2023/12/29 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)容,希望文章能夠幫你解決所遇到的問題。

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