Код: Выделить всё
do{
// тут была метка для goto
...
while(1){
// тут ваши if-ы
...
if(some_condition) break;
}
} while (1);
Код: Выделить всё
do{
// тут была метка для goto
...
while(1){
// тут ваши if-ы
...
if(some_condition) break;
}
} while (1);
не улавливаю ни малейшей связи вопроса "со средой WinAVR" - вопрос исключительно "абстрактно-алгоритмический".stolyars писал(а):У меня такой вопрос по програмированию в среде WinAvr:динамическая индикация если сегменты семисегментника подключаются к разным портам.Как реализуется это практически?имеется в ввиду код?На одном сайте мне подсказали что можно собрать виртуальный порт,но как практически сделать мне не очень понятно.Буду благодарен за любую подсказку или наводку,ну а если еще пример реализации програмной покажете буду рад безмерно.Заранее спасибо за любой ваш ответ.
Код: Выделить всё
#define seg_A _BV(4)
PORTB = (PORTB & ~_BV(PB6)) | ((c & seg_A) << 6);Код: Выделить всё
PORTB = (PORTB & 0b11000111) | (c & 0b00111000);
PORTC = (PORTC & 0b00111000) | (c & 0b11000111);Код: Выделить всё
unsigned char ow_reset(void)
{
unsigned char presence=0;
DDRB |= _BV(WIRE);
_delay_us(490);
DDRB &= ~_BV(WIRE);
_delay_us(60);
if (bit_is_set(PINB,WIRE)) presence++;
_delay_us(480);
return(presence);
}
Код: Выделить всё
unsigned char ow_reset(void)
{
unsigned char presence=0;
DQ = 0;
delay_us(480);
DQ = 1;
delay_us(70);
if (PINB & (1<<PORTB.0)) presence++;
delay_us(470);
return(presence);
} /* 0 = на шине есть устройства, 1 = нет устройств */
nsl2004 писал(а):есть подсказка, что if (bit_is_set(PINB,0)) { ... } можно заменить на if (PINB & (1<<PINB0)) { ... } по аналогии меняем и получаем для CVAVR [/i]
if (PINB.0 & (1<<DQ)) presence++; // где DQ - #define DQ PORTB.0
Код: Выделить всё
unsigned char a;
int main ()
{
while(1)
{
printf("a=%d", a);
}
}
ISR(вектор)
{
a++;
}Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <util/delay.h>
petrunick писал(а):В ВинАВРе компилятор неожиданно стал ругаться на GIMSK...
Код: Выделить всё
int main()
{
int i;
DDRD = 255;
#define AA 7
while (1) {
for (i = 0 ; i < 1500 ; i++ ) asm("NOP");
PORTD = 0;
for (i = 0 ; i < AA ; i++ ) asm("nop");
PORTD = 255;
}
return 0;
}
petrunick писал(а):При удалени ...
Код: Выделить всё
350: sei(); //разрешаю все прерывания
+000004C1: 9478 SEI Global Interrupt Enable
351: Timer_TOIE_ON; //разрешить прерывание по переполнению
+000004C2: E084 LDI R24,0x04 Load immediate
+000004C3: BF87 OUT 0x37,R24 Out to I/O location
354: _rfid_i = 0x08;
+000004C4: E088 LDI R24,0x08 Load immediate
+000004C5: 93800126 STS 0x0126,R24 Store direct to data space
358: _rfid_j = 0x08;
+000004C7: E058 LDI R21,0x08 Load immediate
370: InvBit(TEST);
+000004C8: E440 LDI R20,0x40 Load immediate
357: _rfid_i--;
+000004C9: 91200126 LDS R18,0x0126 Load direct from data space
+000004CB: 5021 SUBI R18,0x01 Subtract immediate
+000004CC: 93200126 STS 0x0126,R18 Store direct to data space
358: _rfid_j = 0x08;
+000004CE: 93500127 STS 0x0127,R21 Store direct to data space
Код: Выделить всё
sei(); //разрешаю все прерывания
Timer_TOIE_ON; //разрешить прерывание по переполнению
_rfid_i = 0x08;
do{
_rfid_i--;
_rfid_j = 0x08;
_byte_key = *((unsigned char *)&_rfid_to_sent_array + _rfid_i - 1);
do{
_rfid_j--;
if((_byte_key & 0x80) == 0x80) {ClrBit(TEST); NOP;}
else {SetBit(TEST); NOP;}
InvBit(TEST);
NOP;
_byte_key = _byte_key << 1;
}while(_rfid_j > 0x00);
}while(_rfid_i > 0x00);
Timer_TOIE_OFF; //запретить прерывание по переполнению
}
petrunick писал(а):При удалени <avr/signal.h> он ругается на sei() (глоб. разрешение прерываний) даже при наличии <avr/interrupt.h>
МК стоит АТмега128.
типа прыгает - это что значит?MOHOXPOM писал(а):Народ, выручай... Неделю бьюсь и не могу понять что происходит с кодом. Он типа "прыгает". Может компилятор мозги колупает (gcc 4.3.3 WinAvr под студией)? Строки 358, 370, 357