|
問題描述:按照賣家提供的51單片機程序基礎上,把程序移植到自己的51單片機上,寫數據方式也是根據AD9851模塊的工作時序圖來寫的,但是問題來了:現在不論是我怎樣修改頻率,出來的波形都不是標準正弦波,而且頻率在示波器上一直顯示50hz不變,四個通道都是一樣(如附圖1)昨天晚上我想了一下,懷疑是數據沒有寫進去,但是本人還不會看數據有沒有寫進去(只會簡單使用debug,但是用debug好像也沒啥用,編譯環境用的keil5)。求助問題:1、請問各位大神知道為什么會出現這種情況?除了是數據沒寫進去之外,還有其他可能問題嗎?(模塊硬件應該沒問題)
2、請問怎么看我的數據有沒有寫進去?
現將代碼貼至如下:
# 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復位(并口模式) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信號
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
//***************************************************//
// 向ad9850中寫命令與數據(并口) //
//---------------------------------------------------//
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數據
w=w0;
P0=w; //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w1數據
w=(y>>24);
P0=w; //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w2數據
w=(y>>16);
P0=w; //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w3數據
w=(y>>8);
P0=w; //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//寫w4數據
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);
//---------------------------------------------------//
}
|
|