新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機學習之十七:計數器的應用

        單片機學習之十七:計數器的應用

        作者: 時間:2016-11-18 來源:網絡 收藏
        一、實驗現象

        本文引用地址:http://www.104case.com/article/201611/315891.htm

        每次按下k0按鍵2次后,在P0.0輸出一個周期是100ms的方波信號。

        二、實驗目的

        掌握內部定時/計數器作計數功能的應用

        三、實驗任務分析

        在前面的3個試驗里面,我們都是讓T0工作于定時方式,從而產生一段固定的時間。但是T0和T1除了可以用于定時外,還可以用于對外部輸入的脈沖進行計數。在這個試驗里面,我們學習T0工作于計數方式時的編程方法。

        在本試驗中,我們用T0對外部按鍵的動作進行計數。看一下定時/計數器的邏輯圖如下圖所示:

        我們發(fā)現當C/T=1的時候,定時/計數器T0可對T0(P3.4)端計數,每當T0端產生一個負跳變的時候,計數器執(zhí)行一次加1的運算。為了讓k0按鍵按下的時候,在p3.4端產生一個負跳變,我們首先要做的是把p1.1和p3.4用導線短路,如下圖13-2所示,這樣才能滿足試驗要求。

        這個試驗的思路如下:讓T0在計數2次時,產生溢出中斷,在T0的中斷服務程序我們啟動T1開始計數,然后在T1的溢出中斷里面把P0.0取反,這樣就可以產生符合我們實驗要求的信號

        為了讓k0按下2次后T0產生溢出中斷,我們可以讓T0工作于計數方式,并選擇可重新置入計數初值的8位計數器模式2;為了產生100ms的方波信號,我們讓T1工作于定時方式,選擇16位計數器模式。所以tmod的初值應該是:0001 0110,即16h。

        四、實驗程序

        org 0000h

        ajmp main

        org 000bh ;T0溢出中斷入口地址

        ajmp time0

        org 001bh

        ajmp time1 ;T1溢出中斷入口地址

        org 0020h

        main: clr p1.5

        setb p0.0

        mov sp,#70h ;設置堆棧

        mov tmod,#16h ;T0、T1初始化,T0工作在計數方式,T1工作在定時方式

        mov tl0,#0feh ;T0置計數初值,計數2次后產生溢出中斷

        mov th0,#0feh ;計數初值置入常數緩沖區(qū)

        mov th1,#3ch ;T1置入計數初值,產生50ms定時

        mov tl1,#0b0h

        setb et0 ;允許T0溢出中斷

        setb et1 ;允許T1溢出中斷

        setb tr0 ;啟動T0計數

        setb ea cpu開中斷

        ajmp $

        time0: setb tr1 ;啟動T1計數

        reti

        time1: mov th1,#3ch ;T1重裝計數初值

        mov tl1,#0b0h

        cpl p0.0 ;P0.0取反

        reti

        end

        五、幾點說明

        在運行該程序時,有時可能會發(fā)現并不是按鍵按下兩次后產生信號,這是因為手動按鍵的時候可能會發(fā)生抖動情況,導致計數器計數的緣故。



        關鍵詞: 單片機計數

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 琼海市| 临高县| 赫章县| 富阳市| 望都县| 龙口市| 白沙| 金坛市| 靖安县| 崇信县| 忻州市| 沁源县| 清水河县| 靖西县| 钟祥市| 湘潭市| 江山市| 兴城市| 南平市| 遵化市| 祁连县| 界首市| 基隆市| 会泽县| 临海市| 焉耆| 赫章县| 吴川市| 饶河县| 中卫市| 连云港市| 屏东县| 赤峰市| 嘉鱼县| 乐都县| 奉贤区| 上思县| 垫江县| 巩留县| 临夏县| 林芝县|