www.pudn.com > AD9851_signal_generator.rar > kenshin.c, change:2007-05-06,size:2557b


#include <reg51.h> 
#define uchar unsigned char 
#define uint unsigned int 
sbit fud=P2^1;           //加载AD9851的外部寄存器到内部寄存器的操作引脚 
sbit clk=P2^0;           //读取并口上的数据到外部寄存器的操作引脚 
sbit res=P2^2;           //AD9851的重启引脚 
sbit max=P2^3;           //MAX485的半双工控制引脚 
 
 
uchar W[5];              //AD9851控制字存储叔祖 
uchar temp;              //临时变量 
uchar p;                  
uchar i; 
 
 
void TransData(void)     //数据传输函数 
{   
    max=1;               //将MAX485工作方式设定为发送 
    SBUF='R';            //向PC机发送R,表示数据接收完全 
    while(!TI);          //等待发送完毕 
    TI=0;                //清除发送中断标志 
    max=0;               //将MAX485工作方式设定为发接收 
    for(i=0;i<5;i++)     //传数据 
    { 
        P1=W[i];         //P1口引脚输出等于W[i] 
        clk=1;           //W_CLK上升沿将AD9851并口上的数据读进内部寄存器 
	clk=0; 
    } 
    fud=1;               //5个控制字发送完后,在FQ_UD上升沿将数据加载 
    fud=0;               //到内部寄存器,并改变输出 
} 
 
void Init_serial()       //初始化串口函数 
{ 
   TMOD=0x20;            //定时器1置为方式2 
   TL1=0xfd;             //装载定时器初值,设置波特率为9600 
   TH1=0xfd; 
   SCON=0x50;            //设定串口工作方式1 
   PCON=0x00;            //不使用波特率倍增 
   TR1=1;                //启动定时器 
   EA=1;                 //开总中断 
   ES=1;                 //开串行口中断 
   max=0;                //MAX485工作方式设定为读 
} 
 
void main()              //main函数 
{ 
  clk=0;                 //初始化 
  fud=0; 
  res=1;                 //RESET AD9851 
  res=0; 
  Init_serial();         //调用串口初始化函数 
  W[0]=0x01;             //启用AD9851的6倍频功能 
  p=1; 
  while(1);              //等待中断 
     
} 
  
void Serial_RI(void) interrupt 4  using 3  //中断程序 
{ 
   ES=0;                 //关串行口中断 
   if(RI==1)             //如果是接收中断,执行下面函数 
   { 
      RI=0;              //清除中断标志位 
      temp=SBUF;         //读取接收寄存器 
      W[p]=temp;         //设定控制字 
      max=1;             //MAX485设定为发送 
      SBUF=temp;         //将接收到的字节再发送回PC,检验是否接收正确 
      while(!TI);        //等待发送完毕 
      TI=0;              //清除发送中断标志 
      max=0;             //MAX485设定为接收 
      p++;               //p自加 
      if(p==5)           //当p=5时,表示接收完成,向AD9851发送数据 
      {   
         TransData();    //调用数据发送函数 
	 p=1;            //将P重新设定为1 
      } 
   }    
   ES=1;                 //开串行口中断 
}