⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 包含了AD7714的中文使用资料和源码资料
💻 C
字号:
#include <math.h>
#include <regxag49.sfr>
#include <stdio.h>
#include <cxa.h>
#include <string.h>
#include "main.h"

#define ch3  P1_3

void delay10ms(unsigned char );
void feeddog(void);   
extern void ChannelInit(void);
extern void Ad7714Init(unsigned char); 
extern void ad7714(unsigned char);
extern void ad_xs(void);
extern _asmfunc void init_val(void);
extern unsigned char wrong_occ;
extern void TMP_IIC_Initial(void);
extern void TMP_Read_Temp(void);
extern void Cal_Make_Fact(void);
extern unsigned char TMP_ErrFlg;
extern unsigned char channel_otc[8];
extern unsigned char chn_error[8];
extern unsigned char chn_adover[8];
extern unsigned char chn_mv[8];
extern unsigned char adbuf_idex;
unsigned char IN_A(void);
unsigned char IN_B(void);
void SENT_CLK_UP(void);
void SENT_CLK_DOWN(void);
void SENT_ADDRESS(unsigned char);
void SENT_DATA(unsigned char,unsigned char);
unsigned char READ_DATA(void);
//_edata char testeep; 
char readeep; 
int  time1;
int time2;
//char time1_bit;
unsigned char addr_io;
_near unsigned char com_status[2] _at(0x270);
_near unsigned char com_active _at(0x285);
_near unsigned char com_configact _at(0x286);
_near unsigned char com_config[4] _at(0x278);
unsigned char ChlOtcActv[8];
#define MV100  		0X01
#define MV60  		0X02
#define MV25  		0X03
_rom unsigned char ConfigToMvTab[16]={MV100,MV100,MV100,MV100,MV25,MV25,MV25,MV25,MV60,MV60,MV100,MV100,MV100,MV100,MV100,MV100};
    /****************************************/
/* Periodic interrupt timer used to     */
/* generate 1/1000th interrupt           */
/****************************************/
//_interrupt(0x20) _using(0x8f00) void int0_isr(void){

//	unsigned char* b;
//	unsigned int a;
//	P1_2=1;
//	IEL &= 0X7F;
	
//	a=P1;
//       	b=(char*)a;
       	
//       	P2=*b;
//	b=b+1;
//	P2=*b;
	
//	IEL |= 0X80;
//}
/**************nm*******************/
_rom unsigned long LampErrCtlTab[]={
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x10                      
    0xc2000000,//0b1100 0010 0000 0000 0000 0000对应 ErrState=0x11                      
    0xc2800000,//0b1100 0010 1000 0000 0000 0000对应 ErrState=0x12                      
    0xc2a00000,//0b1100 0010 1010 0000 0000 0000对应 ErrState=0x13                      
    0xc2a80000,//0b1100 0010 1010 1000 0000 0000对应 ErrState=0x14                      
    0xc2aa0000,//0b1100 0010 1010 1010 0000 0000对应 ErrState=0x15                      
    0xc2aa8000,//0b1100 0010 1010 1010 1000 0000对应 ErrState=0x16                      
    0xc2aaa000,//0b1100 0010 1010 1010 1010 0000对应 ErrState=0x17                      
    0xc2aaa800,//0b1100 0010 1010 1010 1010 1000对应 ErrState=0x18                      
    0xc2aaaa00,//0b1100 0010 1010 1010 1010 1010对应 ErrState=0x19                    
    0xcaaaaa00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1a  //nop                      
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1b  //nop                       
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1c  //nop                      
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1d  //nop                      
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1e  //nop                      
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x1f  //nop                      
    0xffffff00,//0b1111 1111 1111 1111 1111 1111对应 ErrState=0x20  //nop                     
    0xcc200000,//0b1100 1100 0010 0000 0000 0000对应 ErrState=0x21                      
    0xcc280000,//0b1100 1100 0010 1000 0000 0000对应 ErrState=0x22                      
    0xcc2a0000,//0b1100 1100 0010 1010 0000 0000对应 ErrState=0x23                      
    0xcc2a8000,//0b1100 1100 0010 1010 1000 0000对应 ErrState=0x24                      
    0xcc2aa000,//0b1100 1100 0010 1010 1010 0000对应 ErrState=0x25                      
    0xcc2aa800,//0b1100 1100 0010 1010 1010 1000对应 ErrState=0x26                      
    0xcc2aaa00,//0b1100 1100 0010 1010 1010 1010对应 ErrState=0x27                      
};
#define ROM_err 0x22;
unsigned char ErrState;//0x10---0x28
                       //0x10 noerr
                       
                       //0x12 ad_over
                       //0x13 tc_over
                       //0x14 ad_err
                       //0x15 cold_err
                       
                       //0x21 RAM_err
                       //0x22 ROM_err
                       //0x23 FPGA_err

typedef struct {
    unsigned char adover :1;
    unsigned char ad7714 :1;
    unsigned char tcover :1;
    unsigned char tmp100 :1;
    unsigned char        :1;    
    unsigned char ram    :1;    
    unsigned char rom    :1;    
    unsigned char fpga   :1;    
}strErrFlg;
strErrFlg ErrFlg;
unsigned char LampComFlg=0x80;
void delay10ms(unsigned char j)
{
    unsigned int i;
    for(;j>=1;j--)
    {
        for(i=0;i<10000;i++)//10ms
        {
            _nop();//3c
            _nop();//3c
        }
    }
}
#define BIT_LAMPERR P3_7
void Cnt100msPro(void)
{
    static unsigned long LampErrCtl = 0xffffff00;
    static unsigned char LampErrCnt = 0;
    static unsigned char LampComCnt = 0;
    unsigned char tempu8;
    if(LampErrCnt==0)
    {
        tempu8 = ErrState;
        if(tempu8<0x10 || tempu8>=0x28) tempu8 = 0x10;
        tempu8-=0x10;
        LampErrCtl = LampErrCtlTab[tempu8];
    }
    if((LampErrCtl & 0x80000000)==0) BIT_LAMPERR = 1;
    else                             BIT_LAMPERR = 0;
    LampErrCtl<<=1;
    LampErrCnt++;
    if(LampErrCnt>=24) LampErrCnt=0;
    
    LampComCnt++;
    if(LampComCnt>=10)
    {
        LampComCnt = 0;
        if(com_active!=0) LampComFlg=0x80;
        else                   LampComFlg^=0x80;
        com_active = 0;//清中断服务程序标志为0
    }
    
    time1++;//ad校验
    time2++;//TMP100夺取
}
            
        
        
/****************************************/
/* Main function                        */
/****************************************/      
main()
{
	unsigned int a;
	unsigned char a1,temp_c,j;
	unsigned char  *p;
	PSWL = 0x0;
	PSWH = 0x80;
    delay10ms(10);//nm  100ms fpga_rest
/*nm
	     for (a1=0;a1<10;a1++)
	     {
	        for (a=0;a<64000;a++)
	        {
	            _nop();
	            _nop();
   	        }
	     }
*/	
	BCR = 0x16; //16 bit data ,16 bit address
	P0 = 0xff;
	P1 = 0xff;
	P2 = 0xff;
	P3 = 0xff;
	SCR=0x1;     // 0x9;	//0xd;	//tclk prescaler value is 64,page zero selected
	WDL=0x66;	//watchdog timer set 38	 ,500ms reset once
	WDCON=0xe0;     //prescaler value is 4096,
	WFEED1=0xa5;
	WFEED2=0x5a;
	TMOD=0x50;	//timer1 set as counter mode 1,timer0 set as timer mode 0 
	TL1=0;		//per value is 3.2um
	TH1=0;	
	TCON=1;
	 P0_0=1;
	P0_1=1;
	wrong_occ=0;
	ChannelInit();
	Ad7714Init(0);
    TMP_ErrFlg = 0;
    TMP_IIC_Initial();
    delay10ms(50);//nm  500ms for Ad7714Init & TMP_IIC_Initial
	
	time1=0;
	time2=0;
//	time1_bit=0;
	IPA0 = 0X03;	// ex0 interrupt level is 3
	IEL = 0x1;	// enable ex0
	WDRUN=0;
        //testeep=0xaa;
	CLR_SCLK;
	CLR_SIN;
	init_val();
	com_config[0] = 0xaa;
	com_config[1] = 0x00;
	com_config[2] = 0x00;
	com_config[3] = 0x00;
	com_active = 0;//intrupt init
	com_configact = 0;
	com_status[0] = 0x37;
	p = (unsigned char *)&ErrFlg;
	*p = 0;
	com_status[1] = 0;
	temp_c = 0x30;//bit7--4:0001=AI
	if(P3_4) temp_c |= 0x08;//  W._Flag=1?
	addr_io = IN_A();
	addr_io &= 0x03;
	addr_io ^= 0x03; 
	temp_c |= addr_io;
	com_status[0] = temp_c;
	Cal_Make_Fact(); //nm form Cal_Fact[4] & Cal_Ram_Zero[4]

	IEL |= 0X80;	// enable intrrupt
    while(1)
	{
	    j=0;
	    for(a1=0;a1<4;a1++)
	    {
	        temp_c = com_config[a1];
	        temp_c &= 0x0f;
	        chn_mv[j] = ConfigToMvTab[temp_c];
	        if(temp_c!=0) ChlOtcActv[j] = 0xff;
	        else ChlOtcActv[j] = 0x00;
	        j++;
	        temp_c = com_config[a1];
	        temp_c>>=4;
	        temp_c &= 0x0f;
	        chn_mv[j] = ConfigToMvTab[temp_c];
	        if(temp_c!=0) ChlOtcActv[j] = 0xff;
	        else ChlOtcActv[j] = 0x00;
	        j++;
	    }
	        
//struct {
//    unsigned char tcover :1;
//    unsigned char ad7714 :1;
//    unsigned char tmp100 :1;
//    unsigned char ram    :1;    
//    unsigned char rom    :1;    
//    unsigned char fpga   :1;    
//}ErrFlg;
//unsigned char ErrState;//0x10---0x28
                       //0x10 noerr
                       
                       //0x12 ad_over
                       //0x13 tc_over
                       //0x14 ad_err
                       //0x15 cold_err
                       
                       //0x21 RAM_err
                       //0x22 ROM_err
                       //0x23 FPGA_err
		if(ErrFlg.fpga == 1)     ErrState = 0x23;
		else if(ErrFlg.rom == 1) ErrState = 0x22;
		else if(ErrFlg.ram == 1) ErrState = 0x21;
		else if(ErrFlg.tmp100 == 1) ErrState = 0x15;
		else if(ErrFlg.ad7714 == 1) ErrState = 0x14;
		else if(ErrFlg.tcover == 1) ErrState = 0x13;
		else if(ErrFlg.adover == 1) ErrState = 0x12;
		else                        ErrState = 0x10;
		_nop();
		if (wrong_occ==0x00) feeddog(); 
 	    ChannelInit();
        temp_c = 0;
        for(a1=0;a1<8;a1++)
		{
	        temp_c |= (channel_otc[a1]&ChlOtcActv[a1]);
	        if(temp_c==0) ErrFlg.tcover = 0;
	        else          ErrFlg.tcover = 1;
	    }
        for(a1=0;a1<8;a1++)
		{
			ad7714(a1);
			if((a1 & 0x01)!=0) Cnt100msPro();
		}
        temp_c = 0;
        for(a1=0;a1<8;a1++)
		{
	        temp_c |= chn_error[a1];
	        if(temp_c==0) ErrFlg.ad7714 = 0;
	        else          ErrFlg.ad7714 = 1;
	    }
        temp_c = 0;
        for(a1=0;a1<8;a1++)
		{
	        temp_c |= chn_adover[a1];
	        if(temp_c==0) ErrFlg.adover = 0;
	        else          ErrFlg.adover = 1;
	    }
	    adbuf_idex++;
	    if(adbuf_idex>=3)adbuf_idex = 0;
//        delay10ms(1);
			for (a=0;a<3000;a++)
			{
				_nop();
				_nop();
			}
        
	    p = (unsigned char *)&ErrFlg;
	    com_status[1] = *p;
	    temp_c = 0x30;//bit7--4:0001=AI
	    if(P3_4) temp_c |= 0x08;//  W._Flag=1?
	    addr_io = IN_A();
	    addr_io &= 0x03;
	    addr_io ^= 0x03; 
	    temp_c |= addr_io;
	    if(com_configact!=0)temp_c &= 0xfb;
	    else                temp_c |= 0x04;
	    com_status[0] = temp_c;
	    
/*		temp_c = IN_A();
		addr_io=temp_c;
		addr_io=IN_B();
*/		
		//SENT_DATA(4,addr_io);

        if (time1>=6000)//30s
        {
            time1 = 0;
            Ad7714Init(0);
            delay10ms(10);//500ms
            Cnt100msPro();
            delay10ms(10);
            Cnt100msPro();
            delay10ms(10);
            Cnt100msPro();
            delay10ms(10);
            Cnt100msPro();
            delay10ms(10);
            Cnt100msPro();
        }
        if (time2>=30)//60s
        {
            time2 = 0;
            TMP_Read_Temp();
            if(TMP_ErrFlg==0)ErrFlg.tmp100 = 0;
            else             ErrFlg.tmp100 = 1;
        }
        
/*		//P0_0=0;
		//for (a1=0;a1<10;a1++)
		//{
			for (a=0;a<3000;a++)
			{
				_nop();
				_nop();
			}
		//}

		if(time1_bit==0)
		{
			if (time1<300)
				time1++;
			else
			{
				time1_bit=1;
				time1=0;
				Ad7714Init(0);
			}
		}
		if (time2<600) time2++;
		else
		{
		    time2=0;
		    TMP_Read_Temp();
		}
*/
	}
}
void feeddog() 
{
	_bit save_ea;
	
	save_ea = EA;
	EA = 0;
	WFEED1 = 0xa5;
	WFEED2 = 0x5a;
	EA = save_ea;
}      


unsigned char IN_A(void)
{
	unsigned char data;
	CLR_SENDS;
	SENT_ADDRESS(0);
	SET_SENDS;
	_nop();
	_nop();
	CLR_REVS;
	data=READ_DATA();
	SET_REVS;
	return data;
}
unsigned char IN_B(void)
{
	unsigned char data;
	CLR_SENDS;
	SENT_ADDRESS(1);
	SET_SENDS;
	_nop();
	_nop();
	CLR_REVS;
	data=READ_DATA();
	SET_REVS;
	return data;
}
void SENT_CLK_UP(void)
{
	SET_SCLK;
}
void SENT_CLK_DOWN(void)
{
	CLR_SCLK;
}
void SENT_ADDRESS(unsigned char addr)
{
	unsigned char a,data;
	//CLR_SENDS;
	data=addr;
	for(a=0;a<4;a++)
	{
	      data=_rorc8(data,1);
	      P2_4=C;
	      SENT_CLK_UP();
	      SENT_CLK_DOWN();	
	}
	//SET_SENDS;
}
void SENT_DATA(unsigned char addr,unsigned char dat)
{
	unsigned char a,data;
	CLR_SENDS;
	data=dat;
	for(a=0;a<8;a++)
	{
	      data=_rorc8(data,1);
	      P2_4=C;
	      SENT_CLK_UP();
	      SENT_CLK_DOWN();	
	}
	data=addr;
	SENT_ADDRESS(data);
	SET_SENDS;
}
unsigned char READ_DATA(void)
{
	unsigned char a,data;
	//CLR_SENDS;
	data=0;
	for(a=0;a<8;a++)
	{
	      SENT_CLK_UP();
	      SENT_CLK_DOWN();
	      C = G49_IN;	
	      data=_rorc8(data,1);
	}
	return data;//SET_SENDS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -