|
一、程序
(一)
#define OSC_FREQ (11059200UL)//振荡器频率(Hz)
#define OSC_PER_INST (12) //每个指令的振荡周期数
//数据类型
#define tByte unsigned char
#define tWord unsigned int
#define tLong unsigned long
//杂项
#define FALSE 0
#define TRUE (!FALSE)
#define RETURN_NORMAL (bit) 0
#define RETURN_ERROR (bit) 1
//中断索引
//通用8051定时器中断(用于大多数调度器)
#define INTERRUPT_Timer_0_Overflow 1
#define INTERRUPT_Timer_1_Overflow 3
#define INTERRUPT_Timer_2_Overflow 5
//其他中断
#define INTERRUPT_UART 4
(二)
- #include "main.h"
#include
- sbit FSYNC=P1^2;
- sbit SCLK=P1^1;
- sbit SDATA=P1^0;
- tWord Config_Data[8];
void Wave_Generate(tLong,tByte);
void main(void) - {
- FSYNC=1;
- SCLK=0;
- Wave_Generate(1000000,0);
while(1) ; - }
//向ad9833写一命令字(2Bytes)
void AD9833_Send_Word(tWord Data_In) - {
- tByte i;
- tByte j;
- SCLK=1;
- FSYNC=0;
for(i=0;i<16;i++) - {
- SCLK=1;
- SDATA=(bit)((Data_In & 0x8000)>>15);
- j=0x01;
while(j--); - SCLK=0;
- Data_In=Data_In<<1;
- j=0x01;
while(j--); - }
- FSYNC=1;
- SCLK=0;
- }
//波形发生函数
//入口参数: 频率:Freq (<=12000000)
// 形状:0(正弦波),1(三角波),2(方波)
//默认: Fmclk=25MHz, 0相移,方波不分频.
void Wave_Generate(tLong Freq,tByte Shape) - {
- tLong temp;
- tByte k;
if(Freq>12000000) Freq=12000000;
switch(Shape) - {
case 0: Config_Data[0]=0x2108; - Config_Data[7]=0x2008;
break;
case 1: Config_Data[0]=0x210A; - Config_Data[7]=0x200A;
break;
case 2: Config_Data[0]=0x2128; - Config_Data[7]=0x2028;
break;
default:Config_Data[0]=0x2108; - Config_Data[7]=0x2008;
- }
- temp=Freq*13.4217728; //temp=Freq*(0x10000000/20000000);
- Config_Data[1]=temp&0x00003fff;
- Config_Data[3]=Config_Data[1];
- Config_Data[2]=(temp&0x0fffc000)>>14;
- Config_Data[4]=Config_Data[2];
- Config_Data[1]=Config_Data[1]|0x4000;
- Config_Data[2]=Config_Data[2]|0x4000;
- Config_Data[3]=Config_Data[3]|0x8000;
- Config_Data[4]=Config_Data[4]|0x8000;
- Config_Data[5]=0xC000;
- Config_Data[6]=0xE000;
for(k=0;k<8;k++) - {
- AD9833_Send_Word(Config_Data[k]);
- }
- }
|
|