#include <P12F629.INC>
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
LED equ 5; ИК-светодиод
CFG equ 4; Nikon (1) / Canon (0)
;===============================================================================
; Переменные
;===============================================================================
CBLOCK 0x020
DEL
DEL_MS
IMP
COUNT
ENDC
;===============================================================================
; Сброс
;===============================================================================
ORG 0
GOTO START
;===============================================================================
; Прерывания
;===============================================================================
ORG 4
RETFIE
;===============================================================================
; Подпрограммы
;===============================================================================
; Подпрограмма задержки (в микросекундах, 770 мкс max)
;(Перед вызовом поместить величину задержки в W)
DEL_MK MOVWF DEL
M1 DECFSZ DEL, F
GOTO M1
RETLW 0
; Подпрограмма задержки (в миллисекундах, 256 мс max)
;(Перед вызовом поместить величину задержки в W)
DEL_M MOVWF DEL_MS
MOVLW 0xA5
M2 CALL DEL_MK
CALL DEL_MK
DECFSZ DEL_MS, F
GOTO M2
RETLW 0
; Подпрограмма вывода импульса для Nikon (заполнение 38,4 кГц)
;(Перед вызовом поместить длительность импульса в W)
NIK MOVWF IMP
M3 BCF GPIO, LED
MOVLW 0x02
CALL DEL_MK
NOP
BSF GPIO, LED
MOVLW 0x01
CALL DEL_MK
NOP
DECFSZ IMP, F
GOTO M3
RETLW 0
; Подпрограмма вывода сигнала для Nikon
NIKON MOVLW 0x4D
CALL NIK; импульс 2 мс
MOVLW 0x12
CALL DEL_M; пауза 27,8 мс
MOVLW 0x47
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
MOVLW 0x01
CALL DEL_M; пауза 1,6 мс
MOVLW 0x69
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
MOVLW 0x02
CALL DEL_M; пауза 3,6 мс
MOVLW 0xFF
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
RETLW 0
; Подпрограмма вывода импульса для Canon (заполнение 33 кГц)
;(Перед вызовом поместить длительность импульса в W)
CAN MOVWF IMP
M4 BCF GPIO, LED
MOVLW 0x02
CALL DEL_MK
NOP
NOP
NOP
BSF GPIO, LED
MOVLW 0x01
CALL DEL_MK
NOP
NOP
NOP
DECFSZ IMP, F
GOTO M3
RETLW 0
; Подпрограмма вывода сигнала для Canon
CANON MOVLW 0x13
CALL CAN; импульс 0,5 мс
MOVLW 0x05
CALL DEL_M; пауза 7,3 мс
MOVLW 0x13
CALL CAN; импульс 0,5 мс
RETLW 0
; Подпрограмма задержки на 1 секунду 0xA1
DEL_1S MOVLW 0xFF
CALL DEL_M
MOVLW 0xFF
CALL DEL_M
MOVLW 0x88
CALL DEL_M
RETLW 0
;===============================================================================
; Основная программа
;===============================================================================
START BCF STATUS, RP0; Выбран банк 0
MOVLW B'00000000'
MOVWF INTCON
MOVLW B'00000111'
MOVWF CMCON; Отключаем встроенные компараторы
BSF STATUS, RP0; Выбран банк 1
MOVLW B'00000111'
MOVWF OPTION_REG
CALL 3FFh; Загрузить константу калибровки генератора
MOVWF OSCCAL
MOVLW B'00011111'; Порты (направление)
MOVWF TRISIO
MOVLW B'00010111'; Подтягивающие резисторы
MOVWF WPU
BCF STATUS, RP0; Выбран банк 0
MOVLW B'00100000'; Порты
MOVWF GPIO
;--------------------------
MOVLW 0x12
CALL DEL_M
LP1 BTFSS GPIO, CFG
CALL CANON
BTFSS GPIO, CFG
GOTO LP2
CALL NIKON
LP2 MOVF GPIO, W; Считать состояние перемычек
ANDLW B'00000111'
ADDLW B'11111000'
MOVWF COUNT
COMF COUNT, F
BTFSC STATUS, Z; Выключение, если нет
SLEEP
MOVF COUNT, W
XORLW 0x01; Включен 1 тайминг
BTFSC STATUS, Z
GOTO SET2
MOVF COUNT, W
XORLW 0x02; Включен 2 тайминг
BTFSC STATUS, Z
GOTO SET4
MOVF COUNT, W
XORLW 0x03; Включен 3 тайминг
BTFSC STATUS, Z
GOTO SET8
MOVF COUNT, W
XORLW 0x04; Включен 4 тайминг
BTFSC STATUS, Z
GOTO SET15
MOVF COUNT, W
XORLW 0x05; Включен 5 тайминг
BTFSC STATUS, Z
GOTO SET30
MOVF COUNT, W
XORLW 0x06; Включен 6 тайминг
BTFSC STATUS, Z
GOTO SET1M
GOTO SET2M; Включен 7 тайминг
SET2 MOVLW 0x02
GOTO TIME
SET4 MOVLW 0x04
GOTO TIME
SET8 MOVLW 0x08
GOTO TIME
SET15 MOVLW 0x0F
GOTO TIME
SET30 MOVLW 0x1E
GOTO TIME
SET1M MOVLW 0x3C
GOTO TIME
SET2M MOVLW 0x78
GOTO TIME
TIME MOVWF COUNT
LP3 CALL DEL_1S
DECFSZ COUNT, F
GOTO LP3
GOTO LP1
END
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий