论坛首页 > 初学者园地 > 学学单片机 > dsPIC33学习入门
查看:1188  |  回复:7
dsPIC33学习入门
飞鸿踏雪泥
3
主题
26
回复
发表于Tue Sep 20 14:41:19 CST 2016   |  只看该作者 1# 电梯直达
    最近一直在学习PIC单片机,在此开一贴,将每天的学习收获以及心得共享给大家,希望对后来者有一定的帮助.
回复 收藏
  举报
立创君
【官方工作人员】
59
主题
1000
回复
发表于Tue Sep 20 16:53:10 CST 2016   |  只看该作者 2#
Nice~
立创商城(WWW.SZLCSC.COM),在线订单成交量全国领先的一站式元器件采购自营商城。
ChessWorld
22
主题
496
回复
发表于Tue Sep 20 18:08:58 CST 2016   |  只看该作者 3#


欢迎楼主开课!

飞鸿踏雪泥
3
主题
26
回复
发表于Wed Sep 21 17:15:02 CST 2016   |  只看该作者 4#

    今天开始正式讲解.

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

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



飞鸿踏雪泥
3
主题
26
回复
发表于Wed Sep 21 17:16:36 CST 2016   |  只看该作者 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
回复
发表于Wed Sep 21 17:17:29 CST 2016   |  只看该作者 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
回复
发表于Wed Sep 21 17:18:37 CST 2016   |  只看该作者 7#
    今天先共享两个源程序,不过感觉嘉立创的论坛不能直接上传代码或者是直接保留程序的格式,这样看起来有点吃力.
123
0
主题
1
回复
发表于Mon Oct 31 17:00:37 CST 2016   |  只看该作者 8#
不错
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部