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

 
 
> Помогите с первой программой, Tiny2313
Chip115
сообщение Dec 30 2007, 12:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709



Всем привет!!! Стал изучать програмирование МК на асемблере. Столкнулся с проблемой.
В симуляторе (AVR Studio 4) все работает как надо. но в контроллере работает не правильно.
Смысл в том чтобы при нажатии на кнопку 1 (PD0) (кнопка другой ногой висит на минусе) загорался на индикаторе 0, при отпускании- индикатор тух. При нажатии на кн 2 (PD1) на индикаторе загоралась бы 1-при отпускании кн 2 индикатор должен тухнуть.
При прошитой микре при ненажатых кнопках горит 0. При нажатии на кн1 (PD0) загорается 1. при отпускании-горит 0. На кн 2 (PD1) вообще нет реакции. Что сделать? Индикатор с общим катодом.
Вот исходник:

Код
.def   temp0 =r16
.def   temp1 =r17
.def   temp2 =r18

Init:
   ser temp0              ;Все выводы порта А  выход
   out DDRA,temp0
   ser temp0              ;Все выводы порта B  выход
   out DDRB,temp0
   ldi temp0,0b11111100     ;Вывод 0 и 1 порта D вход
   out DDRD,temp0

   ldi temp0,0b00000011     ;подтяжка порта D включена
   out PortD,temp0

Start:
   ldi temp1,0b11111100      ;0
   ldi temp2,0b01100000     ;1
   sbic PinD,0              ;Проверяем нажатие кнопки 1
   rjmp Loop_3
Loop_1:
   sbic PinD,1              ;Проверяем кнопку 2
   rjmp Loop_2
ALL_OFF:
   clr temp1              ;Гасим все светодиоды
   out PortB,temp1
   rjmp Start
Loop_2:
   out PortB,temp2           ;Зажигаем 1
   rjmp Start
Loop_3:
   out PortB,temp1           ;Зажигаем 0
   rjmp Start




почему в симуляторе (AVR Studio) работает как надо, а в реале как описано выше?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
DASM
сообщение Dec 30 2007, 12:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Торможу спросянья, но по-моему Вам надо sbis а не sbic по логике писать
Первый во всяком случае
Go to the top of the page
 
+Quote Post
Chip115
сообщение Dec 30 2007, 12:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709



А почему в таком виде в симуляторе работает, а на яву не хотит?
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 30 2007, 12:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



ну я не знаю, как Вы там в симуляторе кнопки нажимаете smile.gif
Go to the top of the page
 
+Quote Post
Chip115
сообщение Dec 30 2007, 12:54
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709



Если прописать sbis то кнопки на +5 В надо вешать?
Go to the top of the page
 
+Quote Post
Yura_K
сообщение Dec 30 2007, 12:55
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



Может схемку набросаете?


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 30 2007, 12:57
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



У Вас -
sbic PinD,0 ;Проверяем нажатие кнопки 1
rjmp Loop_3
То есть при Ненажатой кнопке уровень высокий и прога сразу уходит на Loop_3 и зажигает "0". Вы же вроде хотели, чтобы это происходило при НАЖАТИИ, или не так ?
Go to the top of the page
 
+Quote Post
Yura_K
сообщение Dec 30 2007, 13:01
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



Цитата(DASM @ Dec 30 2007, 17:57) *
У Вас -
sbic PinD,0 ;Проверяем нажатие кнопки 1
rjmp Loop_3
То есть при Ненажатой кнопке уровень высокий и прога сразу уходит на Loop_3 и зажигает "0". Вы же вроде хотели, чтобы это происходило при НАЖАТИИ, или не так ?

Да, похоже так и работает, судя по описанию


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 30 2007, 13:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Вторая команда тоже sbis должна быть
Go to the top of the page
 
+Quote Post
Yura_K
сообщение Dec 30 2007, 13:06
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



Цитата(Chip115 @ Dec 30 2007, 17:54) *
Если прописать sbis то кнопки на +5 В надо вешать?

Ничего вешать не надо, просто измените, как предлагал DASM


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
Chip115
сообщение Dec 30 2007, 13:22
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709



Вот. Набросал по быстрому.


Заработала. Млин. А я голову ломал в чом дело. Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 30 2007, 14:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



да. и резисторы омов 470 последовательно со светодиодами поставьте
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Dec 30 2007, 21:34
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(Chip115 @ Dec 30 2007, 16:22) *
Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень?

Во-первых, когда порт включен на вход, он находится в z-состоянии. Если при этом ни к чему не подключен, то образует элементраную антену, на которую вы рискуете поймать помеху. Во-вторых, после размыкания контакта, изза внутреннего паразитного конденсатора, уровень напряжения будет падать сравнмительно медленно, что не есть хорошо. Поэтому порт нужно подтягивать большИм (50к...100к) сопротивлением к плюс питанию.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 2 2008, 22:28
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Aesthete Animus @ Dec 31 2007, 00:34) *
Во-первых, когда порт включен на вход, он находится в z-состоянии.
...
Поэтому порт нужно подтягивать большИм (50к...100к) сопротивлением к плюс питанию.

И это можно сделать не внося лишних элементов в схему, а просто включив внутренний pull-up резистор - записав в PORTxx "1".
Go to the top of the page
 
+Quote Post
DASM
сообщение Jan 3 2008, 06:12
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(defunct @ Jan 3 2008, 01:28) *
И это можно сделать не внося лишних элементов в схему, а просто включив внутренний pull-up резистор - записав в PORTxx "1".

Что автор и сделал в первом посте
"ldi temp0,0b00000011 ;подтяжка порта D включена
out PortD,temp0"
Впрочем для кнопок, удаленных хоть на полметра такая подтяжка уже слабовата
Go to the top of the page
 
+Quote Post

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

 


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


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