📄 cs5512.c~
字号:
#include <config.h>
void Timer0_init(void)
{
TCCR0 = 0x00;//停止定时器
TCNT0 = 0x00;//初始值
OCR0 = 0x06;//匹配值
TIMSK |= 0x02;//中断允许
TCCR0 = 0x0a;//CTC , 8分频
}
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
CS5512_SCLK = ~CS5512_SCLK;
}
unsigned int AD_temp_buffer;
void delay_nop(void)
{
// #asm("nop")
// #asm("nop")
// #asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
}
void CS5512_Read(void)
{
bit sdata;
unsigned char Front4bit=0;
unsigned int Back16bit=0; //32位long int
unsigned char Front4flag=0; //前四位暂存变量
unsigned char i;
CS5512_CS=0;
while(CS5512_SDO);
{
#asm("cli") //禁全止局中断
CS5512_SCLK=0;
for(i=0;i<4;i++)
{
CS5512_SCLK=1;
delay_nop();
sdata=CS5512_SDO;
Front4flag|=(sdata<<(3-i));
CS5512_SCLK=0;
delay_nop();
}
if((Front4flag&0xff)==0) //为真,则执行后面的转换程序
//if(!Front4Temp)
{ //else AD_temp_buffer=Old_AD;(上次AD转换滤波结果)
for(i=0;i<20;i++)
{
CS5512_SCLK=1;
delay_nop();
sdata=CS5512_SDO;
// if(i<12) Written_char(0,i,(unsigned char)sdata);
// else Written_char(1,i-12,(unsigned char)sdata);
if(i<4) Front4bit|=sdata<<(3-i);
else Back16bit|=sdata<<(19-i);
// Data_temp|=sdata<<(19-i);
CS5512_SCLK=0;
delay_nop();
}
switch(Front4bit)
{
case 0:{AD_temp_buffer=Back16bit/10;break;}
case 1:{AD_temp_buffer=(Back16bit+65536)/10;break;}
case 2:{AD_temp_buffer=(Back16bit+131072)/10;break;}
case 3:{AD_temp_buffer=(Back16bit+196608)/10;break;}
case 4:{AD_temp_buffer=(Back16bit+262144)/10;break;}
case 5:{AD_temp_buffer=(Back16bit+327680)/10;break;}
case 6:{AD_temp_buffer=(Back16bit+393216)/10;break;}
case 7:{AD_temp_buffer=(Back16bit+458752)/10;break;}
default :{ }
}
Display_AD(AD_temp_buffer);
}
}
CS5512_CS=1;
#asm("sei")
}
void main(void)
{
Tone(200); //开机报警
#asm("cli")
Port_Init(); //端口初始化
Timer0_init(); //定时器0初始化
// Timer2_init(); //定时器2初始化
Lcd_inint(); //lcd初始化(包含了清屏功能)
#asm("sei")
CS5512_CS=0;
while(1)
{
CS5512_Read();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -