微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机控制ADN2850的阻值

51单片机控制ADN2850的阻值

时间:10-02 整理:3721RD 点击:
    ADN2850为一个数字电位器,我用STC89C52来控制,用串口发送它的阻值,我编写了一个C语言的程序,可是无法起到改变阻值的作用。下面是我自己写的程序,只写了发送数据控制1的阻值发生变化,可是无论串口发送何值,W1引脚和B1引脚间的电阻都不发生变化,求大神指点迷津,万分感谢!

//以十六进制的形式输入2850的电阻值
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define ulint unsigned long int
#define uchar unsigned char
sbit cs=P1^4; // 将p1.4口模拟片选
sbit sclk=P1^5;// 将p1.5口模拟时钟输出
sbit sdo=P1^7;// 将p1.7口模拟主机输出
sbit tec_en=P2^5;
sbit sdi=P2^6;// 将p2.6口模拟主机输入
ulint b,c,d,h;
uchar e;
uchar buffer[2];
/**********简单的延时函数***************/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
/**********adn2850初始化函数***************/
void adn_init()
{
        sclk=0;
        sdi=1;
        sdo=1;
}
/**********串口发送数据函数***************/
char comsenf()
{
        uint a;
        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
        TL1=0xfd;//给T1赋初值
        TR1=1;//打开定时器1
        REN=1;//启动串行口接受数据
        SM0=0;
        SM1=1;//设定串行口为工作方式1
    EA=1;
    ES=1;
        if(RI==1)//判断是否接受到停止位
        {
                a++;
                for(a=0;a<2;a++)
                {
                        RI=0;//取消接受中断申请
                           buffer[a]=SBUF;
                }
            return buffer[a];
        }
}
/**********从机接收数据函数************/
void spi_write(ulint dat)//上升沿输入sdi,下降沿输出sdo
{
        uchar i;
        adn_init();
        while(cs==0)        //检测是否有数据的传输
        {
                for(i=0;i<24;i++)          // 循环24次
            {
                     sdi=(dat&0x800000); // dat最高位输出到sdi
                      dat<<=1;     // 低一位移位到最高位
                            sclk=1;//上升沿写入数据
                        delay(5);   //等待数据的稳定                            
                     sclk=0;  // sclk置低
                         delay(5);
            }
                          
        }
}
/***********主程序**************/
void main()
{
        tec_en=1;
        cs=0;
        comsenf();
        b=0xb0;//将数据写入RDAC1
        c=(b<<14)|buffer[0];//将b作高8位和buffer[0]作低8位合成22位
        e=buffer[1]<<6;//将buffer[1]的低2位移到高2位
        d=(c<<8)|e;//将c作高22位和buffer[1]作低2位合成24位
        h=d<<2;//将合成的24位放于32位的前24位
        spi_write(h);
        spi_write(0x200000);// 将RDAC1寄存器数据存储到EEMEM1中。
}



已退回2积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top