dsPIC33F定时器

/* 
 * File:   main.c
 * Author: Administrator
 *
 * Created on 2013年8月9日, 上午11:34
 */

#include <stdio.h>
#include <stdlib.h>
#include <p33FJ128MC506A.h>

/*
 * 
 */
_FOSCSEL(FNOSC_FRCPLL); //内部快速RC振荡 & PLL
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE); //时钟开关使能,时钟监视器禁止,时钟输出为数字输出,标准振荡模式
_FBS(BSS_NO_FLASH & BWRP_WRPROTECT_OFF); //无BOOT代码段,BOOT段写保护关
_FWDT(FWDTEN_OFF); //WDT 关
/* Turn off Watchdog TIMER */
_FGS(GSS_OFF & GCP_OFF & GWRP_OFF); //代码保护高级及标准代码保护关闭,写保护关闭,
_FPOR(PWMPIN_ON & HPOL_ON & LPOL_ON & FPWRT_PWR128); //PWM 模式为 端口寄存器模式,PWM 上桥为低电平有效模式,下桥为低电平有效模式;上电复位时间为128毫秒

void timer1_init(void);
int main(int argc, char** argv)
{
    PLLFBD = 41;            // dPLL derived in UserParms.h	PLL反馈倍频比 Fosc = Fin*(M/(N1*N2))
    CLKDIVbits.PLLPOST = 0; // N2=2 后分频比为2
    CLKDIVbits.PLLPRE = 0;  // N1=2	预分频比为2
    __builtin_write_OSCCONH(0x01);    // 设置带PLL的内部FRC振荡器。
    __builtin_write_OSCCONL(0x01);    // 请求切换到所要求的振荡器
    while (OSCCONbits.COSC != 0b01);  // 是否写入带PLL的内部振荡器,PLL

    timer1_init();
    LATB = 0x0000;  // B端口清零
    TRISB = 0x0000; // B端口设为输入, 0: out, 1: in
    PORTB = 0x0000;

    while(1)
    {
    
    }

    return (EXIT_SUCCESS);
}
void timer1_init(void)
{
    T1CON = 0;              // 确保T1关闭,再进行初始化
    IFS0bits.T1IF = 0;      // 清T1复位标志,使T1复位
    IPC0bits.T1IP = 5;      // 3个BIT,设置T1的中断优先级,0~7,7是做高优先级
    IEC0bits.T1IE = 1;      // 开T1中断
    T1CONbits.TCKPS = 1;    // 设置T1的预分频比是8,即T1加一次需要的时间为1/(32M/8)秒,即0.25uS
                            // 2个bit,00--1:1,01--1:8,10--1:64,11--1:256
    PR1 = 4000;             // 根据计算应该是从0开始计数,加到PR1时产生中断,跟以往的MCU溢出中断不同
                            // 这个寄存器的值计算结果为,400~40000分别对应10KHz到100Hz
    T1CONbits.TON = 1;      // 打开T1并开始计数

}
//====================定时中断服务程序======================
void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt(void)
{
    if (0x0000 == PORTB)    // PORTBbits
    {
        PORTB = 0xffff;
        LATB = 0xffff;
    }
    else
    {
        PORTB = 0x0000;
        LATB = 0x0000;
    }
    printf("PORTB: %d\n", PORTB);
//    PR1 = 40320/Ftimer1;      //计算定时器的溢出值
    IFS0bits.T1IF = 0;      //在软件里清中断标志
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值