#include "DSP2833x_Device.h" // DSP281x Headerfile Include File #include "DSP2833x_SWPrioritizedIsrLevels.h" #include "filter_bat2.h" #include "measure.h" #include "RS485.h" #include "message.h" #include "kanal.h" #include "pulto.h" #include "package.h" #include "tools.h" #include "peripher.h" int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0}; int readr[5] = {0x08,0x0C,0x10,0x00,0x04}; void DCLK(int x) { if(x) GpioDataRegs.GPASET.bit.GPIO6=1; else GpioDataRegs.GPACLEAR.bit.GPIO6=1; } void DOUT(int x) { if(x) GpioDataRegs.GPASET.bit.GPIO8=1; else GpioDataRegs.GPACLEAR.bit.GPIO8=1; } #if CLKMULT==1 #define POWS0 0 #endif #if CLKMULT==2 #define POWS0 1L #endif #if CLKMULT==3 #define POWS0 1L #endif #if CLKMULT==4 #define POWS0 3L #endif #if CLKMULT==5 #define POWS0 6L #endif void RESET() { DCLK(0); #if POWS0>0 DSP28x_usDelay(POWS0); #endif DOUT(1); #if POWS0>0 DSP28x_usDelay(POWS0); #endif DOUT(0); #if POWS0>0 DSP28x_usDelay(POWS0); #endif } void SENDBIT(int x) { DOUT(x); DCLK(1); #if POWS0>0 DSP28x_usDelay(POWS0); #endif DOUT(0); DCLK(0); #if POWS0>0 DSP28x_usDelay(POWS0); #endif } void kanal_Send(int adr, long dat, int dot) { long Word,data,aliq_part,dg[4]; int i,j,bit,byt,addr,sgn=0,punkt=0,aliq_len=0,full_len, isdot=0; if(adr>1) // Лампочки { Word =dat; } else { if(dat<0) sgn=1; data = labs(dat); if(dot>=0 && dot<4) isdot = 1; else dot=0; aliq_part = data; for(i=0;i0) { aliq_len++; dat/=10; } dat = data; full_len = aliq_len+sgn; if(full_len==0) full_len=1; full_len += dot; for(i=0; i<(full_len-4);i++) { dot--; dat/=10; } if(dot<0) dot=0; punkt = 1<0;i--) { if((dg[i]==0)&&(i!=dot)) dg[i]=0xF; // Это значит пусто else break; } if(sgn) for(i=1;i<4;i++) { if( (dg[i]==0xF)||(i==3)) { dg[i]=0xA; // Это значит минус break; } } for(i=0;i<4;i++) { dg[i] = digits[dg[i]]; if((punkt>>i)&1) dg[i]+= 128; } Word = ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) | ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000); } addr = readr[adr]; for (i=0;i<4;i++) { if(addr>0x10) break; for (j=0;j<8;j++) { bit = Word & 1; Word >>= 1; SENDBIT(bit); } byt = addr; for (j=0;j<6;j++) { bit = byt & 1; byt >>= 1; SENDBIT(bit); } addr++; RESET(); } }