|
|
  |
Входы и выходы на AT90s4433, Не коректно работают |
|
|
|
Dec 2 2009, 18:33
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 17-05-08
Пользователь №: 37 571

|
Код #include "4433def.inc"
.def ZERO=r22 .def INPUT=r0 .def TEMP=r20 .def COUNTER=r18
ldi ZERO, 0 out ADCSR, ZERO;disable ADC ldi TEMP, 1 out DDRB, TEMP;set first 1 bits of portb to output ldi TEMP, 2 out DDRC, TEMP;set portc to input
check: ldi COUNTER, 0 out PORTB, COUNTER check1: in INPUT, PINC;get input ror INPUT;check first bit (0 = input) brcs check ldi COUNTER, 3 out PORTB, COUNTER rjmp check1 У меня есть вход порт PC0 и выход PB0, проблема в том что если я хочу повесить вход еще на PC1 или PC2 то на выходе PB0 нечего не выходит, помогите! КАк правильно подключать несколько входов и несколько выходов?
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
Dec 2 2009, 19:51
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Попробуйте для начала Код ldi r16, 255 out PORTC,r16; inputs with pullups out DDRB,r16; outputs
LOOP: in r16,PINC out PORTB,r16 wdr rjmp LOOP Для проверки работоспособности замыкайте на землю пины PORTC и наблюдайте за PORTB. И еще изучите все инструкции avr-asm: http://www.atmel.com/dyn/resources/prod_do...nts/doc0856.pdfhttp://www.atmel.com/dyn/resources/prod_do...nts/doc1022.pdf
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 3 2009, 12:39
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 17-05-08
Пользователь №: 37 571

|
Так как вы написали не работает! За ПДФ-ки спосибо
|
|
|
|
|
Dec 3 2009, 16:49
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(KAMASUTR @ Dec 3 2009, 15:39)  Так как вы написали не работает! За ПДФ-ки спосибо Не верю  CODE .NOLIST .INCLUDE "4433def.inc" .LIST
.CSEG .ORG 0x00 ldi r16,low(RAMEND) out SP,r16
ldi r16,0xff out PORTC,r16 ; inputs with pullups out DDRB,r16 ; outputs
LOOP: in r16,PINC out PORTB,r16 wdr rjmp LOOP
.EXIT
Проверил в avrstudio - точно работает. За 10 лет ничего не изменилось.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 4 2009, 13:23
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 17-05-08
Пользователь №: 37 571

|
Спосибо, но я нашел другой способ))) если интересно CODE #include "4433def.inc"
.def ZERO=r22 .def INPUT=r0 .def TEMP=r20 .def COUNTER=r18
ldi ZERO, 0 out ADCSR, ZERO;disable ADC ldi TEMP, 1 out DDRB, TEMP;set first 1 bits of portb to output ldi TEMP, 255 out PORTC, TEMP;set portc to input
check: ldi COUNTER, 0 out PORTB, COUNTER check1: in INPUT, PINC;get input ror INPUT;check first bit (0 = input) brcs check2; if no input brcc check3; if is input check2: ror INPUT;check first bit (0 = input) brcs check check3: ldi COUNTER, 3 out PORTB, COUNTER rjmp check1
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
Dec 4 2009, 15:58
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
KAMASUTR, Ваш исходник реализует вот эту программу: если (PINC0=1 и PINC1=1), то PORTB=0, иначе PORTB=3 вот один из вариантов реализации: Код check: in temp, PINC;читаем состояние кнопок andi temp, 1<<PINC1|1<<PINC0;обнуляем все биты, кроме двух кнопок cpi temp, 1<<PINC1|1<<PINC0;нажата ли хоть одна кнопка?
ldi temp, 3;значение для PORTB, если нет ввода breq no_input;нет, не нажата, переход на "нет ввода"
ldi temp, 0;нажата одна или обе кнопки, значение для PORTB no_input: out PORTB, temp;вывести значение в PORTB rjmp check;перейти в начало цикла опроса
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|