帮写一个基于C51单片机AD9850的串行扫描C程序,控制IO,P0.3,P0.2,P2.4

作者&投稿:集顾 (若有异议请与网页底部的电邮联系)
C51单片机 AD9850 频率 控制字~

按照你的思路
if(bian_Hao==7)
{
fre=((shu_Ju[0]*10+shu_Ju[1])*100+shu_Ju[2]*10+shu_Ju[3])*1000+
shu_Ju[4]*100+shu_Ju[5]*10+shu_Ju[6]; //控制频率
}0
这里的第一处是不是应该*1000??怎么*10

还有shu_Ju[0]里面到底是什么?
按照这个思路,
if(bian_Hao==5)
{
fre=(shu_Ju[0]*10+shu_Ju[1])*1000+shu_Ju[2]*100+shu_Ju[3]*10+shu_Ju[4]; //控制频率
}
难道这里的shu_Ju[0]不应该*1吗?为什么又是10呢


你说的不是很清楚拉,我猜想:你的程序应该这样
fre=shu_Ju[0]*1000+shu_Ju[1]*100+shu_Ju[2]*10+shu_Ju[3]; //控制频率
if(bian_Hao==5)
{fre=fre*10+shu_Ju[4]; //控制频率
}
else if(bian_Hao==6)
{fre=fre*100+shu_Ju[4]*10+shu_Ju[5]; //控制频率
}
else if(bian_Hao==7)
{fre=fre*1000+shu_Ju[4]*100+shu_Ju[5]*10+shu_Ju[6]; //控制频率
}
else if(bian_Hao==8)
{fre=fre*10000+shu_Ju[4]*1000+shu_Ju[5]*100+shu_Ju[6]*10+shu_Ju[7]; //控制频率
}

# include
# include
# include
sbit ad9850_w_clk =P1^5; //P2.2口接ad9850的w_clk脚/PIN7
sbit ad9850_fq_up =P1^4; //P2.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest =P1^3; //P2.0口接ad9850的rest脚/PIN12
sbit ad9850_bit_data =P1^6; //P1.7口接ad9850的D7脚/PIN25

//***************************************************//
// ad9850复位(串行模式) //
//---------------------------------------------------//
void ad9850_reset_serial()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
//w_clk信号
ad9850_w_clk=0;
ad9850_w_clk=1;
ad9850_w_clk=0;
//fq_up信号
ad9850_fq_up=0;
ad9850_fq_up=1;
ad9850_fq_up=0;
}

//***************************************************//
// 向ad9850中写命令与数据(串行) //
//---------------------------------------------------//
void ad9850_wr_serial(unsigned char w0,double frequence)
{
unsigned char i,w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w1数据
w=(y>>24);
for(i=0;i<8;i++)
{
ad9850_bit_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w0数据
w=w0;
for(i=0;i<8;i++)
{
ad9850_bit_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//***************************************************//
// 测试程序1000Hz //
//---------------------------------------------------//
main()
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
//---------------------------------------------------//
//---------------------------------------------------//

ad9850_reset_serial();
ad9850_wr_serial(0x08,100000000);//串行写2500Hz程序
//---------------------------------------------------//
while(1)
{
}
}

#include"reg52.h"
#define uchar unsigned char
sbit clk = P0^2;
sbit load = P0^3;
sbit dat = P0^4;

void init_dds(void)
{
clk=0;
load=0;
clk=1;
clk=0;
load=1;
load=0;
}

void write_dds(unsigned long dds)
{
uchar i;
load=0;
clk=0;
for(i=0;i<40;i++)
{
clk=0;
if(dds & 0x00000001)
dat=1;
else dat=0;
clk=1;
dds=dds>>1;
}
load=1;
clk=0;
load=0;
}

void write_freq(unsigned long freq)
{
unsigned long dds;
dds=34.35943*freq;
write_dds(dds);
}

void main()
{
init_dds();
write_freq(500000);
write_freq(500000);
while(1)
{
}

}


c51编程:求n个单字节无符号数xi的和,xi按i顺序存放在内部RAM从50H开始...
:MOV R3, #0 MOV R4, #0 MOV R0, #50H LOOP:MOV A, @R0 ADD A, R4 MOV R4, A JNC NO_C INC R3 NO_C:INC R0 DJNZ R2, LOOP SJMP END

单片机,c51汇编语言编写程序
SUBDATA: CLR C MOV A,41H SUBB A,43H MOV A,40H SUBB A,42H JC SUBD1 MOV 44H,40H MOV 45H,41H MOV 46H,42H MOV 47H,43H RETSUBD1: MOV 44H,42H MOV 45H,43H MOV 46H,40H MOV 47H,41H RET ...

编写c51程序,将片外2000H为首地址的连续10个单元的内容读入片内40H到...
什么是C51程序?汇编吧? 发个汇编你参考。ORG 0000H MOV DPTR,#2000H MOV R7,#10 MOV R0,#40H LOOP:MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 DJNZ R7,LOOP SJMP END

求个简单c51程序!感谢
if((MY_Buffer[0] ==0x7F)&&(MY_Buffer[1] == 0x00)){ \/\/---这里面写你要处理的函数 } } EA = 1;} 这样就可以了.不过,说实话,我这么改,是因为你就给了我这么点程序,所以我只能在你的程序上修改,而其实际,你应该加个接收超时判断比较好,为了防止传送数据的过程中意外的掉线,那样比...

编程,单片机C51编程
可根据用户在菜单中的选择项对测点进行某些设置,或者进行某些特殊的显示,例如对某个测点的实时曲线显示等。程序设计根据需求,首先建立一个结构,并定义一个结构变量kbdtabst ruct 。结构变量就是把多个不同类型的变量结合在一起形成的一个组合型变量,构成一个结构的各个变量称为结构元素。该结构中共有6...

C51汇编语言:编写程序将片内60H单元内的数据逆序排列送入61H单元。60H...
NSORT:MOV A,60H RR A MOV C,ACC.6 MOV ACC.6,ACC.0 MOV ACC.0,C MOV C,ACC.5 MOV ACC.5,ACC.1 MOV ACC.1,C MOV C,ACC.4 MOV ACC.4,ACC.2 MOV ACC.2,C MOV 61H,A RET

...70H号单元存入1,否则存入0。 用C51单片机编的 求高手
楼上的C语言没问题。汇编如下:MOV A,60H CJNE A,70H,JP0 MOV 70H,1 SJMP JP1 JP0:MOV 70H,0 JP1:SJMP

如何使用KeilC51创建一个工程文件
如何使用KeilC51创建一个工程文件 建立一个项目:点击工程菜单中选择弹出的下拉式菜单中的新建 工程...,接着弹出一个标准Windows文件对话窗口,在"文件名"中输入您的第一个程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的...

基于MCS-51单片机的精密温度控制系统的设计与实现
为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的...DS18B20是美国达拉斯半导体公司的产品,与其他产品相比较它的性能有如下特点:①采用单总线专用技术,既可...KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。

急!!请用汇编语言和C51分别完成将片内RAM 30H单元的内容存入片外RAM 3...
1、MOV A,30H MOV DPTR,#3000H MOVX @DPTR,A C:unsigned char xdata* ptr1; \/\/指向外部RAM的指针 unsigned char data* ptr2; \/\/指向内部RAM的指针 ptr1 = 0x3000;ptr2 = 0x30;ptr1 = *ptr2;2、SP=60h 60H+1+1-1-1=60H B=30H 栈是先进后出的 A=40H 栈是...

黔江区17287733175: 求个 51单片机AD ,C语言程序 -
洪胆蛇胆: #include<stc89.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; uchar led[]={0xFE,0xFD,0xFB,0xF7,0xEF,0...

黔江区17287733175: 求帮忙编一段 汇编语言,基于51单片机的密码锁,要求在下面.真心求帮忙啊 -
洪胆蛇胆: ;根据题目要求,本设计操作如下: ; ;1.初始状态数码管全显示0,然后按键盘输入4个数字,输入完成后按键盘的 ;“F”键,将输入的4为密码与原始密码1234比较,如果正确相同则P0.0口接的继电器 ;工作灯亮.如果错误不相同,则恢复初始状态全显示0. ;2.输入过程中,led会逐位'-',直到密码输入完成 ;3.密码正确以后,led显示open ;4.若要重新输入密码,按单片机复位键或者按键盘的“D”键即可重新输入原理图和代码详见附件. 原理图用proteus绘制,并仿真成功. 代码用汇编编写,keil u4下编译成功. 有问题请追问.

黔江区17287733175: 求基于MSC51单片机下的数字信号源的产生 -
洪胆蛇胆: 用DDS芯片 51只负责写控制字和人迹界面 DDS芯片 : AD9854 AD9852 你去下个datasheet 就知道怎么用了 用上面的典型电路就可以产生正弦或者方波了.精度很高!!! AD9854内带比较器直接输出方波.有很多方法这个比较简单.但dds芯片比较贵 100+ 你可以选ad系列比较便宜的 几十块吧

黔江区17287733175: 求高手帮做C51单片机编程
洪胆蛇胆: void main(void) { init_devices(); WDR(); b_n=1; b_s=2; b_v=1215; b_a=20; b_t=34; tims1=0; tims2=0; PORTA=0x00; ini_lcd(); cls_lcd(); disp_main(); disp_js(1); disp_zt(4); disp_dy(0); disp_dl(0); disp_wd(31); do{ WDR(); scan_key(); delay_ms(1); }...

黔江区17287733175: 基于51单片机的简易电压表 要求:1.基本的0~5伏电压测量 2.数据处理 求各位大神指导,需要什么元件?? -
洪胆蛇胆: 需要一块ad,和显示部分 过程是将0~5信号输入给单片机,然后单片机计算,显示如果你的开发板上没有ad和显示部分的话,建议你用adc0809 和数码管 这2个都是给初学者的希望可以帮到你,谢谢

黔江区17287733175: 急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序. 详细内容看补充. -
洪胆蛇胆: // 延时函数void Delay(){ int i = 0; for(i=0;i<100000;i++); // 空转}// 主函数void main(){ int...

黔江区17287733175: c51单片机中AD转换数值处理问题 二进制能否与十进制数字直接相乘得到十进制的数值??【51高手进】 -
洪胆蛇胆: voltage = 5.00*a /256;disdata = (uint)(voltage*1000); disdata%10,disdata/10%10,disdata/100%10,disdata/1000 这样就把数据分离了 我这是分离成四位 你改改分离成两位就行了

黔江区17287733175: 求帮写一个简单的单片机C语言程序 -
洪胆蛇胆: void main(void)//这个程序的前提是外部脉冲信号频率要低于单片机程序中的判定-判定的频率 { unsigned int i; i=0; while(1) { while(P1^4==0);//等待P1.4为1,否则不向下执行 i++; if (i==100) { P1^0=1; P1^1=0; Delay();//这里是你的延迟 i=0; } } }

黔江区17287733175: 大家好我是新手,想做个简单的C51程序:将单片机采集的数据通过串口发送至VB??哪位朋友能帮帮忙?谢谢! -
洪胆蛇胆: 如果你单片机的AD采集和串口发送程序都写好的话,只要采集完数据之后,就直接发送到串口,不用将数据保存在某地址再发送,51也存不了多少数据,内存小.整个过程就是采一组数就发一组数.

黔江区17287733175: 求一个基于AT89C51单片机制作的简单计算机的汇编语言 -
洪胆蛇胆: 软件自带汇编语言的计算器.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网