⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kenshin.c

📁 用C编写的信号发生器的单片机程序,主要功能是能够接收计算机串口发送的消息,然后根据发送过来的数据来修改信号发生器的输出频率和相位
💻 C
字号:
#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;                 //开串行口中断
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -