реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Входы и выходы на AT90s4433, Не коректно работают
KAMASUTR
сообщение Dec 2 2009, 18:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 нечего не выходит, помогите! КАк правильно подключать несколько входов и несколько выходов?
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 2 2009, 19:51
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 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.pdf
http://www.atmel.com/dyn/resources/prod_do...nts/doc1022.pdf


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KAMASUTR
сообщение Dec 3 2009, 12:39
Сообщение #3


Участник
*

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



Так как вы написали не работает! За ПДФ-ки спосибо
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 3 2009, 16:49
Сообщение #4


неотягощённый злом
******

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



Цитата(KAMASUTR @ Dec 3 2009, 15:39) *
Так как вы написали не работает! За ПДФ-ки спосибо
Не верюsmile.gif
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 лет ничего не изменилось.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KAMASUTR
сообщение Dec 4 2009, 13:23
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
ae_
сообщение Dec 4 2009, 15:58
Сообщение #6


Участник
***

Группа: Свой
Сообщений: 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;перейти в начало цикла опроса
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016