Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

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

 
Опции темы

Pic 16f84 - сигналы поворота и сигнал СТОП

Непрочитано 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			; Конец программы
Заранее благодарна, Кристина ([email protected]
Реклама:
 
Непрочитано 08.12.2005, 19:28  
xelos
Прописка
 
Регистрация: 27.08.2004
Сообщений: 98
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 18 сообщении(ях)
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
Сообщений: 98
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 18 сообщении(ях)
xelos на пути к лучшему
По умолчанию

кстати, INIT_A, DATAPORT что у вас обозначает?
xelos вне форума  
Непрочитано 08.12.2005, 20:08  
AlexSVC
Временная регистрация
 
Регистрация: 10.12.2004
Сообщений: 69
Сказал спасибо: 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
Сообщений: 69
Сказал спасибо: 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 22:57


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.