问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 04:50

我来回答

2个回答

热心网友 时间:2023-11-21 15:51

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

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

AD9851的驱动程序

//头文件
#include "SPCE061A.h"
//变量说明
unsigned long int Freq_Ctrl_Word = 0x051eb851; //频率控制字 先传低位再传高位
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翻译这个数据手册,很有必要。

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

热心网友 时间:2023-11-21 15:52

这么个事用这么牛X的dsp芯片。。8bit的12f就够了吧。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2198香辣虾是什么意思 虾什么梗 肖战 刻纸制作需要哪些步骤 好玩的生存游戏手游(好玩的生存游戏手游推荐) 北京电脑职业培训学校都有哪些北京电脑培训班都有哪些 欧盟商标注册需要提供什么资料? 怎么注册欧盟商标?需要准备哪些材料? 5g手机有什么好处 5g手机大概多少钱 口水臭是什么原因呢? 口水臭是什么原因 口水臭怎么改善 健康管理师就业方向有哪些地方? pic系列单片机用c语言编程时,让他执行A/D转换的指... pic单片机可以用c编程吗?用什么编译软件?他是属... PIC单片机 c语言编程 肌底液能和精华液一起使用吗?有必要吗? 肌底液有补水保湿的功效吗? 爽肤水、肌底液、精华液、原液、乳液和霜的使用顺序? 爽肤水 肌底液 精华液 乳液 保湿 的使用顺序 肌底液和精华液,和爽肤水,有区别吗? 想问一下 洗面奶、爽肤水、精华液、保湿凝露、面霜... 温碧泉产品含不含激素 温碧泉护肤品的主要功效是什么? 温碧泉盈润保湿的护肤品怎么样?有谁用过么? 温碧泉盈润保湿系列好不好?有人用过吗? 温碧泉护肤品怎么样? 温碧泉保湿系列怎么样 护肤品要选对,温碧泉护肤品适合什么年龄的人使用? 温碧泉哪款产品补水效果最好? 温碧泉润透保湿精华水有泡沫正常吗 温碧泉化妆品怎么样 PIC单片机C语言编程问题 一般8位PIC单片机使用C语言还是汇编语言编程,好像... PIC单片机C语言编程,端口设置问题,if语句条件设... 健康管理师的就业前景怎么样? PIC单片机C语言编程,二进制如何转换成十六进制。 健康管理师证书好就业吗?健康管理师证的用途 PIC单片机中用C语言编程时 ADCON1 是什么意思怎么用! 单片机PIC16F886可以用C语言编程吗 考健康管理师好就业吗? c语言 PIC单片机 PIC单片机串口C程序 健康管理师就业前景怎么样,今后会有发展吗? 医保有哪些类型? PIC单片机c语言中如何嵌套汇编 健康管理师的好就业嘛? 关于PIC单片机C语言编程 MPLAB和PICC的问题 如何写好大学毕业论文? 大学本科的毕业论文有什么写作技巧吗? 有几行PIC单片机的c语言程序代码看不懂,请教一下。 医疗保险都有哪些种类