Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

вот вся прога хотел по быстрому сваять чето не получилось

Отправлено whale 12 мая 2007 г. 15:37
В ответ на: Область видимости static в пределах одного модуля. Прерывание у вас в том же модуле что и main? отправлено rezident 12 мая 2007 г. 15:33

#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; // ñòàðò ÀÖÏ
}
}

}
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сложите три и три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru