а вот с Б, нет,,
Какк только в ТИМСК меняю на Б, то не хочет работать... уходит в непонятное место... и пишет неопределен адрес...
invalid opcode 0xffff at adress 0x00000c
СПасибо!!!!!Денис203 писал(а):да, абс такая же.....
Может с тактовой частотой?Денис203 писал(а):добрый день! а вот подскажите такой момент... пишу такую прогу.... светодиодик мигает снчала с одной частотой,, в регистре r30 копится число, пока не станет =5,,, зтем частота моргания меняется....
так вот вопрос в том, что в АВРстудио все четко работает....
а в реале,, ну никак не 5 число в регистре.... он очень уж долго моргает с первой частотой....
что неправильно? или с чем это связано?
Первое что бросается в глаза - Вы не сохраняете значение регистра состояния процессора - S при входе в прерывания и не восстанавливаете его при выходе, отсюда скорее всего неправильная работа программы. Второе - какова тактовая частота контрорллера и рассчетная частота "мигания"?Денис203 писал(а):добрый день! а вот подскажите такой момент...
.org 19
....
А подпрограмма вот:
TIMER1_COMPB:
inc r30
ldi r20,0b00000001
in r21,portb
eor r20,r21
out portb,r20
ldi r22,0
out tcnt1l,r22
out tcnt1h,r22
reti
Код: Выделить всё
ldi r17,0b00100000
out TIMSK,r17Код: Выделить всё
ldi r17, (1<<OCIE1A)|(1<<OCIE1B)
out TIMSK,r17 Как все запущено. Попробую объяснить кратко, но лучше наверное где-то почитате еще.Денис203 писал(а):про code не совсем понял... можно с примером?
а про первую запись.... тоже не совсем... не совсем понятно, что записывается в регистр
Код: Выделить всё
TIMER1_COMPB:
push r16 ; сохраняем предыдущее значение r16 в стек - мало ли что в нем хранилось до этого
in r16, SREG; читаем значение статус-регистра в r16 -
push r16 ; сохраняем r16 в стек
inc r30
ldi r20,0b00000001
in r21,portb
eor r20,r21
out portb,r20
ldi r22,0
out tcnt1l,r22
out tcnt1h,r22
pop r16; вытаскиваем значение, соответсвующее состоянию статус-регистра до входа в прерывания, из стека
out SREG, r16; восстанавливаем значение статус регистра
pop r16 ; вытаскиваем значение регистра r16 из стека
reti ПОЛУЧИЛСЯ !!! Вы не поверите !sachok писал(а):Нуждаюсь в помощи с прошивкой на Си. Должен выйти двухточечный термометр но не получается.

Код: Выделить всё
if (big_ctr < 1)
{
j=0;
PORTD.5=0;
}
else
{
j=1;
PORTD.5=1;
}Код: Выделить всё
PORTD=0xFF;
DDRD=0x3F;Можно и так сказать, но запись в регистр может быть и одна.sachok писал(а):Правильно ли я думаю что при использовании побитового доступа к портам нужно каждый бит настраивать отдельно?
Код: Выделить всё
DDRD.5 = 1; Код: Выделить всё
#define SET_D(x) |= (1<<x)
#define CLR_D(x) &=~(1<<x)
sfrb PORTD=0x12;
sfrb DDRD=0x11;
sfrb PIND=0x10;