...

вторник, 14 апреля 2015 г.

Делаем ИК-пульт ДУ для фотоаппарата

errorlevel 0,-207,-205,-302,-203

#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.


Комментариев нет:

Отправить комментарий