查看: 9858  |  回复: 9
dsPIC33学习入门
飞鸿踏雪泥
3
主题
26
回复
发表于2016-09-20 14:41:19 | 显示全部楼层
1# 电梯直达
    最近一直在学习PIC单片机,在此开一贴,将每天的学习收获以及心得共享给大家,希望对后来者有一定的帮助.
飞鸿踏雪泥
3
主题
26
回复
发表于2016-09-21 17:15:02   |  显示全部楼层
4#

    今天开始正式讲解.

    dsPIC33F系列的单片机可以通过外置晶振工作,也可以通过内置晶振工作,但这没有什么,一般的单片机都可以.

    dsPIC33F系列单片机牛在哪里,那就是它内部自带锁相环PLL,可以通过倍频将输入的时钟信号频率大幅度提升.



飞鸿踏雪泥
3
主题
26
回复
发表于2016-09-21 17:16:36   |  显示全部楼层
5#

源程序1,通过外置晶振供给单片机工作

#include <p33FJ128MC804.h>
//外部晶振振荡器7.3728MHz
_FOSCSEL(FNOSC_PRIPLL & IESO_ON)
_FOSC(FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_ON & POSCMD_XT)

typedef unsigned int  uint;//长度为0-65535
typedef unsigned char uchar;//长度为0-255
typedef unsigned long ulong;

void initial_mcu_memory();//主存初始化
void initial_peripheral();//常规外设初始化
void delay_short(uint ui_delay_short);//短延时
void delay_long(uint ui_delay_long);//长延时

int main()
{
initial_mcu_memory();//主存初始化
delay_long(10);//延时,等待常规外设供电稳定
initial_peripheral();//常规外设初始化

while(1)
{
PORTCbits.RC6=~PORTCbits.RC6;
        PORTCbits.RC7=~PORTCbits.RC7;
delay_long(500);
}
}

void initial_mcu_memory()//主存初始化
{
TRISCbits.TRISC6=0;//RC6配置输出
    TRISCbits.TRISC7=0;//RC7配置输出
}

void initial_peripheral()//常规外设初始化,暂时无
{
;
}

void delay_short(uint ui_delay_short)
{
uint i;
for(i=0;i<ui_delay_short;i++)
{
;
}
}

void delay_long(uint ui_delay_long)//长延时
{
uint i;
uint j;
for(i=0;i<ui_delay_long;i++)
{
for(j=0;j<500;j++)
{
;
}
}
}


飞鸿踏雪泥
3
主题
26
回复
发表于2016-09-21 17:17:29   |  显示全部楼层
6#

源代码2,通过内置晶振供给单片机工作

#include <p33FJ128MC804.h>
//外部晶振振荡器7.3728MHz
//FCY=FOSC/2
//FOSC=FIN*(M/(N1*N2))
//FIN=7.3728M,M=8,N1=8,N2=4
//FOSC=1.8432M,FCY=0.9216M
_FOSCSEL(FNOSC_PRIPLL & IESO_ON)
_FOSC(FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_ON & POSCMD_XT)

typedef unsigned int  uint;//长度为0-65535
typedef unsigned char uchar;//长度为0-255
typedef unsigned long ulong;

void initial_mcu_memory();//主存初始化
void initial_peripheral();//常规外设初始化
void delay_short(uint ui_delay_short);//短延时
void delay_long(uint ui_delay_long);//长延时

int main()
{
initial_mcu_memory();//主存初始化
delay_long(10);//延时,等待常规外设供电稳定
initial_peripheral();//常规外设初始化

while(1)
{
PORTCbits.RC6=~PORTCbits.RC6;
        PORTCbits.RC7=~PORTCbits.RC7;
delay_long(100);
}
}

void initial_mcu_memory()//主存初始化
{
OSCCONbits.COSC=3;//带PLL的主振荡器(XT,HS,EC)
//CLKDIVbits.DOZE=4;//FOS/16
CLKDIVbits.PLLPOST=2;//N2=4
CLKDIVbits.PLLPRE=8;//N1=8
PLLFBDbits.PLLDIV=8;//M=8

/*
CLKDIVbits.PLLPRE=0;//N1=2  7.3728MHz/2= 3.6864MHz
    PLLFBDbits.PLLDIV=41;//M=41  3.6864*43 = 158.5152MHz
    CLKDIVbits.PLLPOST=0;//N2=2 158.5152/2 = 79.2576MHz
*/

TRISCbits.TRISC6=0;//RC6配置输出
    TRISCbits.TRISC7=0;//RC7配置输出
}

void initial_peripheral()//常规外设初始化,暂时无
{
;
}

void delay_short(uint ui_delay_short)
{
uint i;
for(i=0;i<ui_delay_short;i++)
{
;
}
}

void delay_long(uint ui_delay_long)//长延时
{
uint i;
uint j;
for(i=0;i<ui_delay_long;i++)
{
for(j=0;j<500;j++)
{
;
}
}
}


飞鸿踏雪泥
3
主题
26
回复
发表于2016-09-21 17:18:37   |  显示全部楼层
7#
    今天先共享两个源程序,不过感觉嘉立创的论坛不能直接上传代码或者是直接保留程序的格式,这样看起来有点吃力.

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部