中科因仑“3+1”工程特种兵精英论坛

标题: 求ATT7022CU的读写程序 [打印本页]

作者: 张衍波    时间: 2015-10-15 08:16
标题: 求ATT7022CU的读写程序
PIC18F4520控制ATT7022CU,IO模拟SPI,现在7022的工作状态没有问题是正常的
    (复位后随意写7022里的一个寄存器,SIG信号变为高,另外11脚REFOUT电压2.33V,也正常)
    ABC输入端短接后加AC电(可调),在三个电压输入管脚测电压有65mv(随意加的),但读出全是0

   以下是程序:

#define Att7022cu_Cs          LATC0
#define Att7022cu_Rst         LATA6
#define Att7022cu_Sig         RA7
#define Att7022cu_Rf_Sclk           LATC3
#define Att7022cu_Rf_Data_Out   LATC5
#define Att7022cu_Rf_Data_In     RC4

unsigned long Read7022(unsigned char Addr)
{
        unsigned char i;
        unsigned long Out_Data=0;

        Addr &= 0x7f;//bit7=0:读命令,bit7=1:写命令
                           //bit6--0:地址
        Att7022cu_Cs=1;
        Att7022cu_Rf_Sclk=0;
        Att7022cu_Cs=0;delay();
        for(i=8; i>0; i--)
           {
                Att7022cu_Rf_Sclk=1;
                delay();
            if(Addr&0x80)
                {Att7022cu_Rf_Data_Out=1;}
            else
                {Att7022cu_Rf_Data_Out=0;}
            Att7022cu_Rf_Sclk=0;
            delay();
            Addr<<=1;
           }
        delay();//
        for(i=24; i>0; i--)
                {
             Att7022cu_Rf_Sclk=1;
             delay();
             Out_Data<<=1;
             Out_Data |= Att7022cu_Rf_Data_In;
             Att7022cu_Rf_Sclk=0;
             delay();

                }
        Att7022cu_Cs=1;
      //  Out_Data=0x12345678;  //等于此值在串口调试助手里能看到低8位的“78”值
        return Out_Data;//若直接返回就是全零了
}

void Write7022(unsigned char Addr, unsigned long Out_Data)
{
        unsigned char i;

                Addr=(Addr&0xbf)|0x80;   //bit7=0:读命令,bit7=1:写命令
        //即Addr=0b10 000000;        低6位为地址                                    

        Att7022cu_Cs=1;
        Att7022cu_Rf_Sclk=0;
        Att7022cu_Cs=0;

         for(i=8; i>0; i--)
           {Att7022cu_Rf_Sclk=1;
            if(Addr&0x80)
                {Att7022cu_Rf_Data_Out=1;}
                else
                 {Att7022cu_Rf_Data_Out=0;}
            Addr<<=1;
            Att7022cu_Rf_Sclk=0;
           }
        delay();
        for(i=24; i>0; i--)
           {Att7022cu_Rf_Sclk=1;
            if(Out_Data&0x80)
                {Att7022cu_Rf_Data_Out=1;}
                else
                 {Att7022cu_Rf_Data_Out=0;}
                Out_Data<<=1;
                Att7022cu_Rf_Sclk=0;
           }
        delay();
        Att7022cu_Cs=1;

}




void tx_data(void)
{   unsigned char i;
    txbuff[0]=Read7022(0x01);
    txbuff[1]=Read7022(0x0d);
    txbuff[2]=Read7022(0x0e);
    txbuff[3]=Read7022(0x0f);
    txbuff[4]=Read7022(0x28)
        txbuff[5]=Read7022(0x2d);
        txbuff[6]=Read7022(0x2e);
    txbuff[7] =Read7022(0x3c);
    txbuff[8]=Read7022(0x3d);
    EN485=1;delay();//发送状态     
        for(i=0;i<9;i++)
       {
                TXREG=txbuff;//发送
                while(!TRMT);//asm("nop");//delay();
                }         
        EN485=0;delay();//转为接收状态

}
转载






欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4