攀枝花学院本科毕业设计(论文) 4 软件设计方案
4 软件设计
4.1 程序流程图
本设计的软件部分主要完成系统的初始化内部数据计算,数据线显示输出等
功能。如图4.1所示是其主程序流程图和中断服务程序流程图。
开始对液晶,定时器初始化A/D转换数据转换档位按键判断Y平均电压值显示五秒的N三秒后清屏显示瞬时的电压值 图4.1 程序流程图
在启动CS5460A之前,必须先对它复位,只要对他的复位脚发复位脉冲,脉宽不少于10ms即可。对CS5460A写OXE8控制命令,即开始进行AD转换,并输出计算结果,这个命令一般在复位操作完成后输入,使其进入正常工作状态。在校准前必须使CS5460A处于活动状态,同时准备接收有效命令,并清除状态寄存器的DRDY位。有事串口与SCK会不同步,这时可向串口发初始化序列,包括至少3个时钟周期的STNC1命令字0XFF,以及紧跟着一个时钟周期的SYNC0命令字0XFE,这样才能使CS5460A能够正确的解释输入的命令字。
CS5460A,每次复位时会将偏移寄存器清0和增益寄存器置1,将校准得到的偏移寄存器值、增益寄存器值保存在EEPROM,初始化时再将这些值重新装入对应的寄存器中。
21
攀枝花学院本科毕业设计(论文) 4 软件设计方案
4.2 子程序设计
4.2.1 CS5460A端口初始化程序
void InitPort(void) {
DDRB |= _BV(1)+_BV(3)+_BV(5); PORTB &= ~_BV(4); DDRB &= ~_BV(4); }
4.2.2 CS5460A SPI读写程序
void Write_CS5460A(u08 *ptr,u08 n) {
s08 i=0,j=0; SCLK_L(); EN_CS();
for(j=n;j>=1;j--) {
for(i=7;i>=0;i--) {
SCLK_L();
if( ((*ptr)&(1<
if(j==0) UN_CS(); }
void Read_CS5460A(u08 reg,u08 *ptr) {
22
攀枝花学院本科毕业设计(论文) 4 软件设计方案 s08 i,j; EN_CS(); *ptr=reg;
Write_CS5460A(ptr,1); ptr++; SDI_H();
for(i=3;i>0;i--) {
for(j=7;j>=0;j--) {
            SCLK_L();              _delay_us(5);              if(SDO == 1)                  *ptr |= (1<                 *ptr &= ~(1< void Clear_DRDY(void)   {        buf[0]=0x5e;       buf[1]=0xff;       buf[2]=0xff;       buf[3]=0xff;      23     攀枝花学院本科毕业设计(论文)                                   4  软件设计方案     Write_CS5460A(buf,4);    }   void Wait_DRDY_High(void)   {         while(1)       {             Read_CS5460A(0x1e,buf);              if( (buf[1]&0x80) != 0 ) break;         }   }    4.2.3 CS5460A初始化程序  void Init5460(void)  {       _delay_ms(5);             buf[0]=0xff;            //SYNC1       buf[1]=0xff;            //SYNC1       buf[2]=0xff;            //SYNC1       buf[3]=0xfe;            //SYNC0       Write_CS5460A(buf,4);        buf[0]=0x40;                buf[1]=0x00;            //GI=1        buf[2]=0x10;                 buf[3]=0x61;            //DCLK=MCLK/1,高通           Write_CS5460A(buf,4);   //写配置寄存器          buf[0]=WRITE|0x20;               buf[1]=0x3D;                buf[2]=0xC2;        buf[3]=0x5C;                  Write_CS5460A(buf,4);   //电流 交流偏置 校准寄存器      buf[0]=WRITE|0x22;               buf[1]=0x1F;              buf[2]=0xBB;        buf[3]=0x65;                      Write_CS5460A(buf,4);   //电压 交流偏置 校准寄存器     24