Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с маленьким кодиком, Для Pic16F84A 
:(
    Опции темы
Pro_BD
  Дата 8.6.2004, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



Привет всем, в данный момент я учусь писать программы для микроконтроллеров. Пока что я ушел не слишком далеко от приметивных познаний но я в процессе так сказать.
Проблема заключаеться вот в чем. Есть устройство каторое при нажатии на кнопку зажигает свето - деод. С такой переодичностью: нажали 1 раз свето деод включился и мигает, нажали (быстро) (он тоже должен включиться) 2 раза деод мигает с более длинной переодичностью относительно первого нажатия, нажали и подержали кнопку 4 сек. все деод выключаеться.
Далее, проблема:
Подскажите как выразить вот эти вот нажатия в моем коде ? тоесть если при нажатие на кнопку мы проводим опрос порта к которому подключена КН, и от туда падают b'11111111' то как делать их проверку и тд и тп. Код прилогаеться
ЗЫ. Плз подскажите если кому не лень.
Код
;write by BD
list p=16f84a
__CONFIG b'11111111110011'
;=======описание операционных регистров
TMRO EQU 01h
PC EQU 02h
STATUS EQU 03h
FSR EQU 04h
;=======ригистры in\out
CNTRLPORT EQU 05h
DATAPORT EQU 06h
;======ячейки ОЗУ
SCRATCH EQU CED
;DIGIT EQU DED
;======биты ригистра STATUS
CED EQU 0h
DC EQU 1h
Z EQU 2h
PD EQU 3h
TO EQU 4h
RP EQU 5h
;======управляющие ргистры
TRISA EQU 85h
TRISB EQU 86h
;========слова инициализации для портов in\out

INITA EQU 0h
INITB EQU 0h

ORG 0
 GOTO BEGIN
ORG 100h
BEGIN:
;============= A  Вход  =============
BCF STATUS,RP  
CLRF CNTRLPORT
MOVLW INITA
BCF STATUS,RP
MOVWF TRISA


;=======инициализация порта В выход =============
BCF STATUS,RP
CLRF DATAPORT
MOVLW INITB
BSF STATUS,RP
MOVWF TRISB
BCF STATUS,RP


;=========говорим, зажгись

;===========================================ГОРИМ 1 сек. Гаснем 3 сек.===========================
F1:      
bcf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
bsf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
CALL Smile

;=========================================ГОРИМ 1 сек. гаснем 3 сек.===================================
F2:
bcf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
bsf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
CALL Smile

;========================================= Не че не делаем =========================================
F3:
bcf DATAPORT,0
CALL delay
bsf DATAPORT,0
CALL delay
CALL Smile


i equ 20h
j equ 21h
q equ 22h
del1 equ 0Ah
del2 equ 14h
del3 equ 7Fh

delay:
MOVLW del1;W=del1 1 цикл
MOVWF i;i=W заполняем счетчик внешнего цикла 1 цикл
m3:  MOVLW del2;W=del2 1 цикл
MOVWF j;j=W заполняем счетчик среднего цикла 1 цикл
m2:  MOVLW del3;W=del3 1 цикл
MOVWF q;q=W заполняем счетчик внутрен. цикла 1 цикл
m1:  DECFSZ q,1;q=q-1 и если q==0 пропускаем сл. команду 1(2)цикла
GOTO m1
DECFSZ j,1;j=j-1 и если j==0 пропускаем сл. команду 1(2)цикла
GOTO m2
DECFSZ i,1;i=i-1 и если i==0 пропускаем сл. команду 1(2)цикла
GOTO m3
RETURN
;+=========+++++================================================  Опрашиваем порт=====

;r equ 30h  
;w equ 31h  
;e equ 32h
;dell1 equ 0FFh
;dell2 equ b'11111111'
;dell3 equ 0FFh

Smile:
addlw 0FFh  ; нужно ли это, я это у видел в контесте другово кода где говорится что тут мы опрашиваем порт  
btfss CNTRLPORT,b'00000001'
goto F1
btfss CNTRLPORT,b'00000010'
goto F2
 btfss CNTRLPORT,b'00000100'
goto F3
goto Smile



END

З.Ы. после метки Smile у меня идет (или должен идти ) опрос порта, вот там на мой взгляд я что то напут, подкаректируйте меня.
PM MAIL ICQ AOL   Вверх
Sardar
Дата 8.6.2004, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 2
Всего: 317



Цитата
CALL Smile

У тебя стек не резиновый, ты возвращаешся из Smile прыжком оставляя в стеке адрес возврата. Прыгай по адресу.
Цитата
addlw 0FFh; нужно ли это

Нет, смысла от этого нет, разве извращенным путем C и DC биты в статусе изменять.
Код
MOVLW INITA
BCF STATUS,RP
MOVWF TRISA

Напутал с инструкцией, BSF STATUS,RP
Цитата
F3: bcf DATAPORT,0 CALL delay bsf DATAPORT,0 CALL delay CALL Smile

Вместо битов ставить, лучше бы NOP'ом "ничего не делал"
Цитата
delay:

Пауза очень не красивая, можно и таймер использовать.
Цитата
и от туда падают b'11111111' то как делать их проверку и тд и тп. Код прилогаеться

Сейчас ты с порта A считываешь число. Для этого нужна еще и внешняя логика. Используй прерывания для отлова нажатия кнопки.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Darked
Дата 8.6.2004, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



Давно на асме не писал, аж в глазах зарябило biggrin.gif Мой тебе совет, если знаком с Си, то поставь себе сишный компилер HT-PICC.
А код сейчас почитаю... smile.gif


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Pro_BD
Дата 9.6.2004, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



2 Sardar
Код
list p=16f84a
__CONFIG b'11111111110011'
;=======описание операционных регистров
TMRO EQU 01h
PC EQU 02h
STATUS EQU 03h
FSR EQU 04h
;=======ригистры in\out
CNTRLPORT EQU 05h
DATAPORT EQU 06h
;======ячейки ОЗУ
SCRATCH EQU CED
;DIGIT EQU DED
;======биты ригистра STATUS
CED EQU 0h
DC EQU 1h
Z EQU 2h
PD EQU 3h
TO EQU 4h
RP EQU 5h
;======управляющие ргистры
TRISA EQU 85h
TRISB EQU 86h
;========слова инициализации для портов in\out

INITA EQU 0h
INITB EQU 0h

ORG 0
 GOTO BEGIN
ORG 100h
BEGIN:
;============= A  Вход  =============
BCF STATUS,RP
CLRF CNTRLPORT
MOVLW INITA
BSF STATUS,RP
MOVLW 0ffh
MOVWF TRISA
BCF STATUS,RP
;=======инициализация порта В выход =============
BCF STATUS,RP
CLRF DATAPORT
MOVLW INITB
BSF STATUS,RP
MOVWF TRISB
BCF STATUS,RP


;=========говорим, зажгись

;===========================================ГОРИМ 1 сек. Гаснем 3 сек.===========================
F1:      
bcf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
CALL delay
bsf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
GOTO Smile



;=========================================ГОРИМ 1 сек. гаснем 3 сек.===================================
F2:
bcf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
bsf DATAPORT,1
CALL delay
CALL delay
CALL delay
CALL delay
GOTO Smile


i equ 20h
j equ 21h
q equ 22h
del1 equ 0Ah
del2 equ 14h
del3 equ 7Fh

delay:
MOVLW del1;W=del1 1 цикл
MOVWF i;i=W заполняем счетчик внешнего цикла 1 цикл
m3:  MOVLW del2;W=del2 1 цикл
MOVWF j;j=W заполняем счетчик среднего цикла 1 цикл
m2:  MOVLW del3;W=del3 1 цикл
MOVWF q;q=W заполняем счетчик внутрен. цикла 1 цикл
m1:  DECFSZ q,1;q=q-1 и если q==0 пропускаем сл. команду 1(2)цикла
GOTO m1
DECFSZ j,1;j=j-1 и если j==0 пропускаем сл. команду 1(2)цикла
GOTO m2
DECFSZ i,1;i=i-1 и если i==0 пропускаем сл. команду 1(2)цикла
GOTO m3
RETURN
;+=========+++++================================================  Опрашиваем порт=====

;r equ 30h  
;w equ 31h  
;e equ 32h
;dell1 equ 0FFh
;dell2 equ b'11111111'
;dell3 equ 0FFh

Smile:
btfss CNTRLPORT,b'00000001'
goto F1
btfss CNTRLPORT,b'00000010'
goto F2
goto Smile
END



P.S. Таймером и перехватом прерываний пока что пользоваться не умею писал так, что знал
ЗЫ. Так код лучше ???
PM MAIL ICQ AOL   Вверх
Pro_BD
Дата 9.6.2004, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



Цитата
Пауза очень не красивая, можно и таймер использовать.

Гм hmmm.gif , а ты можешь показать как пользоваться таймером, например сделай с помощью таймера туже задержку что и уменя, если конечно не тяжело.


Народ подскажите книгу или ссылочку, на такую тему как у меня. Типа таймеры, прерывания ....
PM MAIL ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0801 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.