Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
#include
#include "mega128.h"
#include "math.h"
static unsigned int n, I0, tx, Uakb;
static unsigned long int ta=0;
static char rx;
static char flag = 0, flag_tx = 0;
static unsigned int SumValue = 0; // îáíóëèòü äëÿ ïîäñ÷åòà
static unsigned int value = 0;
static unsigned int i = 0;
static unsigned int Amp_0=464;
static unsigned long int SumAh=0;
static char flag_in_out = 0;
volatile char st, ml, stI, mlI;
static char nb=0;//************** Ïåðåäà÷à â UART ********************
#pragma vector=USART1_UDRE_vect
static __interrupt void CompUSART_TX();
//************** Ïðèåì áàéòà èç UARTà ***************
#pragma vector=USART1_RXC_vect
static __interrupt void CompUSART_RX();
__interrupt void CompUSART_TX()
{
static char st, stI, mlI;nb++;
switch (nb)
{
case 1: UDR1 = st;
break;
case 2: UDR1 = mlI;
break;
case 3: UDR1 = stI;
break;
case 4: UDR1 = Uakb;
break;
case 5: UDRIE1 = 0;
break;
}}
__interrupt void CompUSART_RX()
{rx = UDR1;
flag = 1;}
void main(void)
{
//*************** UART **************
__disable_interrupt();
UBRR1H = 0;
// UBRR1L = 2; // ñêîðîñòü 115200(?)
// UBRR1L = 25; // ñêîðîñòü 14400(?)
// UBRR1L = 6; // ñêîðîñòü 57600(-)
// UBRR1L = 9; // ñêîðîñòü 33600(+)
// UBRR1L = 19; // ñêîðîñòü 19200(+)
UBRR1L = 38; // ñêîðîñòü 9600(+)
U2X1 = 0; //double speed mode off
UMSEL1 = 0; //Àñèíõðîííûé ðåæèì
UCSZ12 = 0; UCSZ11 = UCSZ10 = 1; //8-áèò ïàêåò ñâÿçè
UPM11 = 0; //Íåò ïðîâåðêè íà ÷åòíîñòü
MPCM1 = 0; //Íåò ôèëüòðàöèè ïàêåòîâ(äëÿ ìóëüòèïðîöåññîðíîãî UART)
RXCIE1 = 1; // ðàçðåøèòü ïðåðûâàíèÿ îò ïðèåìà
UDRIE1 = 1; //ðàçðåøèòü ïðåðûâàíèå ïî ïóñòîìó UDR1
RXEN1 = 1; // ðàçðåøèòü ïðèåì
TXEN1 = 1; // ðàçðåøèòü ïåðåäà÷ó
UDR1 = 100;
TXCIE1 = 0; // çàïðåò ïðåðûâàíèÿ ïîñëå ïåðåäà÷è
__enable_interrupt();
//**************** ÀÖÏ **********************
ADPS = 6; // ñêîðîñòü CLK/64
ADEN = 1; // ðàçðåøèòü ÀÖÏ
MUX = 6; // 6-é êàíàë
ADSC = 1; // ñòàðò
while(1)
{
if(flag==1)
{flag = 0; if(rx==10)Amp_0= value; if(rx==20){SumAh=0;}}
if(++n==587)// 0,25ñåê
{
n = 0;
if(!ADSC)
{
SumValue += ADC; // ïîäñ÷åò 10 çíà÷åíèé
if(++i == 10) // êîíåö ïîäñ÷åòà
{
i = 0;
value = SumValue/10; // òåêóùåå íàïðÿæåíèå íà äàò÷èêå*100 òå 1â=100; 9â =900
SumValue = 0; // îáíóëèòü äëÿ ñëåä. ïîäñ÷åòà
Uakb = value/10;
//-------------------------------------------
//ñäâèã íà íîëü
if (Amp_0 > value)
{
flag_in_out = 0; // çàðÿäêà
ta = Amp_0 - value;
}
else {
flag_in_out = 1; // ðàçðÿäêà
ta = value - Amp_0;
}
ta = ta*100; // 0-90000
ta = ta/75; // â àìïåðàõ*10 0-500
I0 = ta; // òåêóùèé òîê*10
ta = ta/4; // óìíîæåíèå íà âðåìÿ 0,25ñåê = à*ñåê*10 0-130
SumAh +=ta;
tx = SumAh/3600; // àìïåð*÷àñû*10
//----- ïîäñ÷åò àìïåð*÷àñîâ-------
st = tx/10;
ml = tx-st*10;
stI = 50;//I0/10;
mlI = I0-stI*10;
nb=0;
UDR1 = ml;
UDRIE1 = 1;
}
ADSC = 1; // ñòàðò ÀÖÏ
}
}
}
}