Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.12.2005, 14:21  
Kristina
Гость
 
Сообщений: n/a
По умолчанию Pic 16f84 - сигналы поворота и сигнал СТОП

Здравствуйте!
Помогите, пожалуйста, дописать/написать программу на pic 16f84:
нужно устройство для управления сигналами поворота и сигналами «СТОП» автомобиля:

- при включении поворота направо – на линейке светодиодов должны включиться 2 светодиода и переключаться, создавая эффект движения включенных светодиодов от центра вправо
- при включении поворота налево – на линейке светодиодов должны включиться 2 светодиода и переключаться, создавая эффект движения включенных светодиодов от центра влево
- при включении сигнала «СТОП» должны загореться все светодиоды от центра к краям.

Схему устройства и блоксхему программы начетрила, посмотреть можно здесь:

Вот моя программка:
Код:
; Полоса светодиодов
 list P=16f84
 include ‹p16f84.inc›
 __config b`00000111`

INPUT_A		equ b `00011100`
INPUT_B		equ b `11111111`

 org 0; Указатель для ассемблера - последующий код начинается с нулевого адреса
 goto START

; Основная программа
START:
; Инициализация и начальные условия

clrf	PORTA	; Очистка порта А
clrf	PORTB	; Очистка порта B
bsf STATUS, PRO   ; Переход в банк 1
movlw	INIT_A	; Настраиваем порт A0
movwf	TRISA	; Входы RA2, RA3, RA4 остальные выходы
movlw	INIT_B	; Настраиваем порт B0
movwf	TRISB	; Все выходы

; Рабочая часть

LOOP:
btfsc PORTA, 2	; если заданый бит сброшен, то пропустить команду
	goto L1	; если на порт RA2 пришел сигнал, то переходим к обработке левого поворота
btfsc	PORTA, 3
goto R1
btfsc	PORTA, 4
goto S1
 goto LOOP						
; Левый поворот
L1:
movlw	INIT_A	; Настраиваем порт A0
movwf	b`00000001`; Через выходы RA0 включаем левую часть линейки светодиодов
call	MASK	; Вызвать подпрограмму
movwf	DATAPORT	; Вывести элемент таблицы в порт B
goto	START	; Возврат в начало программы

; Правый поворот
R1:
movlw	INIT_A	; Настраиваем порт A0
movwf	b`00000010`; Через выходы RA1 включаем правую часть линейки светодиодов
call	MASK	; Вызвать подпрограмму
movwf	DATAPORT	; Вывести элемент таблицы в порт B
goto	START	; Возврат в начало программы

; Сигнал СТОП
S1:
movlw	INIT_A	; Настраиваем порт A0
movwf	b`00000011`; Через выходы RA0 и RA1 включаем обе части линейки светодиодов
call	MASK	; Вызвать подпрограмму
movwf	DATAPORT	; Вывести элемент таблицы в порт B
goto	START	; Возврат в начало программы

; Подпрограмма положений светодиодов
MASK:
addwf 	PCL, 1		; Задается смещение в таблице
	retlw	`00000001`
	retlw	`00000011`
	retlw	`00001100`
	retlw	`00011000`
	retlw	`00110000`
	retlw	`01100000`
	retlw	`11000000`
	retlw	`10000000`
end			; Конец программы
Заранее благодарна, Кристина (Kristina_ks@mail.ru
Реклама:
 
Непрочитано 08.12.2005, 19:28  
xelos
Прописка
 
Регистрация: 27.08.2004
Сообщений: 107
Сказал спасибо: 0
Сказали Спасибо 21 раз(а) в 20 сообщении(ях)
xelos на пути к лучшему
По умолчанию

Код:
; Левый поворот 
L1: 
movlw   INIT_A   ; Настраиваем порт A0 
movwf   b`00000001`; Через выходы RA0 включаем левую часть линейки светодиодов 
call   MASK   ; Вызвать подпрограмму 
movwf   DATAPORT   ; Вывести элемент таблицы в порт B 
goto   START   ; Возврат в начало программы
я так понимаю совсем работать не хочет? комментарии, вроде дельные написаны, а вот дальше...
к тому ж с таблицей связываться имхо не к месту здесь...
завтра, если время будет, попробую написать как надо. К тому ж, вроде PIC16F84 где-то завалялся, так что смогу протестировать.
xelos вне форума  
Непрочитано 08.12.2005, 19:30  
xelos
Прописка
 
Регистрация: 27.08.2004
Сообщений: 107
Сказал спасибо: 0
Сказали Спасибо 21 раз(а) в 20 сообщении(ях)
xelos на пути к лучшему
По умолчанию

кстати, INIT_A, DATAPORT что у вас обозначает?
xelos вне форума  
Непрочитано 08.12.2005, 20:08  
AlexSVC
Временная регистрация
 
Регистрация: 10.12.2004
Сообщений: 70
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
AlexSVC на пути к лучшему
По умолчанию

Даже не поленился
Код:
; Полоса светодиодов
list P=16f84
include ‹p16f84.inc›
__config b'00000111'

INIT_A      equ b'00011100'
INIT_B      equ b'00000000'
#define DATAPORT PORTB
;
; Переменные
;
cblock 0C
   SV_COUNT
   SV_STOP
   _END_RAM_:0
endc


org 0; Указатель для ассемблера - последующий код начинается с нулевого адреса
goto START

; Основная программа
START:
; Инициализация и начальные условия

clrf   PORTA   ; Очистка порта А
clrf   PORTB   ; Очистка порта B
bsf STATUS, RP0   ; Переход в банк 1
movlw   INIT_A   ; Настраиваем порт A0
movwf   TRISA   ; Входы RA2, RA3, RA4 остальные выходы
movlw   INIT_B   ; Настраиваем порт B0
movwf   TRISB   ; Все выходы
bcf STATUS, RP0   ; Переход в банк 0
clrf SV_COUNT
; Рабочая часть

LOOP:
btfsc PORTA, 2   ; если заданый бит сброшен, то пропустить команду
   goto L1       ; если на порт RA2 пришел сигнал, то переходим к обработке левого поворота
btfsc   PORTA, 3
goto R1
btfsc   PORTA, 4
goto S1
clrf SV_COUNT
clrf PORTB
goto LOOP                  
; Левый поворот
L1:
movlw  b'00000001' ; Настраиваем порт A0
movwf  PORTA       ; Через выходы RA0 включаем левую часть линейки светодиодов
movfw SV_COUNT
call   MASK   ; Вызвать подпрограмму
movwf   DATAPORT   ; Вывести элемент таблицы в порт B
movlw  b'00000001'
addwf SV_COUNT,1
goto   LOOP   ; Возврат в начало программы

; Правый поворот
R1:
movlw   b'00000010'; Настраиваем порт A0
movwf   PORTA      ; Через выходы RA1 включаем правую часть линейки светодиодов
movfw SV_COUNT
call   MASK   ; Вызвать подпрограмму
movwf   DATAPORT   ; Вывести элемент таблицы в порт B
movlw  b'00000001'
addwf SV_COUNT,1
goto   LOOP   ; Возврат в начало программы

; Сигнал СТОП
S1:
movlw   b'00000011'; Настраиваем порт A0
movwf   PORTA      ; Через выходы RA1 включаем правую часть линейки светодиодов
movfw SV_COUNT
call   MASK   ; Вызвать подпрограмму
iorwf SV_STOP,1
movfw SV_STOP
movwf   DATAPORT   ; Вывести элемент таблицы в порт B
movlw  b'00000001'
addwf SV_COUNT,1
goto   LOOP   ; Возврат в начало программы

; Подпрограмма положений светодиодов
MASK:
addwf    PCL, 1      ; Задается смещение в таблице
   retlw   b'00000001'
   retlw   b'00000011'
   retlw   b'00001100'
   retlw   b'00011000'
   retlw   b'00110000'
   retlw   b'01100000'
   retlw   b'11000000'
   retlw   b'10000000'
end         ; Конец программы
Типа так.
AlexSVC вне форума  
Непрочитано 09.12.2005, 13:15  
AlexSVC
Временная регистрация
 
Регистрация: 10.12.2004
Сообщений: 70
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
AlexSVC на пути к лучшему
По умолчанию

ЗЫ: Тока я там немного не доработал... Нада в главном лупе в конце поставить обнуление переменной SV_STOP и в его начале поставить проверку на предмет превышения значения SV_COUNT (шоб больше 8-ми не был), и там-же поставить временную задержку, а то в реальном устройстве очень быстро моргать будет
AlexSVC вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Магниторезистор как средство определения угла поворота Kanava Микроконтроллеры, АЦП, память и т.д 57 01.04.2009 19:04
Световой сигнал To звуковой сигнал Alex103 Источники питания и свет 3 08.07.2006 12:59
Память программ в 16F84 Микроконтроллеры, АЦП, память и т.д 4 20.11.2005 23:25
16F84 (REV A) mikesmith Коллекция глюков 0 22.05.2003 21:57


Часовой пояс GMT +4, время: 04:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot