新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16F877A TIMER1計數操作

        PIC16F877A TIMER1計數操作

        作者: 時間:2016-11-11 來源:網絡 收藏
        /**********************

        Title:PIC16F877A TIMER1計數操作
        Author:hnrain
        Date:2010-12-28

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

        使用前置分頻器
        T1CKPS1 T1CKPS1
        0 0 1 分頻 TMR1時鐘為晶振時鐘/(4*1)
        0 1 2 分頻 TMR1時鐘為晶振時鐘/(4*2)
        1 0 4 分頻 TMR1時鐘為晶振時鐘/(4*4)
        1 1 8 分頻 TMR1時鐘為晶振時鐘/(4*8)
        TMR1是16位寬度的TMR1由2個8位的可讀寫的寄存器TMR1H和TMR1L組成。

        TMR1有專門的啟停控制位TMR1ON,通過軟件可以任意啟動或暫停TMR1計數功能。

        T1CON:TIMER1 CONTROL REGISTER

        bit7-6 unimplemented :Read as ‘0’

        bit5-4 T1CKPS1:T1CKPS0:Timer1 input Clock Prescale Select bits

        11=1:8 prescale value

        10=1:4 prescale value

        01=1:2 prescale value

        00=1:1 prescale value

        bit3 T1OSCEN:Timer1 Oscillator Enable Control bit

        1 = Oscillator is enable

        0 = Oscillator is shut-off

        bit2 T1SYNC:Timer1 External Clock Input Synchronization Control bit

        when TMR1CS = 1

        1= Do not synchronize external clock input

        0= Synchronize external clock input

        when TMR1CS = 0

        This bit is ignored .Timer1 uses the internal clock when TMR1CS = 0.

        bit1 TMR1CS:Timer1 Clock Source Select bit

        1 = External clock from pin RC0/T1OSO/T1CKI

        0 = Internal clock

        bit0 TMR1ON:Timer1 on bit

        1 = enables timer1

        0 = stops timer1
        說明:作用在TMR1的計數狀態,計數信號從RC0/T1CKI輸入,
        當來一個上升沿時,采集到一個有效的信號,計數到TMR1L,TMR1H中。
        當計滿時就會產生中斷信號。
        ***********************/
        #include
        #include "../head/config.h"

        __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);

        void main(void)
        {
        T1CKPS0 = 0;
        T1CKPS1 = 0;//不分頻

        TMR1L = (65536 - 1)%256;//TMR1L,TMR1H賦初值
        TMR1H = (65536 - 1)/256;
        T1SYNC = 1;//TMR1異步計數器
        TMR1CS = 1;
        GIE = 1;//打開全局中斷
        PEIE = 1;//打開外部中斷
        TMR1IE = 1;//TMR1中斷打開
        TMR1ON = 1;
        PORTD = 0x00;
        TRISD = 0x00;
        while(1){}
        }

        void interrupt ISR(void)
        {
        TMR1L = (65536 - 1)%256;//重新賦值
        TMR1H = (65536 - 1)/256;
        if(TMR1IE && TMR1IF)
        {
        TMR1IF = 0;
        PORTD = ~PORTD;
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 随州市| 平塘县| 松原市| 保山市| 合作市| 高州市| 五大连池市| 隆林| 嘉荫县| 嘉黎县| 建湖县| 全州县| 长顺县| 乡城县| 庆城县| 灵武市| 府谷县| 防城港市| 疏勒县| 罗江县| 潼南县| 平舆县| 讷河市| 张北县| 仁布县| 资溪县| 宁德市| 广丰县| 天祝| 三亚市| 左权县| 南阳市| 岳普湖县| 吉安县| 巴南区| 图片| 鄢陵县| 娄烦县| 方正县| 三门县| 马鞍山市|