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

Энкодер+pic16f628a


Lev@

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

Странная программа, особенно такие задержки:)

        call    delay_2
       bcf     PORTB,1
       return

delay_1 nop
       return
delay_2 nop
       nop
       return
       end

Не цитируите полностью предыдущее сообщение!!!

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

Имел ввиду добавить в листинг программы строку конфигурации МК

list p=16f628a

#include <p16f628a.inc>

__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _MCLRE_OFF & _LVP_OFF

Чтоб люди могли запустить ее в МК и насладиться ее работай, следует добавить чтоб увидеть результат на светодиодах необходимо задержку delay_2 увеличить ну скажем до 1000 м.ц.

и для компенсации дребезка контактов delay_1 тоже пусть до 1000 м.ц. Также сообщить народу, что этот листинг программы для одного энкодера, используються ноги 6-7 выход на светодиоды, ноги 12-13 вход энкодера, подключение как в схеме. Автору респект и уважение Спасибо!!! :D :D :D

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Т.К. Разрешены прерывания от изменеия состояния входов, при одном щелчке энкодера каждый из контактов совершает два действия вызывающие прерывания - замыкание и размыкание в разных временных промежутках т.е. имеем четыре входа в программу обработки прерывания, напровление вращения обрабатывается верно. Ставим делитель на 4 и радуемся жизни.

Но есть еще один неприятный момент если пошевелить энкодер без перехода в следующее положение (один из контактов вызовет дребезг) на выходе получим ложные импульсы. :rolleyes:

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

У меня на работе валяются два энкодера, один из них как раз такой-же. У него за один щелчок проходит все 4 импульса. Т.е. в фиксированом состоянии, между щелчками, оба вывода энкодера отпущены (на них висит лог.1).

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

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

Предлагаю посмотреть мой вариант обработчика энкодера.

Программа для одного энкодера, но работает с разными типами.

МК PIC12F629, ноги 2 и 3 подключаем энкодер, ноги 6 и 7 выход импульсов в зависимости от напровления.

   list p=12f629
#include<p12f629.inc>
__CONFIG 0194
;-------------------------------------------------------------------------
;Переменные		     	;
PC		equ	02h
TRM0	equ	01h
OPTIONR	equ	81h			;
TMR1L	equ	0Eh			; Младший регистр таймера ТМ1
TMR1H	equ	0Fh			; Старший регистр таймера ТМ1
Reg_1	equ 0x20		; Регистр счетчика задержки
Reg_2	equ 0x21		; Регистр счетчика задержки
Reg_3	equ 0x22		; Регистр счетчика задержки
W_TEMP  EQU 0x23        ; РЕГИСТР СОХРАНЕНИЯ СОДЕРЖИМОГО W ПРИ ПРЕРЫВАНИЯХ.
STATUS_TEMP  EQU 0x24   ;
W    	EQU  0        	; РЕЗУЛЬТАТ НАПРАВИТЬ В АККУМУЛЯТОР.
F    	EQU  1          ; РЕЗУЛЬТАТ НАПРАВИТЬ В РЕГИСТР.

FSHETL   equ     0x38
FSHETR   equ     0x39
FSHETL1   equ     0x40
FSHETR1   equ     0x41
PORT	  equ     0x42
FSHETL2   equ     0x43
FSHETR2   equ     0x44
FSHETL3   equ     0x45
FSHETR3   equ     0x46

;--------------------------------
#DEFINE BANK0   BCF STATUS,RP0  ;
#DEFINE BANK1   BSF STATUS,RP0  ;
;--------------------------------	
	 org  	0h			; Вектор старта
	 goto	Start	    ;
	 org  	4h			; Вектор прерывания
        call    delay_1
        call    int
        bcf     INTCON,0
        RETFIE  			;конец обработчика прерывания
;=================================================================================
; Начальная инициализация процессора
;=================================================================================
Start	clrf	GPIO		; Инициализация портов
	BANK1				;
	call    3FFh		; 
	movwf	OSCCAL		; Загрузить калибровочную константу
    BANK0				; Банк 0 
	movlw	b'00000000'	; Претделитель таймера ТМ1  1/1
	movwf	T1CON		; ТМ1 от внутренего сигнала 
	movlw	b'00000111'	; Цифровые выводы (компоратор отключен)
	movwf	CMCON		;
	BANK1				; Банк 1
	movlw	b'00111000'	; конфигурация портов
	movwf	TRISIO		; на ввод и выход
	CLRF	VRCON		; Выключить компаратор
	movlw	B'00000111'	; Коэфициэнт претделителя ТМ0 256 
	movwf	OPTIONR		; Внутрений тактовый сигнал, отключить подтягивающие резисторы
	movlw	b'000110000'	; Разрешить прерывания от изменения сигнала на 0-4
	movwf	IOCB
	movlw	b'000110000'	; 
	movwf	WPU 
	BANK0		; Банк 0 	
; ****************************************************************
	CLRF	PORT
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ


;--------------- Основная программа ------------------------------
; Разрешение прерывания от входов
	movlw	B'10001000'	; Разрешаем прерывания от изменения уровня сигнала.
	movwf	INTCON		; Глобальные и от INT   
;--------------- Основная программа ------------------------------  
; Здесь можно делать что-то полезное


L1      goto    L1



;***********************************************
int		MOVF	GPIO,W
	movwf	PORT
;	goto	VB

	btfsc	FSHETL,1		; 00----ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_L
	btfsc	PORT,4
	goto	PRAVO			; НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO			; НЕ НАШ КОД
	BSF		FSHETL,1		; 1 ЧИСЛО ПРИНЯТО
	goto	PRAVO
DVA_L	btfsc	FSHETL,2		; 2 ЧИСЛО ПРОШЛО
	goto	TRI_L
	btfsS	PORT,4
	goto	PRAVO			; 10--- НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO			; НЕ НАШ КОД
	BSF		FSHETL,2		; 2 ЧИСЛО ПРИНЯТО
	goto	PRAVO
TRI_L	btfsc	FSHETL,3		; 11---3 ЧИСЛО ПРОШЛО
	goto	CH_L
	btfsS	PORT,4
	goto	PRAVO			; НЕ НАШ КОД
	btfsS	PORT,5
	goto	PRAVO			; НЕ НАШ КОД
	BSF		FSHETL,3		; 3 ЧИСЛО ПРИНЯТО
	goto	PRAVO
CH_L	btfsC	PORT,4
	goto	PRAVO			; 01---НЕ НАШ КОД
	btfsS	PORT,5
	goto	PRAVO			; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_left
;-------------------------------------------------------
PRAVO	btfsc	FSHETR,1		; 11----ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_R
	btfsS	PORT,4
	GOTO	LEFT2						; НЕ НАШ КОД
	btfsS	PORT,5
	GOTO	LEFT2						; НЕ НАШ КОД
	BSF		FSHETR,1		; 1 ЧИСЛО ПРИНЯТО
	GOTO	LEFT2	
DVA_R	btfsc	FSHETR,2		; 10--- 2 ЧИСЛО ПРОШЛО
	goto	TRI_R
	btfsS	PORT,4
	GOTO	LEFT2						; НЕ НАШ КОД
	btfsc	PORT,5
	GOTO	LEFT2						; НЕ НАШ КОД
	BSF		FSHETR,2		; 2 ЧИСЛО ПРИНЯТО
	GOTO	LEFT2	
TRI_R	btfsc	FSHETR,3		; 00----3 ЧИСЛО ПРОШЛО
	goto	CH_R
	btfsC	PORT,4
	GOTO	LEFT2						; НЕ НАШ КОД
	btfsC	PORT,5
	GOTO	LEFT2						; НЕ НАШ КОД
	BSF		FSHETR,3		; 3 ЧИСЛО ПРИНЯТО
	GOTO	LEFT2	
CH_R	btfsC	PORT,4
	GOTO	LEFT2			; 01--- НЕ НАШ КОД
	btfsS	PORT,5
	GOTO	LEFT2					; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_right
;-----------------------------------------------------------		
LEFT2	btfsc	FSHETL1,1		; 11 ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_L1
	btfss	PORT,4
	goto	PRAVO1			; НЕ НАШ КОД
	btfss	PORT,5
	goto	PRAVO1			; НЕ НАШ КОД
	BSF		FSHETL1,1		; 1 ЧИСЛО ПРИНЯТО
	goto	PRAVO1
DVA_L1	btfsc	FSHETL1,2		; 01- 2 ЧИСЛО ПРОШЛО
	goto	TRI_L1
	btfsC	PORT,4
	goto	PRAVO1			; НЕ НАШ КОД
	btfsS	PORT,5
	goto	PRAVO1			; НЕ НАШ КОД
	BSF		FSHETL1,2		; 2 ЧИСЛО ПРИНЯТО
	goto	PRAVO1
TRI_L1	btfsc	FSHETL1,3		; 00--3 ЧИСЛО ПРОШЛО
	goto	CH_L1
	btfsc	PORT,4
	goto	PRAVO1			; НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO1			; НЕ НАШ КОД
	BSF		FSHETL1,3		; 3 ЧИСЛО ПРИНЯТО
	goto	PRAVO1
CH_L1	btfss	PORT,4
	goto	PRAVO1			; 10---НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO1			; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_left
;-------------------------------------------------------
PRAVO1	btfsc	FSHETR1,1		; 00--ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_R1
	btfsc	PORT,4
	GOTO	VB				; НЕ НАШ КОД
	btfsc	PORT,5
	GOTO	VB							; НЕ НАШ КОД
	BSF		FSHETR1,1		; 1 ЧИСЛО ПРИНЯТО
	GOTO	VB		
DVA_R1	btfsc	FSHETR1,2		; 01---2 ЧИСЛО ПРОШЛО
	goto	TRI_R1
	btfsc	PORT,4
	GOTO	VB							; НЕ НАШ КОД
	btfss	PORT,5
	GOTO	VB						; НЕ НАШ КОД
	BSF		FSHETR1,2		; 2 ЧИСЛО ПРИНЯТО
	GOTO	VB		
TRI_R1	btfsc	FSHETR1,3		; 11==3 ЧИСЛО ПРОШЛО
	goto	CH_R1
	btfss	PORT,4
	GOTO	VB							; НЕ НАШ КОД
	btfss	PORT,5
	GOTO	VB							; НЕ НАШ КОД
	BSF		FSHETR1,3		; 3 ЧИСЛО ПРИНЯТО
	GOTO	VB		
CH_R1	btfss	PORT,4
	GOTO	VB					; 10--НЕ НАШ КОД
	btfsc	PORT,5
	GOTO	VB					; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_right
;===================================================================================
;===================================================================================
;===================================================================================
VB		btfsc	FSHETL2,1		; 10----ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_L2
	btfss	PORT,4
	goto	PRAVO2			; НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO2			; НЕ НАШ КОД
	BSF		FSHETL2,1		; 1 ЧИСЛО ПРИНЯТО
	goto	PRAVO2
DVA_L2	btfsc	FSHETL2,2		; 2 ЧИСЛО ПРОШЛО
	goto	TRI_L2
	btfsS	PORT,4
	goto	PRAVO2			; 11--- НЕ НАШ КОД
	btfss	PORT,5
	goto	PRAVO2			; НЕ НАШ КОД
	BSF		FSHETL2,2		; 2 ЧИСЛО ПРИНЯТО
	goto	PRAVO2
TRI_L2	btfsc	FSHETL2,3		; 01---3 ЧИСЛО ПРОШЛО
	goto	CH_L2
	btfsc	PORT,4
	goto	PRAVO2			; НЕ НАШ КОД
	btfsS	PORT,5
	goto	PRAVO2			; НЕ НАШ КОД
	BSF		FSHETL2,3		; 3 ЧИСЛО ПРИНЯТО
	goto	PRAVO2
CH_L2	btfsC	PORT,4
	goto	PRAVO2			; 00---НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO2			; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_left
;-------------------------------------------------------
PRAVO2	btfsc	FSHETR2,1		; 10----ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_R3
	btfsS	PORT,4
	GOTO	LEFT3						; НЕ НАШ КОД
	btfsc	PORT,5
	GOTO	LEFT3						; НЕ НАШ КОД
	BSF		FSHETR2,1		; 1 ЧИСЛО ПРИНЯТО
	GOTO	LEFT3	
DVA_R3	btfsc	FSHETR2,2		; 00--- 2 ЧИСЛО ПРОШЛО
	goto	TRI_R3
	btfsc	PORT,4
	GOTO	LEFT3						; НЕ НАШ КОД
	btfsc	PORT,5
	GOTO	LEFT3						; НЕ НАШ КОД
	BSF		FSHETR2,2		; 2 ЧИСЛО ПРИНЯТО
	GOTO	LEFT3	
TRI_R3	btfsc	FSHETR2,3		; 01----3 ЧИСЛО ПРОШЛО
	goto	CH_R3
	btfsC	PORT,4
	GOTO	LEFT3						; НЕ НАШ КОД
	btfss	PORT,5
	GOTO	LEFT3						; НЕ НАШ КОД
	BSF		FSHETR2,3		; 3 ЧИСЛО ПРИНЯТО
	GOTO	LEFT3	
CH_R3	btfss	PORT,4
	GOTO	LEFT3			; 11--- НЕ НАШ КОД
	btfsS	PORT,5
	GOTO	LEFT3					; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_right
;-----------------------------------------------------------		
LEFT3	btfsc	FSHETL3,1		; 01 ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_L4
	btfsc	PORT,4
	goto	PRAVO3			; НЕ НАШ КОД
	btfss	PORT,5
	goto	PRAVO3			; НЕ НАШ КОД
	BSF		FSHETL1,1		; 1 ЧИСЛО ПРИНЯТО
	goto	PRAVO3
DVA_L4	btfsc	FSHETL1,2		; 00- 2 ЧИСЛО ПРОШЛО
	goto	TRI_L4
	btfsC	PORT,4
	goto	PRAVO3			; НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO3			; НЕ НАШ КОД
	BSF		FSHETL3,2		; 2 ЧИСЛО ПРИНЯТО
	goto	PRAVO3
TRI_L4	btfsc	FSHETL3,3		; 10--3 ЧИСЛО ПРОШЛО
	goto	CH_L4
	btfss	PORT,4
	goto	PRAVO3			; НЕ НАШ КОД
	btfsc	PORT,5
	goto	PRAVO3			; НЕ НАШ КОД
	BSF		FSHETL3,3		; 3 ЧИСЛО ПРИНЯТО
	goto	PRAVO3
CH_L4	btfss	PORT,4
	goto	PRAVO3			; 11---НЕ НАШ КОД
	btfss	PORT,5
	goto	PRAVO3			; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_left
;-------------------------------------------------------
PRAVO3	btfsc	FSHETR3,1		; 01--ПЕРВОЕ ЧИСЛО ПРОШЛО
	goto	DVA_R4
	btfsc	PORT,4
	return					; НЕ НАШ КОД
	btfss	PORT,5
	return					; НЕ НАШ КОД
	BSF		FSHETR3,1		; 1 ЧИСЛО ПРИНЯТО
	return
DVA_R4	btfsc	FSHETR3,2		; 11---2 ЧИСЛО ПРОШЛО
	goto	TRI_R4
	btfss	PORT,4
	return					; НЕ НАШ КОД
	btfss	PORT,5
	return					; НЕ НАШ КОД
	BSF		FSHETR3,2		; 2 ЧИСЛО ПРИНЯТО
	return
TRI_R4	btfsc	FSHETR3,3		; 10==3 ЧИСЛО ПРОШЛО
	goto	CH_R4
	btfss	PORT,4
	return					; НЕ НАШ КОД
	btfsc	PORT,5
	return					; НЕ НАШ КОД
	BSF		FSHETR3,3		; 3 ЧИСЛО ПРИНЯТО
	return
CH_R4	btfsc	PORT,4
	return					; 00--НЕ НАШ КОД
	btfsc	PORT,5
	return					; НЕ НАШ КОД
	CLRF	FSHETL			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR1			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR2			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETL3			; СБРОСИТЬ СЧЕТЧИКИ
	CLRF	FSHETR3			; СБРОСИТЬ СЧЕТЧИКИ
	goto	flash_right

;-----------------------------------------------------------------------------------
flash_left
       bsf     GPIO,0
       call    delay_2
       bcf     GPIO,0
       return  
flash_right
       bsf     GPIO,1
       call    delay_2
       bcf     GPIO,1
       return
delay_1 
; Задержка 300 машинных циклов
; Длительность задержки 300 микросекунд
; Частота задающего генератора 4 МГц

           movlw       .99
           movwf       Reg_1
           decfsz      Reg_1,F
           goto        $-1
           nop
           nop
       	return
delay_2 
; Задержка 1 000 машинных циклов
; Длительность задержки 0.001 секунд
; Частота задающего генератора 4 МГц

           movlw       .75
           movwf       Reg_1
           movlw       .2
           movwf       Reg_2
           decfsz      Reg_1,F
           goto        $-1
           decfsz      Reg_2,F
           goto        $-3
       	return
;========================================================================
      		end

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

в программе внутриние резисторы активны, поэтому ноги 2 и 3 не надо подтягивать к плюсику питания резисторами.

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

  • 4 года спустя...

Уважаемый, RGB-V! Прошло 4 года с момента публикации Вашего варианта обработки энкодера на PIC12F629.

НО! если Вы живы-здоровы и читаете эти строки, то сбросьте, пожалуйста, прошивку в HEX-кодах.

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

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

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

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

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

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

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

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

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

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

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