攀枝花学院本科毕业设计(论文) 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