?? main.c
字號(hào):
#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對(duì)應(yīng) ErrState=0x10
0xc2000000,//0b1100 0010 0000 0000 0000 0000對(duì)應(yīng) ErrState=0x11
0xc2800000,//0b1100 0010 1000 0000 0000 0000對(duì)應(yīng) ErrState=0x12
0xc2a00000,//0b1100 0010 1010 0000 0000 0000對(duì)應(yīng) ErrState=0x13
0xc2a80000,//0b1100 0010 1010 1000 0000 0000對(duì)應(yīng) ErrState=0x14
0xc2aa0000,//0b1100 0010 1010 1010 0000 0000對(duì)應(yīng) ErrState=0x15
0xc2aa8000,//0b1100 0010 1010 1010 1000 0000對(duì)應(yīng) ErrState=0x16
0xc2aaa000,//0b1100 0010 1010 1010 1010 0000對(duì)應(yīng) ErrState=0x17
0xc2aaa800,//0b1100 0010 1010 1010 1010 1000對(duì)應(yīng) ErrState=0x18
0xc2aaaa00,//0b1100 0010 1010 1010 1010 1010對(duì)應(yīng) ErrState=0x19
0xcaaaaa00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1a //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1b //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1c //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1d //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1e //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x1f //nop
0xffffff00,//0b1111 1111 1111 1111 1111 1111對(duì)應(yīng) ErrState=0x20 //nop
0xcc200000,//0b1100 1100 0010 0000 0000 0000對(duì)應(yīng) ErrState=0x21
0xcc280000,//0b1100 1100 0010 1000 0000 0000對(duì)應(yīng) ErrState=0x22
0xcc2a0000,//0b1100 1100 0010 1010 0000 0000對(duì)應(yīng) ErrState=0x23
0xcc2a8000,//0b1100 1100 0010 1010 1000 0000對(duì)應(yīng) ErrState=0x24
0xcc2aa000,//0b1100 1100 0010 1010 1010 0000對(duì)應(yīng) ErrState=0x25
0xcc2aa800,//0b1100 1100 0010 1010 1010 1000對(duì)應(yīng) ErrState=0x26
0xcc2aaa00,//0b1100 1100 0010 1010 1010 1010對(duì)應(yīng) 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;//清中斷服務(wù)程序標(biāo)志為0
}
time1++;//ad校驗(yàn)
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -