Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн ноя 04, 2013 11:05:14
Естественно, там ошибки. Нужно указать элемент массива. Вы ведь хотели сделать массив?
Здесь можно немножко помяукать :)
https://radiokot.ru:443/forum/
К тому же, к чему и в Вашем коде привязана а:и к чему эта 5 к примеру будет привязана
Код: Выделить всё
off.data[a]=0;
0867532 писал(а):я обычно делаю так:
создаю переменную flag
создаю прерывание по таймеру(самое медленное)
и в него пишу flag = 1;
далее пихаю индикацию в основной цикл
и в нём же проверяю flag.
если flag = 1 { считываю инфу с ds18b20; flag = 0;}
всё.
если медленности прерывания по таймеру недостаточно, то можно поставить ещё переменную, которая считает прерывания, и по достижению 5 ,скажем, запиливаем flag=1; а счётчик возвращаем в 0.
работает стабильно уже 1месяц:)
Почитал тему, но как править библиотеку не пойму. Единственное что сделал это обернул все строки wl_write() wl_init() заперетом и разрешением прерывания, как советовали, но картина не изменилась.oleg110592 писал(а):индикация на прерывании?
http://radiokot.ru/forum/viewtopic.php?t=8179&view=next
Код: Выделить всё
while (1) {
if (doflag == 1) {
rtc_get_time(&hrs,&min,&sec);
hrst = hrs/10;
hrso = hrs%10;
mint = min/10;
mino = min%10;
doflag = 0;
}
if (PINC.7==0) {delay_ms(50); setupflag=1;}
if (setupflag==1) {
if (PINC.4==0) { Chrs++; delay_ms(50);}
if (PINC.5==0) { Chrs--; delay_ms(50);}
if (PINC.7==0) {setupflag=2; delay_ms(50);}
hrst = Chrs/10;
hrso = Chrs%10;
mint = 99;
mino = 99;
}
if (setupflag==2) {
if (PINC.4==0) { Cmin++; delay_ms(50);}
if (PINC.5==0) { Cmin--; delay_ms(50);}
if (PINC.7==0) { rtc_set_time(Chrs,Cmin,0);setupflag=0; delay_ms(50);}
hrst = 99;
hrso = 99;
mint = Cmin/10;
mino = Cmin%10;
}
if (mino == 0) {NUM0();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 1) {NUM1();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 2) {NUM2();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 3) {NUM3();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 4) {NUM4();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 5) {NUM5();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 6) {NUM6();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 7) {NUM7();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 8) {NUM8();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mino == 9) {NUM9();PORTA.4 = 0xFF;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0x00;}
delay_us(300);
if (mint == 0) {NUM0();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 1) {NUM1();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 2) {NUM2();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 3) {NUM3();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 4) {NUM4();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 5) {NUM5();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 6) {NUM6();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 7) {NUM7();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 8) {NUM8();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
if (mint == 9) {NUM9();PORTA.4 = 0x00;PORTA.5 = 0xFF;PORTA.6 = 0x00;PORTA.7 = 0x00;}
delay_us(300);
if (hrso == 0) {NUM0();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 1) {NUM1();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 2) {NUM2();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 3) {NUM3();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 4) {NUM4();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 5) {NUM5();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 6) {NUM6();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 7) {NUM7();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 8) {NUM8();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
if (hrso == 9) {NUM9();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0xFF;PORTA.7 = 0x00;}
delay_us(300);
if (hrst == 0) {NUM0();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 1) {NUM1();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 2) {NUM2();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 3) {NUM3();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 4) {NUM4();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 5) {NUM5();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 6) {NUM6();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 7) {NUM7();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 8) {NUM8();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
if (hrst == 9) {NUM9();PORTA.4 = 0x00;PORTA.5 = 0x00;PORTA.6 = 0x00;PORTA.7 = 0xFF;}
delay_us(300);там же вроде все попроще:обернул все строки wl_write() wl_init()
это, имхо в прерывании лучше не делатьраскладываем число на разряды
Так тоже -9999 проскакивает.dimmar писал(а):а так:#asm("cli")temper=ds18b20_temperature(0);#asm("sei")будет еще некрасивее индикация