首页技术pic单片机c语言入门(单片机c语言必背代码)

pic单片机c语言入门(单片机c语言必背代码)

编程之家2026-06-19648次浏览

大家好,感谢邀请,今天来为大家分享一下pic单片机c语言入门的问题,以及和单片机c语言必背代码的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

pic单片机c语言入门(单片机c语言必背代码)

关于PIC单片机C语言编程

1:第一个问号:是;第二个问号:不一定;

2:一些C30有多种类型版本,你说的30C和36可能不是指同一种类型。

3:没破解的编译器过期就不能编译程序了。想用就需要重装(貌似它会在系统内记录的,所以应该是重装操作系统才行)。

4:肯定不可靠。我有过编译经历,破解的编译出来的在逻辑上就会有问题。但这不影响普通学生入门者做设计。如果你是做工业、航天领域设计的,你的领导也不会让你用破解版或者未注册版。所以现在很多单位宁愿用汇编来编译程序。

PICC有支持 PIC10/12/16/18/24/32系列单片机的C编译器。同时也支持dsPIC30/33系列DSC芯片的C编译器

PIC单片机C语言编程的高手来帮帮忙啊!

你好,对于你这个问题其实也不是太难,不要在乎片子有多复杂,也不要在乎问题有多难,关键是勇于挑战他,你弄永远不行,程序是调试出来的,别人给你写的你不一定可以用得上。AD985X系列的DDS芯片大同小异,基本也就是协议问题。仔细看一下,手册上的介绍对你很有帮助,还有就是关于你选择的PIC的那款片子,也很简单,给你一个相关的程序参考一下,真的是大同小异无非是细节问题。这个没有人能帮到你,靠自己是最好的也可以学习很多东西。还是那句话程序师调试出来的

pic单片机c语言入门(单片机c语言必背代码)

如果在调试过程中有什么问题请Hi我,常在线

AD9851的驱动程序

//头文件

#include"SPCE061A.h"

//变量说明

unsigned long int Freq_Ctrl_Word= 0x051eb851;//频率控制字先传低位再传高位

pic单片机c语言入门(单片机c语言必背代码)

unsigned int Phase_Ctrl_Word= 0x0000;//相位控制字先传低位再传高位

unsigned int Order_Ctrl_Word= 0x0000;//b32:0 6倍频关闭 b33b34:00电源工作模式

//定义AD9851与SPCE061A的接口

#define M_DATA 0x0001

#define M_UD 0x0002

#define M_CLK 0x0004

#define Set_IOA_Bit(x)(*P_IOA_Data=*P_IOA_Buffer| x)//置高

#define Clear_IOA_Bit(x)(*P_IOA_Data=*P_IOA_Buffer&~x)//置低

//====================================================================

//----Function: void Init_AD9851(void)

//-Description:初始化与AD9851连接的IO口

//--Parameters:无

//------Return:无

//-------Notes:不影响其他IO口

//====================================================================

void Init_AD9851(void)

{

*P_IOA_Dir|=(M_DATA+ M_UD+ M_CLK);

*P_IOA_Attrib|=(M_DATA+ M_UD+ M_CLK);

*P_IOA_Data&=~(M_DATA+ M_UD+ M_CLK);

}

//====================================================================

//----Function: void Write_AD9851(void)

//-Description:向AD9851写入频率控制字,命令控制字和相位控制字

//--Parameters:无

//------Return:无

//-------Notes:无

//====================================================================

void Write_AD9851(void)

{

unsigned long int mask= 0x0001;

unsigned int i;

Clear_IOA_Bit(M_UD);//M_UD置低

//送32位频率控制字

for(i= 0;i< 32;i++)

{

Clear_IOA_Bit(M_CLK);//M_CLK置低

if(Freq_Ctrl_Word& mask)

{

Set_IOA_Bit(M_DATA);

}

else

{

Clear_IOA_Bit(M_DATA);

}

Set_IOA_Bit(M_CLK);

mask= mask<< 1;

}

//送3位的命令控制字

mask= 0x0001;

for(i= 0;i< 3;i++)

{

Clear_IOA_Bit(M_CLK);//M_CLK置低

if(Order_Ctrl_Word& mask)

{

Set_IOA_Bit(M_DATA);

}

else

{

Clear_IOA_Bit(M_DATA);

}

Set_IOA_Bit(M_CLK);

mask= mask<< 1;

}

//送5位相位控制字

mask= 0x0001;

for(i= 0;i< 5;i++)

{

Clear_IOA_Bit(M_CLK);//M_CLK置低

if(Phase_Ctrl_Word& mask)

{

Set_IOA_Bit(M_DATA);

}

else

{

Clear_IOA_Bit(M_DATA);

}

Set_IOA_Bit(M_CLK);

mask= mask<< 1;

}

Set_IOA_Bit(M_UD);//M_UD置高,产生上升沿,频率更新使能,输出有效

}

最后在说一下个人的理解,也就是DDS与MCU之间的接口问题,个人认为有点像SPI,只不过SPI的数据口是串行的,而在这这里是分时并行。主要问题就是协议,唯一的办法就是求助于数据手册,我刚出去查了一下,好像全是E文的,建议前期工作就是对照Google翻译这个数据手册,很有必要。

学习和创作的过程也很有趣,虽然很艰辛

pic系列单片机用c语言编程时,让他执行A/D转换的指令是什么

AD转换不是一条指令就可以完成的,它要先经过端口设置,AD设置等过程后才能准备进入AD转换,下例是从北航的<PIC16单片机C程序设计与PROTEUS仿真>一书中得到的启发编制的程序,希望对你能有帮助.建议你看一下这本书,对初学和想进一步提高在PIC单片机应用编程等会有用的.

附图是对应程序的,在仿真时调整电位器可以看到AD结果的变化,并通过计算器可以验证程序的正确性.

//ADl转换示例,可以改变输入电压、AD通道、结果对齐方式等,看其变化

#include<pic.h>

__CONFIG(0x3F39);//配置位设置

voidmain(void)

{ chari,X,Y;

TRISA=0xFF;//将所有的A口设置为输入

TRISE=0x03;//将所有的E口设置为输入

TRISD=0;//C口与D口全为输出

TRISC=0;

ADCON1=0b10000000;//设置AD结果对齐方式、AD时钟选择(与ADCON0的位7,6一起),AD端口设置等

ADCON0=0b01011001;//AD时钟选择(与ADCON1的位6一起),通道选择,AD模块使能

while(1)

{ NOP();

for(i=0;i<3;i++)//延时时间大约20us

NOP();

ADGO=1;//开始AD

while(ADGO==1);//等待AD转换完成

ADIF=0;

X=ADRESH;//读取AD结果高字节至C口

PORTC=X;

Y=ADRESL;//读取AD结果低字节至D口

PORTD=Y;

};

}

如果你还想了解更多这方面的信息,记得收藏关注本站。

dnf5周年(dnf五周年)ai换脸软件能换双人的 多人换脸软件app哪个好用