📄 driverlib.c
字号:
/*驱动外围器件的函数库*//////////////////////////////////
#include "iom128v.h"
#include "eeprom.h"
#include "bitdef.h"
#include "global.h"
extern BYTE ee_config[3]; //配置寄存器
extern BYTE ee_csr[2][3]; //通道设置寄存器
extern BYTE ee_ad_gain[3]; //AD增益
extern BYTE ee_ad_zero[4][3]; //通道零点
void dlay(void)
{
U8 k;
SCLK=0;//sclk=0
for(k=0;k<8;k++)
SCLK=1; //sclk=1
SCLK=0;//sclk=0跳变
}
//写CS5523子程序,写入num+1个字节
void wrad(U8 num)
{
U8 i,j;
BYTE k;
// PORTF&=0xf7;//sclk=0
// PORTF&=0xfe;//cs1=0
for(i=0;i<=num;i++)
{
k=data[i];
for(j=0;j<8;j++)
{
if((k & 0x80)==0x80)
SDI=1;//sdi=1
else
SDI=0;//sdi=0
dlay();
k<<=1;
}
}
// PORTF|=0x01;//cs1=1
}
//读CS5523子程序,读num+1个字节
void rdad(U8 num)
{
U8 i,j;
BYTE k;
// PORTF&=0xf7;//sclk=0
// PORTF&=0xfe;//cs1=0
for(i=0;i<=num;i++)
{
k=0;
for(j=0;j<8;j++)
{
/*
if(SDO)//data=1
k|=bit_1[j]; //k|=(1<<j);
else
k&=bit_0[j]; //k&=(~(1<<j));
*/
k<<=1;
k+=SDO;
dlay();
}
data[i]=k;
}
// PORTF|=0x01;//cs1=1
}
//初始化CS5523
void initial_ad(void)
{
U8 i;
//初始化串口,初始化序列后,串行口为命令模式
SCLK=0;//sclk=0
data[0]=0xff;
for(i=0;i<15;i++) wrad(0);
data[0]=0xfe;wrad(0);
/////////////////////
//写配置寄存器置RS位,使复位,复位后RV=1,直到配置寄存器被读取后,RV=0
data[0]=0x03;// comm=03h* write config_reg
data[1]=0x04; // config=00h,35h,80h
data[2]=0x35;
data[3]=0x80;
wrad(3);//cy_flag=0;
//读配置寄存器
loop:
data[0]=0x0b;// comm=0bh* read config_reg
wrad(0);
rdad(2);
if ((data[2]& 0x40)==0x00) goto loop;//测RV=1,如不为1,则要再读配置寄存器
//写配置寄存器清RS位,写RS=0以便退出复位模式
data[0]=0x03;// comm=03h* write config_reg
data[1]=0x00; // config=00h,35h,00h
data[2]=0x35;
data[3]=0x00;
wrad(3);
//////////////////////////
//写配置寄存器,必须重新写一次配置寄存器以便设置配置寄存器的其它位
data[0]=0x03;// comm=03h* write config_reg
data[1]=0x04; // config=04h,35h,00h
data[2]=0x35;
data[3]=0x00;
wrad(3);
/*
EEPROM_READ((int)&ee_config[0],data[1]);
EEPROM_READ((int)&ee_config[1],data[2]);
EEPROM_READ((int)&ee_config[2],data[3]);
wrad(3);
*/
//写通道寄存器
//comm=5,write csr1,csr2,csr3,csr4
//csr1(0)=01h;csr1(1)=80h;csr1(2)=98h; 5V/30hz
//csr1(0)=00h;csr1(1)=80h;csr1(2)=88h; 5V/15hz
//csr1(0)=00h;csr1(1)=60h;csr1(2)=86h; 1V/15hz
//csr1(0)=00h;csr1(1)=20h;csr1(2)=82h; 55mV/15hz
//csr1(0)=00h;csr1(1)=40h;csr1(2)=84h; 25mV/15hz
//csr1(0)=06h;csr1(1)=40h;csr1(2)=e4h; 25mV/3.76hz
//csr1(0)=00h;csr1(1)=70h;csr1(2)=87h; 1V/15hz单记性
data[6] =0x96;//85;
data[5] =0x61;//51;
data[4] =0x11;//10;
data[3] =0x96;//85;
data[2] =0x60;//50;
data[1] =0x01;//00;
data[0]=0x05;
//csr1(0)=11h;csr1(1)=81h;csr1(2)=98h; 5V/30hz
//csr1(0)=01h;csr1(1)=81h;csr1(2)=88h; 5V/15hz
//csr2(0)=10h;csr2(1)=61h;csr2(2)=86h; //1V/15hz
//csr1(0)=10h;csr1(1)=01h;csr1(2)=80h; 100mV/15hz
//csr1(0)=10h;csr1(1)=41h;csr1(2)=84h; 25mV/15hz
//csr1(0)=16h;csr1(1)=41h;csr1(2)=e4h; 25mV/3.76hz
//csr1(0)=01h;csr1(1)=71h;csr1(2)=87h; 1V/15hz单记性
wrad(6);
//写配置寄存器,必须重新写一次配置寄存器以便设置配置寄存器的其它位
data[0]=0x03;// comm=03h* write config_reg
data[1]=0x04; // config=04h,25h,00h
data[2]=0x35;
data[3]=0x00;
wrad(3);
/*
EEPROM_READ((int)&ee_csr[0][0],data[1]);
EEPROM_READ((int)&ee_csr[0][1],data[2]);
EEPROM_READ((int)&ee_csr[0][2],data[3]);
EEPROM_READ((int)&ee_csr[1][0],data[4]);
EEPROM_READ((int)&ee_csr[1][1],data[5]);
EEPROM_READ((int)&ee_csr[1][2],data[6]);
data[0]=0x05;
wrad(6);
*/
/////////////////////////////////////////////////////**************************
/////////////////////////////////////////////////////**************************
//写零点 //load offset reg of channel 0~3
for(i=0;i<4;i++)
{
data[0]=z_add[i];
//td=i*3;//读出EEPROM通道零点
data[1]=0;//EEPROMread(td);
data[2]=0;//EEPROMread(td+1);
data[3]=0;//EEPROMread(td+2);
wrad(3);
/*
EEPROM_READ((int)&ee_ad_zero[i][0],data[1]);
EEPROM_READ((int)&ee_ad_zero[i][1],data[2]);
EEPROM_READ((int)&ee_ad_zero[i][2],data[3]);
wrad(3);
*/
}
//写增益 //load offset reg of channel 0~3
for(i=0;i<4;i++)
{
data[0]=m_add[i];
data[1]=64;//EEPROMread(buf_num);
data[2]=0x00;
data[3]=0x00;
wrad(3);
/*
EEPROM_READ((int)&ee_ad_gain[0],data[1]);
EEPROM_READ((int)&ee_ad_gain[1],data[2]);
EEPROM_READ((int)&ee_ad_gain[2],data[3]);
wrad(3);
*/
}
// PORTF|=0x01;//cs1=1
data[0]=0;
SCLK=0;wrad(0);
data[0]=0x80;
SCLK=0;wrad(0);
}
/*获取键值*///////////////////////////////////////////////////////
/*无按键或多键按下时返回值为0,否则KEY1~KEY4对应1~4*/
BYTE get_key()
{
BYTE i,key_code;
key_code=PINE;
key_code>>=4;
key_code &= 0x0F;
for(i=0;i<=4;i++)
{
if(key_code==key_map[i]) return i;
}
return 0;
}
/*点亮第i个LED*///////////////////////////////////////////////////
void light_led(BYTE i)
{
switch(i)
{
case 0:
PF.B0=1;
break;
case 1:
PF.B0=1;
break;
case 2:
PF.B0=1;
break;
case 3:
PF.B0=1;
break;
case 4:
PF.B0=1;
break;
case 5:
PF.B0=1;
break;
case 6:
PF.B0=1;
break;
case 7:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -