|
;************************************************************************
; Autor: Alexey Starostin *
; Company: ARM *
;************************************************************************
LIST P=16F84
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
#include ;********************************************************************** ;Определения ;Флаги ;************************************************************************ xx movlw BAYT1 movlw .4 bsf dat decfsz COUNT,f _Next_Bit _Next_Byt ;===================================================== ;+++++++++ btfsc bad call _Code ;Декодирование третьего бита - TOGGLE ;Забивка команды movf BAYT4,w ;BAYT4 ;========= movwf PORTB bcf PORTA,0 bcf PORTA,2 Home ;Окончание!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;==========Декодирование одного такта====================== movlw ONE ;Это 1? movlw ZERO ;Это 0? goto _Bad ;Это ошибка !!!! BANK0 ;========================================================================== ;========================Комманды=========================================== ;*************************************************************************** ;********************************************************************** ;======================================================================
E-mail:
info@telesys.ru
#include
#include
; #include
;=================Биты инициализации=======================================
INIT_OPT EQU B'10010010' ;OPTION - включены внешние подтягивающие резисторы
INIT_INT EQU B'00001000' ;INTCON
;==========================================================================
INIT_PORTA EQU B'00000' ;PORTA
INIT_PORTB EQU B'11000000' ;PORTB
;========================Комманды===========================================
SYS EQU .1 ;Код системы
ON EQU .16 ;Код включения
OFF EQU .17 ;Код выключения
LEDS EQU .13 ;Код управления светодиодами
;======================================================================
ONE EQU B'01000000' ; 2-bit incoming pattern matches
ZERO EQU B'10000000'
TEST EQU B'11000000'
;***************************************************************************
CBLOCK 0x0C
COUNT ; A counter, used multiple places
FIELD
TOGGLE ; The RC5 Toggle bit
SYSTEM ; The RC5 System word
COMND ; The RC5 Command word
BIT_COUNT ; Counter for incoming bits
BYTE_COUNT ; Counter for buffer bytes
TEMP ; Used by PARSE to hold the 2-bit pattern
BUF
BAYT1
BAYT2
BAYT3
BAYT4
BIT1
BIT2
BIT3
BIT4
BIT5
BIT6
DELAYL
DELAYH
COUNTERL
COUNTERH
TEMP_ROM_ADR
Call_Temp
Count
FLAGS
w_temp
status_temp
super_count
ENDC
;Железо
#DEFINE di PORTB,7 ;Вход ИК - ресивера
#DEFINE led PORTA,1 ;Выход для подключения светодиода
#DEFINE dat INDF,0
#DEFINE d_temp TEMP,0
#DEFINE bad FLAGS,0
; Program start
;***********************************************************************
ORG 0x0000 ; RESET vector location
goto main
;*******************************************************************
ORG 0x0004
goto int
;**************МАКРОСЫ**********************************************
INIT_
CLEAR_
DELAY_
;*****************Подпрограммы**************************************
ww
movlw .8
movwf COUNT
goto ss
movlw .4
movwf COUNT
decf super_count,f
goto ss
;==============Обработка прерывания=================================
;********************************************************************
int ;Подпрограмма
movwf w_temp
movf STATUS,w
movwf status_temp
;======================================================
bcf INTCON,T0IF
movlw .203
;""""""
movwf TMR0
movwf FSR
movwf super_count
qq
btfss INTCON,T0IF
goto qq
;"""""""
;=====================================================
_рр
movlw b'00000010'
movwf INDF
movlw .6
movwf COUNT
nop
bcf INTCON,T0IF ;888
movlw .146
;""""""
movwf TMR0
btfsc di
goto Home
;===============================================
ss
btfss INTCON,T0IF
goto ss
;"""""""
ll
bcf INTCON,T0IF ;888
movlw .146
;"""""""
movwf TMR0
btfsc di
bcf dat
goto _Next_Bit
goto _Next_Byt
rlf INDF,f
goto ss
incf FSR,f
movlw 18
xorwf FSR,w
bz xx
_dd
decfsz super_count,f
goto ww
_Decode
rlf BAYT4,f ;Всего 14 х 2 = 28 бит
rlf BAYT4,f ;
rlf BAYT4,f ;
rlf BAYT4,f ;
movf BAYT1,w
movwf TEMP
;+++++++++
rlf TEMP,f
rlf TEMP,f
call _Code ;Декодирование второго бита - FIELD
movwf FIELD ;
goto Home ;Если установлен флаг ошибки - выход
;+++++++++
movwf TOGGLE
btfsc bad
goto Home ;Если установлен флаг ошибки - выход
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
movlw BIT1
movwf FSR
call _Code ;Декодирование кода системы -1
movwf INDF
btfsc bad
goto Home ;Если установлен флаг ошибки - выход
;==========
movf BAYT2,w ;BAYT2
movwf TEMP
movlw .4
movwf COUNT
loop
incf FSR,f
call _Code ;Декодирование кода системы -2
movwf INDF
btfsc bad
goto Home ;Если установлен флаг ошибки - выход
decfsz COUNT,f
goto loop
movlw .5
movwf COUNT
movlw BIT1
movwf FSR
clrf TEMP
loop_sys
bcf d_temp
btfsc dat
bsf d_temp
rlf TEMP,f
incf FSR,f
decfsz COUNT,f
goto loop_sys
rrf TEMP,f
movf TEMP,w
movwf SYSTEM ;система
;=========Декодирование кода команды===============
movf BAYT3,w ;BAYT3
movwf TEMP
movlw .4
movwf COUNT
movlw BIT1
movwf FSR
loop_com
call _Code ;Декодирование кода команды - 1..4
movwf INDF
btfsc bad
goto Home ;Если установлен флаг ошибки - выход
incf FSR,f
decfsz COUNT,f
goto loop_com
movwf TEMP
movlw .2
movwf COUNT
loop_com1
call _Code ;Декодирование кода команды - 5..6
movwf INDF
btfsc bad
goto Home ;Если установлен флаг ошибки - выход
incf FSR,f
decfsz COUNT,f
goto loop_com1
;Забивка кода
movlw .6
movwf COUNT
movlw BIT1
movwf FSR
clrf TEMP
loop_com2
bcf d_temp
btfsc dat
bsf d_temp
rlf TEMP,f
incf FSR,f
decfsz COUNT,f
goto loop_com2
rrf TEMP,f
movf TEMP,w
movwf COMND ;комманда
;**********************************************************************
; goto _Analiz ;здесь анализируется система
;и команда и исполняется
btfsc FIELD,0
bsf PORTA,0
btfsc TOGGLE,0
bsf PORTA,2
movf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
bcf INTCON,RBIF
retfie
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;===============Декодирование=========================
_Code
movlw TEST ;Загрузка в w b'11000000'
andwf TEMP,w ;TEMP & b'11000000'-> w
call _Takt ;Это 0 или 1 или ошибка
rlf TEMP,f
rlf TEMP,f
return
_Takt
movwf BUF ;Загрузка в BUF (INDF & b'11000000')
bcf bad
xorwf BUF,w
bz _One
xorwf BUF,w
bz _Zero
_One
retlw 1 ;Возвращает 1
_Zero
retlw 0 ;Возвращает 0
_Bad
bsf bad ;Возвращает ошибку
retlw 0
;****************************************************************************
_Delay_x10ms
movwf Count
movlw .248 ;246
movwf DELAYL
movlw .13 ;13
movwf DELAYH
call _Delay_Uni
retlw 0
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
_Delay100ms
movlw .10
call _Delay_x10ms
retlw 0
;***************************************************************************
;****************************************************************************
; ОСНОВНАЯ
;****************************************************************************
main
call INIT
call CLEAR
;goto int
movf PORTB,w
bsf INTCON,GIE
_ready
bsf led
call _Delay100ms
bcf led
call _Delay100ms
goto _ready
;*****************************************************************************
;FIELD, TOGGLE, SYSTEM, COMND
END ; End of program
;=================Биты инициализации=======================================
INIT_OPT EQU B'10010010' ;OPTION - включены внешние подтягивающие резисторы
INIT_INT EQU B'00000000' ;INTCON
INIT_PORTA EQU B'11111' ;PORTA
INIT_PORTB EQU B'11111111' ;PORTB
SYS EQU .8 ;Код системы
ON EQU .16 ;Код включения
OFF EQU .17 ;Код выключения
LEDS EQU .13 ;Код управления светодиодами
CBLOCK 0x0C
COUNT ; A counter, used multiple places
TOGGLE ; The RC5 Toggle bit
SYSTEM ; The RC5 System word
COMND ; The RC5 Command word
BIT_COUNT ; Counter for incoming bits
BYTE_COUNT ; Counter for buffer bytes
TEMP ; Used by PARSE to hold the 2-bit pattern
SERIAL_BUF ; Buffer for incoming bitstream
SERIAL_2
SERIAL_3
SERIAL_4
SERIAL_5
SERIAL_6
FIELD ; Temporary storage for field bit
DELAYL
DELAYH
COUNTERL
COUNTERH
TEMP_ROM_ADR
Call_Temp
Count
ENDC
DATA_IN EQU 3 ; Input data from IR pickup
ONE EQU B'00000001' ; 2-bit incoming pattern matches
ZERO EQU B'00000010'
Ответы