www.pudn.com > DDS485.rar > main.c
#include#include #include #include //-----***-主程序-***-----// void main(void) { //unsigned char j; Delay(5000); InitCpu(); WDT(); EX1=1;//脉冲采集中断打开 TH1=0xA0; TL1=0xA0; TR1=0;//启动1定时器 ET1=1;//打开定时器1中断 TH0=0x00; TL0=0x00; TR0=1;//启动0定时器 ET0=1;//打开定时器0中断 ES=1; EA=1; //总中断打开 time0fg=0; LedFull(); //InceptBuf[0]=0xff; while(1) { if(PowerDown) { WDT(); if(HwRxd==0) { Delay(5); if(HwRxd==0) { infrarereceive(); TR1=0; InfSendFg=1; } } if(CmdParseFg) { CmdParse(); } if(EDatafg) { EDatafg=0; inpulse++; if(inpulse>=3) { inpulse=0; PulseAdd(); LedFull(); //iicEData[0]=HexToBcd(EData[0]); //wbyteiic(0xa0,0x00,iicEData[0]); //wbyteiic(0xa0,0x04,inpulse); } } if(!RST&&cmdwr==0) { Delay(2000); if(!RST) { cmdwr=1; } } else { if(RST) { cmdwr=0; } } } else { WDT(); if(EleChFg==0xaa)//------------------>如果电量更改过,掉电存储数据 { EleChFg=0x00; iicEData[0]=HexToBcd(EData[0]); wbyteiic(0xa0,0x00,iicEData[0]); wbyteiic(0xa0,0x04,inpulse); } } } } //-----***-定时器中断用在串口传输-***-----// void time1()interrupt 3 { //unsigned char s; TH1=0xA0; TL1=0xA0; time0fg=1; } //-----***-显示采用定时器中断方式-***-----// void time0()interrupt 1 { //unsigned char s; TH0=0x00; TL0=0x00; t++; //x++; W1=W2=W3=W4=W5=W6=0; if(t==1) { W6=1; P0=LedShowBuf[t]; //--------------------------数据显示! } if(t==2) { W5=1; P0=LedShowBuf[t]; //--------------------------数据显示! } if(t==3) { W4=1; P0=LedShowBuf[t]; //--------------------------数据显示! } if(t==4) { W3=1; P0=LedShowBuf[t]; //--------------------------数据显示! } if(t==5) { W2=1; P0=LedShowBuf[t]; //--------------------------数据显示! } if(t==6) { W1=1; P0=LedShowBuf[t]; //--------------------------数据显示! t=0; } /* if(s>=30) { InDataFg=1; s=0; } s++;*/ } //-----***-7755脉冲采用外部中断方式-***-----// void INT_INT1(void) interrupt 2 { EX1=0; //inpulse++; Delay(42); if(!fg) { EDatafg=1; EleChFg=0xaa; } EX1=1; } //-----***-串口数据接收-***-----// void INT_SERIAL(void) interrupt 4 //-----------------红外串口 { unsigned char i,j,k,c; j=0; ES=0; //-----------------------------------------------关闭红外串口接收中断 RI=0; //-----------------------------------------------红外串口接收数据 c=SBUF; for(i=0;i<8;i++)//----------------------------------------------------数据做偶校验 { if(c&0x01) { j++; if(j==2) { j=0; } } c >>=1; } if(j==1) { if(RB8) { k=1; } else { k=0; } } else { if(RB8) { k=0; } else { k=1; } } if(SendEndFg) { if(k) { //ComInceptTime=3; if(SerialBufDptr<50) { if(SerialBufDptr==0)//----------------------------------------数据缓冲区地址指针是否为零 { if(SBUF==0x68)//------------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 { InceptBuf[0]=SBUF; SerialBufDptr++;//------------------------------------缓冲区地址累加 } else { SerialBufDptr=0; } } else { if(SerialBufDptr==7)//------------------------------------数据缓冲区地址指针是否为零 { if(SBUF==0x68)//--------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 { InceptBuf[7]=SBUF; SerialBufDptr++;//--------------------------------缓冲区地址累加 } else { SerialBufDptr=0; } } else { InceptBuf[SerialBufDptr]=SBUF; SerialBufDptr++;//------------------------------------缓冲区地址累加 } } } else { SerialBufDptr=0; } } if(InceptBuf[InceptBuf[9]+11]==0x16) { SerSendFg=1; InfSendFg=0; CmdParseFg=1; SerialBufDptr=0; InfraredBufDptr=0; SendEndFg=0; SendStrFg=1; // CmdParse(); } ES=1;//---------------------------------------------------------------使能接收 } else { ES=0;//---------------------------------------------------------------禁止接收 } }