單片機(jī)第六章定時(shí)器計(jì)數(shù)器ppt課件.ppt_第1頁
單片機(jī)第六章定時(shí)器計(jì)數(shù)器ppt課件.ppt_第2頁
單片機(jī)第六章定時(shí)器計(jì)數(shù)器ppt課件.ppt_第3頁
單片機(jī)第六章定時(shí)器計(jì)數(shù)器ppt課件.ppt_第4頁
單片機(jī)第六章定時(shí)器計(jì)數(shù)器ppt課件.ppt_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章AT89C51單片機(jī)的定時(shí)器 計(jì)數(shù)器 1 1 內(nèi)容概要工業(yè)檢測與控制 許多場合都要用到計(jì)數(shù)或定時(shí)功能 例如 對外部脈沖進(jìn)行計(jì)數(shù) 產(chǎn)生精確的定時(shí)時(shí)間等 AT89C51片內(nèi)有兩個(gè)可編程的定時(shí)器 計(jì)數(shù)器T1 T0 可滿足需要 本章介紹定時(shí)器 計(jì)數(shù)器的結(jié)構(gòu)與功能 2種工作模式和4種工作方式 以及相關(guān)的2個(gè)特殊功能寄存器TMOD和TCON各位的定義及其編程 最后介紹定時(shí)器 計(jì)數(shù)器的編程及應(yīng)用實(shí)例 2 定時(shí) 實(shí)現(xiàn)方式 1 軟件定時(shí) 2 不可編程硬件定時(shí) 3 可編程定時(shí) 3 定時(shí) 計(jì)數(shù)器的定時(shí)和計(jì)數(shù)功能 在TMOD中 各有一個(gè)控制位 C T 分別用于控制定時(shí) 計(jì)數(shù)器T0和T1是工作在定時(shí)器方式還是計(jì)數(shù)器方式 1 定時(shí)功能 計(jì)數(shù)輸入信號是內(nèi)部時(shí)鐘脈沖 每個(gè)機(jī)器周期使寄存器的值加1 所以 計(jì)數(shù)頻率是振蕩頻率的1 12 2 計(jì)數(shù)功能 計(jì)數(shù)脈沖來自相應(yīng)的外部輸入引腳 T0為P3 4 T1為P3 5 定時(shí) 計(jì)數(shù)器的核心部件是二進(jìn)制加1計(jì)數(shù)器 TH0 TL0或TH1 TL1 4 2個(gè)16位定時(shí)器 計(jì)數(shù)器 52系列有3個(gè)16位Timer 定時(shí)器 對片內(nèi)機(jī)器時(shí)鐘 周期方波 進(jìn)行計(jì)數(shù)計(jì)數(shù)器 對Tx引腳輸入的負(fù)脈沖進(jìn)行計(jì)數(shù) 與Timer工作有關(guān)的特殊功能寄存器 TCON和TMOD 5 6 1定時(shí)器 計(jì)數(shù)器的結(jié)構(gòu)定時(shí)器 計(jì)數(shù)器結(jié)構(gòu)如圖6 1所示 定時(shí)器 計(jì)數(shù)器T0由特殊功能寄存器TH0 TL0構(gòu)成 定時(shí)器 計(jì)數(shù)器T1由特殊功能寄存器TH1 TL1構(gòu)成 6 圖6 1AT89C51單片機(jī)的定時(shí)器 計(jì)數(shù)器結(jié)構(gòu)框圖 6 具有定時(shí)器和計(jì)數(shù)器2種工作模式 4種工作方式 方式0 方式1 方式2和方式3 屬于增計(jì)數(shù)器 TMOD用于選擇定時(shí)器 計(jì)數(shù)器T0 T1的工作模式和工作方式 TCON用于控制T0 T1的啟動和停止計(jì)數(shù) 同時(shí)包含了T0 T1的狀態(tài) T0 T1不論是工作在定時(shí)器模式還是計(jì)數(shù)器模式 都是對脈沖信號進(jìn)行計(jì)數(shù) 只是計(jì)數(shù)信號的來源不同 計(jì)數(shù)器模式是對加在T0 P3 4 和T1 P3 5 兩個(gè)引腳上的外部脈沖進(jìn)行計(jì)數(shù) 見圖6 1 定時(shí)器工作模式是對單片機(jī)的時(shí)鐘振蕩器信號經(jīng)片內(nèi) 7 7 12分頻后的內(nèi)部脈沖信號計(jì)數(shù) 由于時(shí)鐘頻率是定值 所以可根據(jù)計(jì)數(shù)值可計(jì)算出定時(shí)時(shí)間 計(jì)數(shù)器的起始計(jì)數(shù)都是從計(jì)數(shù)器初值開始的 單片機(jī)復(fù)位時(shí)計(jì)數(shù)器的初值為0 也可用指令給計(jì)數(shù)器裝入一個(gè)新的初值 AT89C51的定時(shí)器 計(jì)數(shù)器屬于增1計(jì)數(shù)器 8 Timer的2個(gè)特殊功能寄存器 TCON TMOD TF1TR1TF0TR0IE1IT1IE0IT0 定時(shí)器控制寄存器TCON 88H TFx Timer0 1計(jì)數(shù)溢出標(biāo)志位 1計(jì)數(shù)溢出 0計(jì)數(shù)未滿TFx標(biāo)志位可用于申請中斷或供CPU查詢 在進(jìn)入中斷服務(wù)程序時(shí)會自動清零 但在查詢方式時(shí)必須軟件清零 TRx Timer0 1運(yùn)行控制位 1啟動計(jì)數(shù) 0停止計(jì)數(shù) 9 TR0 TR1 Timer0 1運(yùn)行控制位 TR0 TR1 0時(shí) Timer0 1停止計(jì)數(shù)TR0 TR1 1時(shí) Timer0 1啟動計(jì)數(shù) 定時(shí)器T0 T1中斷申請過程 在已經(jīng)開放T0 T1中斷允許且已被啟動的前提下 T0 T1加滿溢出時(shí)TF0 TF1標(biāo)志位自動置 1 檢測到TCON中TF0 TF1變 1 后 將產(chǎn)生指令 LCALL000BH LCALL001BH執(zhí)行中斷服務(wù)程序 TF0 TF1標(biāo)志位會自動清 0 以備下次中斷申請 定時(shí) 計(jì)數(shù)器可按片內(nèi)機(jī)器周期定時(shí) 也可對由T0 T1引腳輸入一個(gè)負(fù)脈沖進(jìn)行加法計(jì)數(shù) TF1TR1TF0TR0IE1IT1IE0IT0 TCON 88H 10 GATEC TM1M0GATEC TM1M0 定時(shí)器方式寄存器TMOD 89H T1 T0 M1 M0 工作方式定義位 定義4種方式 C T 計(jì)數(shù)器 定時(shí)器選擇位 1外部事件計(jì)數(shù)器 對Tx引腳的負(fù)脈沖計(jì)數(shù) 0片內(nèi)時(shí)鐘定時(shí)器 對機(jī)器周期脈沖計(jì)數(shù)定時(shí) 00 13位Timer 用它無益 不要記它 01 16位Timer 經(jīng)常用到10 可自動重裝的8位Timer 經(jīng)常用到11 T0分為2個(gè)8位Timer T1此時(shí)不工作 因?yàn)闆]有帶來甚麼好處 幾乎無用 11 GATEC TM1M0GATEC TM1M0 T1 T0 GATE門控位 Timer可由軟件與硬件兩者控制 GATE 0 普通用法Timer的啟 停由軟件對TRx位寫 1 0 控制 定時(shí)器方式寄存器TMOD 續(xù) 89H GATE 1 門控用法Timer的啟 停由軟件對TRx位寫 1 0 和在INTx引腳上出現(xiàn)的信號的高 低共同控制 12 計(jì)數(shù)脈沖輸入 定時(shí)器 計(jì)數(shù)器的工作方式 定時(shí)器 計(jì)數(shù)器共有四種工作方式 1 方式0 13位方式 13位計(jì)數(shù)器 定時(shí)器 計(jì)數(shù)器 13 2 方式1 16位方式 14 3 方式2 8位自動裝入時(shí)間常數(shù)方式 15 4 方式3 2個(gè)8位方式 僅T0可以工作在方式3 此時(shí)T0分成2個(gè)獨(dú)立的計(jì)數(shù)器 TL0和TH0 前者用原來T0的控制信號 TR0 TF0 后者用原來T1的控制信號 TR1 TF1 16 6 3對外部輸入的計(jì)數(shù)信號的要求當(dāng)定時(shí)器 計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí) 計(jì)數(shù)脈沖來自外部輸入引腳T0或T1 當(dāng)輸入信號產(chǎn)生負(fù)跳變時(shí) 計(jì)數(shù)器的值增1 每個(gè)機(jī)器周期的S5P2期間 都對外部輸入引腳T0或T1進(jìn)行采樣 如在第一個(gè)機(jī)器周期中采得的值為1 而在下一個(gè)機(jī)器周期中采得的值為0 則在緊跟著的再下一個(gè)機(jī)器周期S3P1 17 期間 計(jì)數(shù)器加1 由于確認(rèn)一次負(fù)跳變要花2個(gè)機(jī)器周期 因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1 24 例如 選用6MHz頻率的晶體 允許輸入的脈沖頻率最高為250kHz 如果選用12MHz頻率的晶體 則可輸入最高頻率為500kHz的外部脈沖 對于外部輸入信號的占空比并沒有什么限制 但為了確保某一給定電平在變化之前能被采樣一次 則這一電平至少要保持一個(gè)機(jī)器周期 18 故對外部輸入信號的要求如圖6 12所示 圖中 Tcy為機(jī)器周期 19 圖6 12對外部計(jì)數(shù)輸入信號的要求 19 THx TLx賦初值 THx賦高8位 TLx賦低8位 工作方式1的編程要點(diǎn) TMOD選方式 寫 M1 M0 01b選方式1 若不用門控位 直接用軟件寫TRx控制啟 停 若使用門控位 先置位TRx 然后由INTx端的高 低電平來控制其啟 停 若要允許中斷 還須先置位ETx EA等中斷允許控制位 并編寫中斷服務(wù)程序 若不用中斷 可查詢 計(jì)數(shù)溢出標(biāo)志TFx 的方式工作 但溢出標(biāo)志TFx須軟件清0 20 THx TLx賦相同初值在TLx計(jì)數(shù)達(dá)到0FFH再加 1 時(shí) TL0將溢出 進(jìn)位位直接進(jìn)入 TFx 去申請中斷 同時(shí)打開三態(tài)門 使THx中的值自動重裝 Copy 進(jìn)TLx 工作方式2的編程 TMOD寄存器選方式 寫 M1 M0 10b選中方式2 其他用法與各種方式1完全相同 21 定時(shí)器小結(jié) 2個(gè)16位加法計(jì)數(shù)器 運(yùn)行 停止由TRx位控制 當(dāng)GATE 1時(shí) 由TRx位和Tx引腳上的信號共同控制 工作方式由TMOD決定 計(jì)數(shù) 定時(shí)由C T位決定工作方式0 13位 永遠(yuǎn)不用工作方式3 T0拆為雙8位 幾乎無用工作方式1 16位 經(jīng)常用到工作方式2 8位自動重裝 經(jīng)常用到 從初值按機(jī)器周期或外部脈沖遞加 溢出位TFx申請中斷 中斷允許由ETx位和EA位控制 22 定時(shí)器初始化程序應(yīng)完成如下工作 對TMOD賦值 以確定T0和T1的工作方式 計(jì)算初值 并將其寫入TH0 TL0或TH1 TL1 中斷方式時(shí) 則對IE賦值 開放中斷 使TR0或TR1置位 啟動定時(shí) 計(jì)數(shù)器定時(shí)或計(jì)數(shù) 23 6 4定時(shí)器 計(jì)數(shù)器的編程和應(yīng)用4種方式 方式0與方式1基本相同 只是計(jì)數(shù)位數(shù)不同 方式0初值計(jì)算復(fù)雜 一般不用方式0 而用方式1 6 4 1方式1的應(yīng)用 例6 1 假設(shè)系統(tǒng)時(shí)鐘頻率采用6MHz 在P1 0引腳上輸出一個(gè)周期為2ms的方波 如圖6 13所示 24 圖6 13P1 0引腳上輸出周期為2ms的方波 24 基本思想 方波周期T0確定 T0每隔1ms計(jì)數(shù)溢出1次 即T0每隔1ms產(chǎn)生一次中斷 CPU響應(yīng)中斷后 在中斷服務(wù)子程序中對P1 0取反 如圖6 13所示 為此要做如下幾步工作 1 計(jì)算計(jì)數(shù)初值X機(jī)器周期 2 s 2 10 6s設(shè)需要裝入T0的初值為X 則有 216 X 2 10 6 1 10 3 216 X 500 X 65036 X化為十六進(jìn)制數(shù) 即 65036 FE0CH T0的初值為TH0 FEH TL0 0CH 25 25 2 初始化程序設(shè)計(jì)采用定時(shí)器中斷方式工作 包括定時(shí)器初始化和中斷系統(tǒng)初始化 主要是對寄存器IP IE TCON TMOD的相應(yīng)位進(jìn)行正確的設(shè)置 并將計(jì)數(shù)初值送入定時(shí)器中 3 程序設(shè)計(jì)中斷服務(wù)子程序除了完成所要求的產(chǎn)生方波的工作之外 還要注意將計(jì)數(shù)初值重新裝入定時(shí)器 為下一次產(chǎn)生中斷做準(zhǔn)備 本例 主程序用一條轉(zhuǎn)至自身的短跳轉(zhuǎn)指令來代替 26 26 參考程序如下 ORG0000H 程序入口RESET AJMPMAIN 轉(zhuǎn)主程序ORG000BH T0中斷入口AJMPIT0P 轉(zhuǎn)T0中斷處理程序IT0PORG0100H 主程序入口MAIN MOVSP 60H 設(shè)堆棧指針MOVTMOD 01H 設(shè)置T0為方式1定時(shí)ACALLPT0M0 調(diào)用初始化子程序PT0M0HERE AJMPHERE 原地循環(huán) 等待中斷 27 27 PT0M0 MOVTL0 0CH T0初始化 裝初值的低8位MOVTH0 0FEH 裝初值的高8位SETBET0 允許T0中斷SETBEA 總中斷允許SETBTR0 啟動T0RETIT0P MOVTL0 0CH 中斷子程序 T0重裝初值MOVTH0 0FEHCPLP1 0 P1 0的狀態(tài)取反RETI程序說明 當(dāng)單片機(jī)復(fù)位時(shí) 從程序入口0000H跳向主程序MAIN處執(zhí)行 其中調(diào)用了T0初始化子程序PT0M0 28 28 子程序返回后 程序執(zhí)行 AJMPHERE 指令 則循環(huán)等待 當(dāng)響應(yīng)T0定時(shí)中斷時(shí) 則跳向T0中斷入口 再從T0中斷入口跳向IT0P標(biāo)號處執(zhí)行T0中斷服務(wù)子程序 當(dāng)執(zhí)行完中斷返回的指令 RETI 后 又返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行循環(huán)指令 AJMPHERE 在實(shí)際的程序中 AJMPHERE 實(shí)際上是一段主程序 當(dāng)下一次定時(shí)器T0的1ms定時(shí)中斷發(fā)生時(shí) 再跳向T0中斷入口 從而重復(fù)執(zhí)行上述過程 如CPU不做其他工作 也可用查詢方式進(jìn)行控制 程序要簡單得多 29 29 查詢方式參考程序 MOVTMOD 01H 設(shè)置T0為方式1LOOP MOVTH0 0FEH T0置初值MOVTL0 0CHSETBTR0 接通T0LOOP1 JNBTF0 LOOP1 查TF0 TF0 0 T0未溢出 TF0 1 T0溢出 CLRTR0 T0溢出 關(guān)斷T0CPLP1 0 P1 0的狀態(tài)求反SJMPLOOP查詢程序雖簡單 但CPU必須要不斷查詢TF0標(biāo)志 工作效率低 30 30 例6 2 系統(tǒng)時(shí)鐘為6MHz 編寫定時(shí)器T0產(chǎn)生1s定時(shí)的程序 基本思想 采用定時(shí)器模式 因定時(shí)時(shí)間較長 首先確定采用哪一種工作方式 時(shí)鐘為6MHz的條件下 定時(shí)器各種工作方式最長可定時(shí)時(shí)間 方式0最長可定時(shí)16 384ms 方式1最長可定時(shí)131 072ms 方式2最長可定時(shí)512 s 由上可見 可選方式1 每隔100ms中斷一次 中斷10次為1s 31 31 1 計(jì)算計(jì)數(shù)初值X因?yàn)?216 X 2 10 6 10 1 所以X 15536 3CB0H 因此TH0 3CH TL0 B0H 2 10次計(jì)數(shù)的實(shí)現(xiàn)對于中斷10次的計(jì)數(shù) 采用B寄存器作為中斷次數(shù)計(jì)數(shù)器 3 程序設(shè)計(jì)參考程序如下 ORG0000H 程序運(yùn)行入口RESET LJMPMAIN 跳向主程序入口MAINORG000BH T0的中斷入口LJMPIT0P 轉(zhuǎn)T0中斷處理子程序IT0PORG1000H 主程序入口 32 32 MAIN MOVSP 60H 設(shè)堆棧指針MOVB 0AH 設(shè)循環(huán)次數(shù)10次MOVTMOD 01H 設(shè)置T0工作在方式1定時(shí)MOVTL0 0B0H 給T0設(shè)初值MOVTH0 3CHSETBET0 允許T0中斷SETBEA 總中斷允許SETBTR0 啟動T0HERE SJMPHERE 原地循環(huán) 等待中斷 33 33 IT0P MOVTL0 0B0H T0中斷子程序 T0重裝初值MOVTH0 3CHDJNZB RTURN B中斷次數(shù)計(jì)數(shù) 減1非0則 中斷返回CLRTR0 1s定時(shí)時(shí)間到 停止T0工作SETBF0 1s定時(shí)時(shí)間到標(biāo)志F0置1RTURN RETI程序說明 不論1s定時(shí)時(shí)間是否已到 都返回到 SJMPHERE 指令處 SJMPHERE 指令實(shí)際是一段主程序 在這段主程序中再通過對F0標(biāo)志的判定 可知1s定時(shí)是否到 再進(jìn)行具體處理 34 34 例利用定時(shí) 計(jì)數(shù)器T0的方式1 產(chǎn)生10ms的定時(shí) 并使P1 0引腳上輸出周期為20ms的方波 采用中斷方式 設(shè)系統(tǒng)時(shí)鐘頻率為12MHz 解 1 計(jì)算計(jì)數(shù)初值X 由于晶振為12MHz 所以機(jī)器周期Tcy為1 s 所以 N t Tcy 10 10 3 1 10 6 10000X 65536 10000 55536 D8F0H即應(yīng)將D8H送入TH0中 F0H送入TL0中2 求T0的方式控制字TMOD M1M0 01 GATE 0 C T 0 可取方式控制字為01H 35 采用查詢方式 ORG0000HLJMPMAIN 跳轉(zhuǎn)到主程序ORG0100HMAIN MOVTMOD 01H 置T0工作于方式1LOOP MOVTH0 0D8H 裝入計(jì)數(shù)初值MOVTL0 0F0HSETBTR0 啟動T0JNBTF0 查詢TF0 0 等待 T0在工作 未計(jì)滿CLRTF0 清TF0 此時(shí) TF0 1 10ms定時(shí)到CPLP1 0 P1 0取反 產(chǎn)生方波的半個(gè)周期SJMPLOOP 循環(huán)產(chǎn)生方波END 36 ORG0000HLJMPMAIN 跳轉(zhuǎn)到主程序ORG000BH T0的中斷入口地址LJMPDVT0 轉(zhuǎn)向中斷服務(wù)程序ORG0100HMAIN MOVTMOD 01H 置T0工作于方式1MOVTH0 0D8H 裝入計(jì)數(shù)初值MOVTL0 0F0HSETBET0 T0開中斷SETBEA CPU開中斷SETBTR0 啟動T0SJMP 等待中斷DVT0 CPLP1 0 P1 0取反輸出MOVTH0 0D8H 重新裝入計(jì)數(shù)值MOVTL0 0F0HRETI 中斷返回END 采用中斷方式 37 6 4 2方式2的應(yīng)用方式2是一個(gè)可以自動重新裝載初值的8位計(jì)數(shù)器 定時(shí)器 可省去重裝初值指令 當(dāng)某個(gè)定時(shí)器 計(jì)數(shù)器不使用時(shí) 可擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外中斷源 例6 3 擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源 把定時(shí)器 計(jì)數(shù)器T0腳作為外部中斷請求輸入端 溢出標(biāo)志TF0作為外中斷請求標(biāo)志 基本思想 設(shè)為方式2 自動裝入常數(shù)方式 計(jì)數(shù)模式 TH0 TL0初值均為0FFH 當(dāng)T0腳發(fā)生負(fù)跳變時(shí) T0計(jì)數(shù)溢出 TF0置 1 單片機(jī)發(fā)出中斷請求 38 38 初始化程序 ORG0000HAJMPIINI 跳到初始化程序ORG000BHAJMPIT0P 跳到外中斷處理程序IINI MOVTMOD 06H 設(shè)置T0為方式2MOVTL0 0FFH 設(shè)T0初值MOVTH0 0FFHSETBET0 允許T0中斷SETBEA 總中斷允許SETBTR0 啟動T0 IT0P 外中斷處理程序段 39 39 程序說明 當(dāng)連接在P3 4 T0腳 的外部中斷請求輸入腳電平發(fā)生負(fù)跳變時(shí) TL0加1 產(chǎn)生溢出 TF0置 1 向單片機(jī)發(fā)出中斷請求 同時(shí)TH0的內(nèi)容0FFH送TL0 即TL0恢復(fù)初值0FFH P3 4腳相當(dāng)于一個(gè)負(fù)跳沿觸發(fā)的外中斷請求源輸入 對P3 5也可做類似的處理 例6 4 當(dāng)T0 P3 4 引腳上發(fā)生負(fù)跳變時(shí) 作為P1 0引腳產(chǎn)生方波的啟動信號 開始從P1 0腳上輸出一個(gè)周期為1ms的方波 如圖6 14所示 系統(tǒng)時(shí)鐘6MHz 40 40 基本思想 T0設(shè)為方式1計(jì)數(shù) 初值為FFFFH 當(dāng)外部計(jì)數(shù)輸入端T0 P3 4 發(fā)生一次負(fù)跳變時(shí) T0加1且溢出 溢出標(biāo)志TF0置 1 向CPU發(fā)出中斷請求 此時(shí)T0相當(dāng)于一個(gè)負(fù)跳沿觸發(fā)的外部中斷源 進(jìn)入T0中斷程序后 F0標(biāo)志置 1 說明T0引腳上已接收過負(fù)跳變信號 T1定義為方式2定時(shí) 在T0引腳產(chǎn)生一次負(fù)跳變后 啟動T1每500 s產(chǎn)生一次中斷 在中斷服務(wù)子程序中對P1 0求反 使P1 0產(chǎn)生周期1ms的方波 由于省去重新裝初值指令 所以可產(chǎn)生精確的定時(shí)時(shí)間 41 41 42 圖6 14負(fù)跳變觸發(fā)輸出一個(gè)周期為1ms的方波 42 2 計(jì)算T1的初值設(shè)T1的初值為x 則 28 x 2 10 6 5 10 4x 28 250 6 06H 3 程序設(shè)計(jì)參考程序 ORG0000H 程序入口RESET LJMPMAIN 跳向主程序MAINORG000BH T0的中斷入口LJMPIT0P 轉(zhuǎn)T0中斷服務(wù)程序ORG001BH T1的中斷入口 43 43 LJMPIT1P 轉(zhuǎn)T1中斷服務(wù)程序ORG0100H 主程序入口MAIN MOVSP 60H 設(shè)堆棧指針ACALLPT0M2 調(diào)用對T0 T1初始化子程序LOOP MOVC F0 T0是否產(chǎn)生過中斷 若產(chǎn)生 過 F0置1JNCLOOP T0未產(chǎn)生中斷 C 0 則跳 到LOOP 等待T0中斷SETBET1 允許T1產(chǎn)生定時(shí)中斷SETBTR1 啟動T1HERE AJMPHERE 44 44 PT0M2 MOVTMOD 26H 對T0 T1初始化 T0方式1 計(jì)數(shù) T1方式2定時(shí)MOVTL0 0FFH T0置初值MOVTH0 0FFHSETBET0 允許T0中斷MOVTL1 06H T1置初值MOVTH1 06HCLRF0 把T0已發(fā)生中斷標(biāo)志F0清0SETBEA 總中斷允許SETBTR0 啟動T0RET 45 45 IT0P CLRTR0 T0中斷服務(wù)程序 停止T0計(jì)數(shù)SETBF0 把T0引腳接收過負(fù)脈沖標(biāo)志F0置1 即接收過負(fù)跳變RETIIT1P CPLP1 0 T1中斷服務(wù)程序 P1 0位取反RETI程序說明 當(dāng)單片機(jī)復(fù)位時(shí) 從0000H跳向主程序MAIN處執(zhí)行程序 其中調(diào)用了對T0 T1初始化子程序PT0M2 子程序返回后執(zhí)行標(biāo)號LOOP處指令 循環(huán)等待T0引腳上負(fù)脈沖的到來 由于負(fù)脈沖到來的標(biāo)志位F0的復(fù)位初始值為0 所以程序就在標(biāo)號LOOP處循環(huán)等待 46 46 當(dāng)T0 P3 4 腳發(fā)生負(fù)跳變時(shí) 由于T0計(jì)數(shù)溢出 則跳向T0中斷服務(wù)子程序 此時(shí)停止T0計(jì)數(shù) 并把T0引腳接收過負(fù)脈沖的標(biāo)志F0置1 當(dāng)中斷返回時(shí) 由于F0已被置1 則程序跳出LOOP處的循環(huán)等待 此時(shí)執(zhí)行指令來允許T1中斷 并啟動T1定時(shí) 然后執(zhí)行 AJMPHERE 指令 循環(huán)等待 等待T1的500 s定時(shí)中斷到來 當(dāng)T1的500 s定時(shí)中斷產(chǎn)生時(shí) 則進(jìn)入T1的中斷服務(wù)子程序IT1P 把P1 0腳電平取反 由于是自動裝初值 省去對T1重裝初值指令 中斷返回后 到 AJMPHERE 處等待T1的500 s定時(shí)中斷 如此重復(fù) 即得到圖6 14波形 47 47 例6 5 利用定時(shí)器T1的方式2計(jì)數(shù) 每計(jì)滿100個(gè)數(shù) 將P1 0取反 本例是方式2計(jì)數(shù)模式的應(yīng)用舉例 1 選擇工作方式外部信號由T1 P3 5 引腳輸入 每發(fā)生一次負(fù)跳變計(jì)數(shù)器便加1 每輸入100個(gè)脈沖 計(jì)數(shù)器將產(chǎn)生溢出中斷 在中斷服務(wù)程序中將P1 0取反一次 T1工作在方式2的控制字TMOD 60H 不使用T0時(shí) TMOD低4位任取 但不能使T0為方式3 這里取全0 2 計(jì)算T1的初值X 28 100 156 9CHTL1的初值為9CH 重裝初值寄存器TH1 9CH 48 48 3 參考程序 ORG0000H 程序運(yùn)行入口LJMPMAIN 跳向主程序MAINORG001BH T1中斷服務(wù)程序入口CPLP1 0 P1 0位取反RETIORG0100H 主程序入口MAIN MOVTMOD 60H 設(shè)置T1為方式2計(jì)數(shù)MOVTL0 9CH T0置初值MOVTH0 9CHSETBTR1 啟動T1HERE AJMPHEREEND 49 49 6 4 4門控制位GATEx的應(yīng)用 測量脈沖寬度介紹門控制位GATE的具體應(yīng)用 測量 P3 3 引腳上正脈沖的寬度 例6 7 門控位GATE1可使T1的啟動計(jì)數(shù)受的控制 當(dāng)GATE1 1 TR1 1時(shí) 只有INT1 引腳輸入高電平時(shí) T1才被允許計(jì)數(shù) 可測量引腳 P3 3 上正脈沖的寬度 其方法如圖6 16所示 50 圖6 16利用GATE位測量正脈沖的寬度 50 參考程序 ORG0000HRESET AJMPMAIN 復(fù)位入口轉(zhuǎn)主程序ORG0100H 主程序入口MAIN MOVSP 60HMOVTMOD 90H 向TMOD寫控制字 T1為方 式1定時(shí) GATE1 1MOVTL1 00HMOVTH1 00HLOOP0 JBP3 3 LOOP0 等待低SETBTR1 如為低 啟動T1 51 51 LOOP1 JNBP3 3 LOOP1 等待升高LOOP2 JBP3 3 LOOP2 為高 此時(shí)計(jì)數(shù)器計(jì)數(shù) 等待降低CLRTR1 停止T1計(jì)數(shù)MOVA TL1 T1計(jì)數(shù)值送A 將T1計(jì)數(shù)值送顯示器 END執(zhí)行以上程序 使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式顯示在顯示器上 52 將A中的T1計(jì)數(shù)值送到顯示器顯示 52 6 4 5實(shí)時(shí)時(shí)鐘的設(shè)計(jì)介紹使用定時(shí)器 計(jì)數(shù)器實(shí)現(xiàn)時(shí)鐘 1 實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘的基本思想最小計(jì)時(shí)單位是秒 如何獲得1s的定時(shí)時(shí)間呢 從前面介紹知 定時(shí)器方式1 最大定時(shí)時(shí)間也只能131ms 可將定時(shí)器的定時(shí)時(shí)間定為100ms 中斷方式進(jìn)行溢出次數(shù)的累計(jì) 計(jì)滿10次 即得秒計(jì)時(shí) 而計(jì)數(shù)10次可用循環(huán)程序的方法實(shí)現(xiàn) 初值的計(jì)算如例6 2 片內(nèi)RAM規(guī)定3個(gè)單元為秒 分 時(shí)單元 42H 秒 單元 41H 分 單元 40H 時(shí) 單元 53 53 從秒到分 從分到時(shí)是通過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論