当前位置: 编程技术>移动开发
本页文章导读:
▪dsPIC33EP timer2初始化设立及应用 dsPIC33EP timer2初始化设置及应用//文件 p33timer2.h
#ifndef _P33TIMER2_H_
#define _P33TIMER2_H_
//#include "p33timer2.h"
#define TIMER2_IEN_ENB _T2IE = 1
#define TIMER2_IEN_DIS _T2IE = 0
//timer2输入时钟分频
#define TIMER2_DIV1 .........
▪ dsPIC33EP 钟表初始化程序 dsPIC33EP 时钟初始化程序//文件名p33clk.h
#ifndef _P33CLK_H_
#define _P33CLK_H_
//#include "p33clk.h"
#define WDT_ENB _SWDTEN = 1
#define WDT_DIS _SWDTEN = 0
//时钟源选择
#define OSCLK0 0 //FRC
#define OSCLK1 1 //带PLL+N.........
▪ dsPIC33EP ADC模块初始化及应用范例 dsPIC33EP ADC模块初始化及应用实例//文件名 p33adc.h
#ifndef _P33ADC_H_
#define _P33ADC_H_
//#include "p33adc.h"
//--AD1CON1
#define ADON (1<<15)
#define MAUTO (7<<5) //采样后 自动转换模式
#define SAMP (1<<.........
[1]dsPIC33EP timer2初始化设立及应用
来源: 互联网 发布时间: 2014-02-18
dsPIC33EP timer2初始化设置及应用
//文件 p33timer2.h
#ifndef _P33TIMER2_H_
#define _P33TIMER2_H_
//#include "p33timer2.h"
#define TIMER2_IEN_ENB _T2IE = 1
#define TIMER2_IEN_DIS _T2IE = 0
//timer2输入时钟分频
#define TIMER2_DIV1 (0<<4)
#define TIMER2_DIV8 (1<<4)
#define TIMER2_DIV64 (2<<4)
#define TIMER2_DIV256 (3<<4)
//=============================
extern void Init_Timer2(uint16 T2div,uint16 Tcon) ;
#endif
//文件 p33timer2.c
#include "global.h"
#include "p33timer2.h"
//***************************************
// 函数名称:Init_Timer2
// 函数功能:初始化timer2
// 入口参数:时钟分频系数 定时器计数个数
// 出口参数:无
// 返回值:无
// Timer2 的时钟源 = Fp(即外设时钟)
//***************************************
void Init_Timer2(uint16 T2div,uint16 Tcon)
{
T2CON = 0X0000|T2div ;
PR2 = Tcon ; //重装载寄存器
TMR2 = 0x0000 ; //计数器清0
_T2IF = 0 ;
_T2IE = 0 ;
T2CON |= (1<<15) ; //开启定时器2
}
//应用实例
void main(void)
{
//外设时钟64分频到时钟 计数7197次
Init_Timer2(TIMER2_DIV64,7197) ;//T2时钟源为外设时钟
TIMER2_IEN_ENB ;//开启定时器中断
// TIMER2_IEN_DIS ;
while(1)
{
}
}
[2] dsPIC33EP 钟表初始化程序
来源: 互联网 发布时间: 2014-02-18
dsPIC33EP 时钟初始化程序
//文件名p33clk.h
#ifndef _P33CLK_H_
#define _P33CLK_H_
//#include "p33clk.h"
#define WDT_ENB _SWDTEN = 1
#define WDT_DIS _SWDTEN = 0
//时钟源选择
#define OSCLK0 0 //FRC
#define OSCLK1 1 //带PLL+N分频的FRC
#define OSCLK2 2 //HS MS LS 外部时钟
#define OSCLK3 3 //带PLL的HS MS LS 外部时钟
#define OSCLK4 4 //保留
#define OSCLK5 5 //LPRC
#define OSCLK6 6 //FRC/16
#define OSCLK7 7 //带N分频的FRC
//处理器与CPU时钟分频比
#define DOZEDIV1 (0<<12)
#define DOZEDIV2 (1<<12)
#define DOZEDIV4 (2<<12)
#define DOZEDIV8 (3<<12)
#define DOZEDIV16 (4<<12)
#define DOZEDIV32 (5<<12)
#define DOZEDIV64 (6<<12)
#define DOZEDIV128 (7<<12)
//------------------------------
//Fosc = (Fin/V_FRCDIV/N1/N2)*M
#define V_FRCDIV V_FRCDIV1 //FRC振荡分频系数
#define V_N1 V_N1DIV(2) //x = 2--33 N1 分频系数
#define V_N2 V_N2DIV2 //N2 分频系数
#define V_PLLFBD PLLMF(50) //(x=2--513)PLL 倍频比
//FRC 分频系数
#define V_FRCDIV1 0
#define V_FRCDIV2 1
#define V_FRCDIV4 2
#define V_FRCDIV8 3
#define V_FRCDIV16 4
#define V_FRCDIV32 5
#define V_FRCDIV64 6
#define V_FRCDIV256 7
//N1
#define V_N1DIV(x) (x-2)
//N2
#define V_N2DIV2 0
#define V_N2DIV4 1
#define V_N2DIV8 3
//PLL 倍频数 M
#define PLLMF(x) (x-2)
//================================
extern void Init_Clk(uint16 OsClk) ;
#endif
//文件名p33clk.c
#include "global.h"
#include "p33clk.h"
//***************************************
// 函数名称:InitClk
// 函数功能:初始化时钟
// 入口参数:时钟来源选择 FRC分频 pll倍频比
// 出口参数:无
// 返回值:无
// Fosc = (Fin/V_FRCDIV/N1/N2)*M
//***************************************
void Init_Clk(uint16 OsClk)
{
CLKDIV = 0X0000 ; //处理器与外设时钟比为1:1
_FRCDIV = V_FRCDIV ; //FRC分频系数
_PLLPOST = V_N2 ;//N2
_PLLPRE = V_N1 ;//N1
PLLFBD = V_PLLFBD ;// PLL倍频
OSCTUN = 0X0000 ; //振荡器调节寄存器 默认7.37M
REFOCON = 0X0000 ; //参考时钟=系统时钟
OSCCON = 0X0000 ;
_OSWEN = 1 ; //请求切换由NOSC指定的时钟
_NOSC = OsClk ; //切换 新的振荡器
while(_OSWEN) ;//等待时钟切换完成
if((_NOSC == OSCLK1) ||(_NOSC == OSCLK3))//带PLL
{
while(!_LOCK) ;//等待PLL锁定
}
REFOCON |= 0X8000 ; //参考时钟输出使能
}
//应用实例 -- 时钟初始化
//FRC 系统时钟1分频到CPU PLL倍频50
//Fin = 7.37M Fcpu = Fosc/2 = 46.0625M
Init_Clk(OSCLK1) ;
[3] dsPIC33EP ADC模块初始化及应用范例
来源: 互联网 发布时间: 2014-02-18
dsPIC33EP ADC模块初始化及应用实例
//文件名 p33adc.h
#ifndef _P33ADC_H_
#define _P33ADC_H_
//#include "p33adc.h"
//--AD1CON1
#define ADON (1<<15)
#define MAUTO (7<<5) //采样后 自动转换模式
#define SAMP (1<<1)
#define DONE (1<<0)
//ADC时钟选择--时钟分频
#define ADC_DIV1 (1-1)
#define ADC_DIV5 (5-1)
#define ADC_DIV10 (10-1)
#define ADC_DIV25 (25-1)
#define ADC_DIV50 (50-1)
#define ADC_DIV100 (100-1)
#define ADC_DIV250 (250-1)
//--AD通道选择------
#define ADC_Chanel0 (0x00<<0)
#define ADC_Chanel1 (0x01<<0)
#define ADC_Chanel2 (0x02<<0)
#define ADC_Chanel3 (0x03<<0)
#define ADC_Chanel4 (0x04<<0)
#define ADC_Chanel5 (0x05<<0)
#define ADC_Chanel6 (0x06<<0)
#define ADC_Chanel7 (0x07<<0)
#define ADC_Chanel8 (0x08<<0)
#define ADC_Chanel9 (0x09<<0)
#define ADC_Chanel10 (0x0A<<0)
#define ADC_Chanel11 (0x0B<<0)
#define ADC_Chanel12 (0x0C<<0)
#define ADC_Chanel13 (0x0D<<0)
#define ADC_Chanel14 (0x0E<<0)
#define ADC_Chanel15 (0x0F<<0)
//================================
extern void Init_Adc(uint16 ClkDiv) ;
extern uint16 AdcSwitch(uint16 Adc_Ch) ;
#endif
//文件名 p33adc.c
#include "global.h"
//#include "p33adc.h"
//***************************************
// 函数名称:Init_Adc
// 函数功能:初始化ADC模块
// 入口参数:
// 出口参数:无
// 返回值:无
// ADC时钟来源于Fcpu
//***************************************
void Init_Adc(uint16 ClkDiv)
{
AD1CON1 = 0X0000|MAUTO; //设置为自动模式 10位4通道模式 数据右对齐
AD1CON2 = 0X0000 ;
AD1CON3 = 0X0000 | ClkDiv |0X8000; //ADC时钟分频
AD1CON4 = 0X0000 ; //不使能DMA 每个通道分一个字的缓存
AD1CHS123 = 0X0000 ;
AD1CHS0 = 0X0000 ;
AD1CSSH = 0X0000 ;
AD1CSSL = 0X0000 ;
AD1CON1 |= ADON ; //开启ADC模块工作
asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时
asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;
}
//***************************************
// 函数名称:AdcSwitch
// 函数功能:选择AD通道转换
// 入口参数:
// 出口参数:无
// 返回值:无
//***************************************
uint16 AdcSwitch(uint16 Adc_Ch) // ADRESH ADRESL
{
uint16 wTmp ;
AD1CON1 |= ADON ; //开启ADC模块工作
AD1CHS0 = (AD1CHS0 & 0XFFE0)|Adc_Ch ;//选择通道
asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时
asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;
AD1CON1 &= ~DONE ; //ADC空闲
AD1CON1 |= SAMP ; //开始转换
while(!(AD1CON1 & DONE)) ; //等待转换完成
// AD1CON1 &= ~DONE ; //ADC空闲
wTmp = ADC1BUF0 & 0X03FF ; //读取转换结果
return wTmp ;
}
//应用实例
void main(void)
{
uint16 g_wTmp1 ;
//初始化ADC
Init_Adc(ADC_DIV25) ;//AD模块时钟输入频率 10BIT AD
while(1)
{
g_wTmp1 = AdcSwitch(ADC_Chanel0) ;//读取转换结果
}
}
最新技术文章: