|
問題描述:按照賣家提供的51單片機(jī)程序基礎(chǔ)上,把程序移植到自己的51單片機(jī)上,寫數(shù)據(jù)方式也是根據(jù)AD9851模塊的工作時序圖來寫的,但是問題來了:現(xiàn)在不論是我怎樣修改頻率,出來的波形都不是標(biāo)準(zhǔn)正弦波,而且頻率在示波器上一直顯示50hz不變,四個通道都是一樣(如附圖1)昨天晚上我想了一下,懷疑是數(shù)據(jù)沒有寫進(jìn)去,但是本人還不會看數(shù)據(jù)有沒有寫進(jìn)去(只會簡單使用debug,但是用debug好像也沒啥用,編譯環(huán)境用的keil5)。求助問題:1、請問各位大神知道為什么會出現(xiàn)這種情況?除了是數(shù)據(jù)沒寫進(jìn)去之外,還有其他可能問題嗎?(模塊硬件應(yīng)該沒問題)
2、請問怎么看我的數(shù)據(jù)有沒有寫進(jìn)去?
現(xiàn)將代碼貼至如下:
# include <reg51.h>
# include <stdio.h>
# include <intrins.h>
sbit ad9850_w_clk =P1^4;
sbit ad9850_fq_up =P1^3;
sbit ad9850_rest =P1^2;
//***************************************************//
// ad9850復(fù)位(并口模式) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信號
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
//***************************************************//
// 向ad9850中寫命令與數(shù)據(jù)(并口) //
//---------------------------------------------------//
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//計算頻率的HEX值
x=4294967295/156.25;//適合125M晶振
//如果時鐘頻率不為125MHZ,修改該處的頻率值,單位MHz 。。
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//寫w0數(shù)據(jù)
w=w0;
P0=w; //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w1數(shù)據(jù)
w=(y>>24);
P0=w; //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w2數(shù)據(jù)
w=(y>>16);
P0=w; //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w3數(shù)據(jù)
w=(y>>8);
P0=w; //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w4數(shù)據(jù)
w=(y>>=0);
P0=w; //w4
ad9850_w_clk=1;
ad9850_w_clk=0;
//移入始能
ad9850_fq_up=1;
ad9850_fq_up=0;
}
//***************************************************//
// 測試程序1000Hz //
//---------------------------------------------------//
void main()
{
//---------------------------------------------------//
//并行寫5000Hz程序
ad9850_reset();
ad9850_wr_parrel(0x00,15000000);
//---------------------------------------------------//
}
|
|