Перейти к содержанию

Энкодер+pic16f628a


Lev@

Рекомендуемые сообщения

Решил выложить один из моих проектов. Суть проекта:

Есть два енкодера и микроконтроллер нужно при вращении "вправо" на одно выходе МК получать импульсы, при вращении "влево" на другом. Тоже самое для другого енкодера.

Схема:

001lgd.th.jpg

Прошивка написана на PicBasicPRO:

'****************************************************************
'*  Name	: Обработчик сигналов энкодера                                                             *
'*  Author  : Lev@                                                                                                    *
'*  Notice  : Copyright © 2009 Lev@                                                                          *
'*		  : All Rights Reserved                                                                              *
'*  Date	: 20.10.2009                                                                                            *
'*  Version : 1.0	                                                                                                      *
'*  Notes   :	                                                                                                      *
'*		  :	                                                                                                      *
'*************************************************************************
REGIN VAR BYTE
FLAGIN VAR BYTE

TRISB = %11110000	   	' Направление порта В			   
OPTION_REG = %10000000	  ' Подтягив. резисторы
ON INTERRUPT GOTO INT   	' При прерывании переход к подпрограмме
INTCON = %10001000		  ' Разрешение глоб. прерываний, прерывания по изм. RB7:RB4   
REGIN=0			  ' Очистка всех ячеек регистров
FLAGIN=0						  

' Заносим состояние входов в память
IF PORTB.4=1  THEN 
REGIN.0=1	
ELSE 
REGIN.0=0
ENDIF
IF PORTB.5=1  THEN 
REGIN.1=1	
ELSE 
REGIN.1=0
ENDIF
IF PORTB.6=1  THEN 
REGIN.2=1	
ELSE 
REGIN.2=0
ENDIF
IF PORTB.7=1  THEN 
REGIN.3=1	
ELSE 
REGIN.3=0
ENDIF			   
CLEARWDT
Main:						' < Основная программа
CLEARWDT					 
GOTO Main			   	' Зацикливание осн. программы >

DISABLE					 ' < Запрет всех прерываний
INT:					' Метка подпрограммы - обработчика прерываний
IF INTCON.0 = 0 THEN ET ' Проверка флага прерываний - было ли прерывание по изм. RB7:RB4
CLEARWDT
IF PORTB.4 <> REGIN.0 THEN 
 FLAGIN.0=1			  ' Установить флаг прерывания от соотв. входа RB4
   IF FLAGIN.1=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.0=1			' Если да - импульс
	 PAUSE 10			' Формируем задежку импульса 0,01с
	 PORTB.0=0			' Конец импульса
	 FLAGIN.0=0			' Обнуляем флаг прерывания от соотв. входа RB4
	 FLAGIN.1=0			' Обнуляем флаг прерывания от соотв. входа RB5
	 ' Теперь нужно востановить значения REGIN
	 IF PORTB.4=1  THEN 
		REGIN.0=1	
	  ELSE 
		REGIN.0=0
	 ENDIF
	 IF PORTB.5=1  THEN 
		REGIN.1=1	
	  ELSE 
		REGIN.1=0
	 ENDIF
   ENDIF
 ENDIF  
 CLEARWDT 
 IF PORTB.5 <> REGIN.1 THEN 
 FLAGIN.1=1			  ' Установить флаг прерывания от соотв. входа RB5
   IF FLAGIN.0=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.1=1			' Если да - импульс
	 PAUSE 10			' Формируем задежку импульса 0,01с
	 PORTB.1=0			' Конец импульса
	 FLAGIN.0=0		   ' Обнуляем флаг прерывания от соотв. входа RB4
	 FLAGIN.1=0		   ' Обнуляем флаг прерывания от соотв. входа RB5
	 ' Теперь нужно востановить значения REGIN
	 IF PORTB.4=1  THEN 
		REGIN.0=1	
	  ELSE 
		REGIN.0=0
	 ENDIF
	 IF PORTB.5=1  THEN 
		REGIN.1=1	
	  ELSE 
		REGIN.1=0
	 ENDIF
   ENDIF
ENDIF
CLEARWDT
IF PORTB.6 <> REGIN.2 THEN 
 FLAGIN.2=1			  ' Установить флаг прерывания от соотв. входа RB6
   IF FLAGIN.3=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.2=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.2=0			' Конец импульса
	 FLAGIN.2=0			' Обнуляем флаг прерывания от соотв. входа RB6
	 FLAGIN.3=0			' Обнуляем флаг прерывания от соотв. входа RB7
	 ' Теперь нужно востановить значения REGIN
	 IF PORTB.6=1  THEN 
	  REGIN.2=1	
	 ELSE 
	  REGIN.2=0
	 ENDIF
	 IF PORTB.7=1  THEN 
	  REGIN.3=1	
	 ELSE 
	  REGIN.3=0
	 ENDIF	  
   ENDIF
ENDIF
CLEARWDT
IF PORTB.7 <> REGIN.3 THEN 
 FLAGIN.3=1			  ' Установить флаг прерывания от соотв. входа RB7
   IF FLAGIN.2=1 THEN	 ' Проверка наличия изменения сигнала на парном выводе
	 PORTB.3=1			' Если да - импульс
	 PAUSE 100			' Формируем задежку импульса 0,1с
	 PORTB.3=0			' Конец импульса
	 FLAGIN.2=0			' Обнуляем флаг прерывания от соотв. входа RB6
	 FLAGIN.3=0			' Обнуляем флаг прерывания от соотв. входа RB7
	 ' Теперь нужно востановить значения REGIN
	 IF PORTB.6=1  THEN 
	  REGIN.2=1	
	 ELSE 
	  REGIN.2=0
	 ENDIF
	 IF PORTB.7=1  THEN 
	  REGIN.3=1	
	 ELSE 
	  REGIN.3=0
	 ENDIF 
   ENDIF
ENDIF
CLEARWDT
ET:					' Подготовка к выходу из обработчий
INTCON.0=0		 ' Сброс флага прерываний по изм. RB7:RB4
RESUME
ENABLE					  ' Разрешение всех прерываний >
END

Енкодеры подключаются к RB4-5 и RB6-7 соответственно, выходы RB0-1 и RB2-3.

Прога оттестирована в Proteus 7 Professional.

Есть только ограничения по частоте входного сигнала, устраняется регулировкой длительности выходного импульса.

В прилепленом архиве файл прошивки.

Кушаем на здоровье

002.rar

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А какая придельная входная частота?

А какая нужна? ;)

Добавив несколько строчек - можно избежать этого бага...

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я немного не ту цифру назвал из за присутствия двух сигналов на входе (sin, cos), точность датчика может увеличится в 4-ре раза, нежели количество импульсов одного из сигналов на оборот вала. Так вот число (частота), которую я назвал - реально в 4 раза меньше.

Например: скорость (максимальная) движения координаты станока 10 метров/мин. Один оборот двинателя соответствует 10 мм, тогда частота вращения двигателя - 10000/10=1000 об/мин ------ 1000/60=17 об/сек. Энкодер имеет 2500 на оборот, тогда 2500*17=40 кГц. -ВОТ ЭТО ПИКОВАЯ ЧАСТОТА НА ВХОДЕ.

Я сенйчас пытаюсь реализовать данную задачу, с индикацией. На данный момент это не обходиться одним PIC16F628A!

Ссылка на комментарий
Поделиться на другие сайты

Я немного не ту цифру назвал из за присутствия двух сигналов на входе (sin, cos), точность датчика может увеличится в 4-ре раза, нежели количество импульсов одного из сигналов на оборот вала. Так вот число (частота), которую я назвал - реально в 4 раза меньше.

Например: скорость (максимальная) движения координаты станока 10 метров/мин. Один оборот двинателя соответствует 10 мм, тогда частота вращения двигателя - 10000/10=1000 об/мин ------ 1000/60=17 об/сек. Энкодер имеет 2500 на оборот, тогда 2500*17=40 кГц. -ВОТ ЭТО ПИКОВАЯ ЧАСТОТА НА ВХОДЕ.

Я сенйчас пытаюсь реализовать данную задачу, с индикацией. На данный момент это не обходиться одним PIC16F628A!

Ну мну такие частоты покаместь не нужны - энкотеры это "громкость +/-" и "трек +/-" Можно изварится и до 40 кГц, но нужен другой алгоритм... хотя подымаешь частоту кварца(до 20МГц) + предделители... и все будет нормально

у мну частота одного машинного такта - 1МГц - даже при таком можно добится нормального рез.!

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

ну вот щас у меня в руках разобранный энкодер, у которого шаг примерно 0.1°... один оборот примерно 1см (и ничего не мешает сделать меньше)... ну а дальше все зависит от скорости... если у чпу перемещение каретки возможно со скоростью, скажем, 20см/с (а это не особо большая скорость), получается частота уже 72кгц... ну а если нужна еще большая точность с использованием повышающего редуктора, то частота соответственно вырастет...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

Скажу так - 8 Мгц было мало...

ОГО и что на такой частоте работало? Исполнительный механизм ЧПУ - ... задымел-бы!

Все равно тактовой частоты в 20МГц для обработки сигнала с частотой 720кГц с головой хватит! а если еще прогу подкоректировать чтобы поменьше инструкций переходов было - то можно выжать еще больше

Ссылка на комментарий
Поделиться на другие сайты

Да нет.. Просто датчик отдаёт 4096 импульсов за оборот.... И не щаговики там стояли а сервомоторы по киловату... Двигало и быстрее метра в секунду... А так как это quadrature - отдаёт частоту в 4 раза больше... Вот и получалось что на 8 Мгц теряло и 200 шагов за метр... Переделал на 16 и всё стало Ок. Там в тойже ПЛИС был и счётчик 64 разрядов...

Ссылка на комментарий
Поделиться на другие сайты

Да нет.. Просто датчик отдаёт 4096 импульсов за оборот.... И не щаговики там стояли а сервомоторы по киловату... Двигало и быстрее метра в секунду... А так как это quadrature - отдаёт частоту в 4 раза больше... Вот и получалось что на 8 Мгц теряло и 200 шагов за метр... Переделал на 16 и всё стало Ок. Там в тойже ПЛИС был и счётчик 64 разрядов...

Если не секрет что за станок такой? Себе в будущем тоже буду делать... правда для бытовых целей.

Ссылка на комментарий
Поделиться на другие сайты

Сделал по быстрому макетку зашил PIC - включил... и! И! ... и ничего! Парился полдня.

.... плюнул на Basic и написал прогу за 1 час на ASM! Прошил - включил и!... И все работает! ... задумался!? ХЗ. но старый конь(ASM) борозны не портит!

Лист кому интересно:

list p=16f628a
#include <p16f628a.inc>
;--------------------- Объявляем регистры -------------------
PORT	equ	0x20	; Регистр состояния портов
FLAG	equ	0x21	; Регистр прерываний от RB4:7
RB	equ	0x22	; Регистр для временного хранения состояния выводов

org 0x00
reset
goto start
org 0x04	; Обработчик прерываний
bcf	INTCON,7	; Запрет всех прерываний
btfsc	INTCON,0	; Изменился сигнал на выводах RB4:7 ?
CLRWDT
goto	PRPR
org 0x20
; **************************************************************
start
bsf	STATUS,RP0	; Переходим в банк 1
movlw	b'11110000'	; Инициализируем состояние выходов порта B
movwf	TRISB	; RB4:7 - входа, RB0:3 - выходы
bcf	OPTION_REG,7	; Включаем подтягивающие резисторы
bcf	OPTION_REG,5	; Внутренный тактовый сигнал
bcf	STATUS,RP0	; Переходим в банк 0
L7	CLRWDT
clrf	PORTB	;Очистка порта В
clrf	PORT	; Очистка регистра состояния порта В
clrf	FLAG	; Очистка регистра флагов прерываний от RB4:7
clrf	INTCON	;Сброс и запрещение всех прерываний

;******************** Ждем равенства сигналов
;******************** и записуем состояние в регистр

L1	CLRWDT
btfsc	PORTB,6	; Проверка состояния входов RB6 1?
goto	L2	; Переход к проверке RB7=1?
btfss	PORTB,6	; Проверка состояния входов RB6 0?
goto	L3	; Переход к проверке RB7=0?
goto	L1	; Возврат к начальной проверке
L2	btfsc	PORTB,7	; Проверка состояния входов RB7 1?
goto	L4	; Равенство истино > переход
goto	L1	; Возврат к начальной проверке
L3	btfss	PORTB,7	; Проверка состояния входов RB7 0?
goto	L5	; Равенство истино > переход
goto	L1	; Возврат к начальной проверке
L4	bsf	PORT,0	; Занесем в в регистр 1
goto	L6
L5	bcf	PORT,0	; Занесем в в регистр 0
CLRWDT
;**********************
;**********************
L6	clrf	INTCON	;Сброс и запрещение всех прерываний
bsf	INTCON,3	; Разрешение прерываний по изм. RB4:7
bsf	INTCON,7	; глобальное разрешение прерываний
main	CLRWDT
NOP			; Зацикливание основной программы
goto main

PRPR

; ********************** Проверка - изменилось состояние RB6?
;*************************************************************
btfsc	FLAG,0	; Было-ли ранее изменение RB6?
goto	K2	; Да - проверяем RB7
btfsc	PORTB,6	; Проверка состояния входов RB6 1?
goto	K1
btfss	PORTB,6	; Проверка состояния входов RB6 0?
goto	K4
goto	K2	; Проверим другой вывод - RB7
K4	btfsc	PORT,0	; Проверка состояния регистра 0?
goto	K3	; Установим бит изменения состояния
goto	K2	; Проверим другой вывод - RB7
K1	btfss	PORT,0	; Проверка состояния регистра 1?
goto	K3	; Установим бит изменения состояния
goto	K2	; Проверим другой вывод - RB7
;------------------------Если изменилось установим бит
K3	bsf	FLAG,0	; Установим бит F0 в "1"
CLRWDT
;------------------------ Проверим было-ли изменение другого вывода
btfss	FLAG,1	; Проверка
goto	L6
goto	KL	; Переход к подпрограмме формирования импульса
KL	bsf	PORTB,0	; Начало импульса
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT

bcf	PORTB,0	; Конец импульса
goto	L7

; ********************** Проверка - изменилось состояние RB7?
;*************************************************************
K2
;	btfsc	FLAG,1	; Было-ли ранее изменение RB7?
;	goto	K2	; Да - проверяем RB7

btfsc	PORTB,7	; Проверка состояния входов RB7 1?
goto	N1
btfss	PORTB,7	; Проверка состояния входов RB7 0?
goto	N4
goto	L7
N4	btfsc	PORT,0	; Проверка состояния регистра 0?
goto	N3	; Установим бит изменения состояния
goto	L7
N1	btfss	PORT,0	; Проверка состояния регистра 1?
goto	N3	; Установим бит изменения состояния
goto	L7
;------------------------Если изменилось установим бит
N3	bsf	FLAG,1	; Установим бит F1 в "1"
CLRWDT
;------------------------ Проверим было-ли изменение другого вывода
btfss	FLAG,0	; Проверка
goto	L6
goto	NL	; Переход к подпрограмме формирования импульса
NL	bsf	PORTB,1	; Начало импульса
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
NOP	; Сдесь будет формироваться задержка
CLRWDT

bcf	PORTB,1	; Конец импульса
CLRWDT
goto	L7



end

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Переделал все с нуля! Ввел в схему пару микрух логики(4714 и 4011) переписал прогу для МК сменил камень на более проще - 12F629 в Proteus частота обработки дошла до 100кГц - дальше мой комп отказывается работать! :angry: но мне больше то и 2кГц и ненужно... ;)

... счя рисую печатку - буду в железе проверять.

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Рылся в НЕТе и случайно наткулся на вот такую загогулину - "Quadrature decoder" и спец микрухи HCTL-2022 для енкодеров и оказывается есть ПИКи с этим чудом: PIC18F2331/2431/4331/4431 ... !!! Попробую нарыть такую весчицу в своем селе!

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

..........оказывается есть ПИКи с этим чудом: PIC18F2331/2431/4331/4431 ... !!! Попробую нарыть такую весчицу в своем селе!

Это так называемые "моторные" камни. Они расчитаны на использование в контроллерах асинхронных двигателей. Все имеют быстрый АЦП, многофазный ШИМ и квадратурный энкодер таходатчика. === вычеркнуто===

Пожалуй поправлюсь - подешевели 2431- 145 руб, а 4431 - 207 руб. Терпимо...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Хотя 12F629 - 25грн. CD4011 - 3грн. CD4714 - 3грн. = 31грн - экономим!!! А со скидкой можно и за 28 грн взять! Поэтому покаместь PIC18F2331 берем на заметку - его время еще прийдет - нужно будет делать станок с ЧПУ.

Ссылка на комментарий
Поделиться на другие сайты

  • 10 месяцев спустя...

Апну темку

	list	p=16f628a
#include	<p16f628a.inc>
;--------------------- Объявление регистров -------------------
Reg_0	equ	0x20
Reg_1	equ	0x21
Reg_2	equ	0x22
Reg_3	equ	0x23
X1	equ	0x24
X2	equ	0x25
Y1	equ	0x26
Y2	equ	0x27

goto	start
org	0x04	;
call	delay_1
movf	PORTB,0
movwf	Reg_1
call	int

clrf	Reg_0
clrf	Reg_1
clrf	Reg_2
clrf	Reg_3
clrf	X1
clrf	X2
clrf	Y1
clrf	Y2
movf	PORTB,0
movwf	Reg_0

bcf	INTCON,RBIF
bsf	INTCON,RBIE
RETFIE	;конец обработчика прерывания

; ********************* Фоновая программа ***********************
start
bcf	STATUS,RP0	;Bank 0
bsf	STATUS,RP0	;Bank 1
bcf	TRISB,0
bcf	TRISB,1
bcf	TRISB,2
bcf	TRISB,3
bsf	TRISB,4
bsf	TRISB,5
bsf	TRISB,6
bsf	TRISB,7
bcf	STATUS,RP0	;Bank 0
begin	clrf	PORTB	;PORTB
;--------------- Основная программа ------------------------------
clrf	Reg_0
clrf	Reg_1
clrf	Reg_2
clrf	Reg_3
clrf	X1
clrf	X2
clrf	Y1
clrf	Y2

movf	PORTB,0
movwf	Reg_0
bsf	INTCON,RBIE	;b3
bsf	INTCON,GIE	;b7	
L1	goto	L1

;***********************************************
int

; 1 side - left
btfsc	Reg_0,7
comf	X2,1	; бит =1  => X2=0xFF
btfsc	Reg_0,6
comf	X1,1	; бит =1  => X1=0xFF
btfsc	Reg_1,7
comf	Y2,1	; бит =1  => Y2=0xFF
btfsc	Reg_1,6
comf	Y1,1	; бит =1  => Y1=0xFF
; дальше тупая логика  
movf	X2,0 
xorwf	Y1,1	; Y1=X2^Y1
movf	Y1,0
movwf	Reg_2	; Reg_2=X2^Y1
movf	X1,0
xorwf	Y2,1	; Y2=X1^Y2
movf	Y2,0
movwf	Reg_3	; Reg_3=X1^Y2
comf	Y2,1	; Y2=~Y2
movf	Y2,0
andwf	Y1,1	; Y1=Y1&Y2
btfsc	Y1,7
goto	flash_left

; 2 side - right
comf	Reg_2,1	
movf	Reg_2,0
andwf	Reg_3,1
btfsc	Reg_3,7
goto	flash_right
return

flash_left
bsf	PORTB,0
call	delay_2
bcf	PORTB,0
return	

flash_right
bsf	PORTB,1
call	delay_2
bcf	PORTB,1
return

delay_1	nop
return
delay_2	nop
nop
return
end

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...