zoukankan      html  css  js  c++  java
  • PIC16F877A TIMER1定时操作

    /**********************
    Title:PIC16F877A TIMER1定时操作
    Author:hnrain
    Date:2010-12-28

    使用前置分频器
    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
    ***********************/
    #include <pic.h>
    #include "../head/config.h"

    __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);

    void Delayms(uint16 dly);

    void main(void)
    {
        T1CKPS1 = 1;
        T1CKPS0 = 1;
        TMR1CS = 0;
        TMR1L = (65536 - 37500)%256;
        TMR1H = (65536 - 37500)/256;
        GIE = 1;
        PEIE = 1;
        TMR1IE = 1;
        TMR1ON = 1;   
        PORTD = 0x00;
        TRISD = 0x00;
        while(1){}
    }

    void interrupt ISR(void)
    {
        TMR1L = (65536 - 37500)%256;
        TMR1H = (65536 - 37500)/256;
        if(TMR1IF&&TMR1IE)
        {
            TMR1IF = 0;
            PORTD = ~PORTD;
        }   
    }

    /**********************
    Title:PIC16F877A TIMER1定时操作
    Author:hnrain
    Date:2010-12-28
    
    使用前置分频器
    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
    ***********************/
    #include <pic.h>
    #include "../head/config.h"
    
    __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);
    
    void Delayms(uint16 dly);
    
    void main(void)
    {
    	T1CKPS1 = 1;
    	T1CKPS0 = 1;
    	
    	TMR1CS = 0;
    	
    	TMR1L = (65536 - 37500)%256;
    	TMR1H = (65536 - 37500)/256;
    	
    	GIE = 1;
    	PEIE = 1;
    	TMR1IE = 1;
    	
    	TMR1ON = 1;	
    	
    	PORTD = 0x00;
    	TRISD = 0x00;
    	
    	while(1){}
    }
    
    void interrupt ISR(void)
    {
    	TMR1L = (65536 - 37500)%256;
    	TMR1H = (65536 - 37500)/256;
    	if(TMR1IF&&TMR1IE)
    	{
    		TMR1IF = 0;
    		PORTD = ~PORTD;
    	}	
    }
  • 相关阅读:
    java 静态变量生命周期(类生命周期)
    Eclipse插件打包
    java implement
    cocos2d-x 开发中使用的一些工具
    cocos2dx 开发配置的一些环境变量(mac/linux)
    cocos2dx2.x 创建项目
    (转)粒子编辑器Particle designer属性的介绍
    Android网络开启、关闭整理
    常用 Java Profiling 工具的分析与比较
    python合并图片
  • 原文地址:https://www.cnblogs.com/hnrainll/p/1919141.html
Copyright © 2011-2022 走看看