[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
;**********************************************************************
; *
; Notes: Софт для перезагузчика подвисших свитчей. *
; PIC 12C508A *
; Ноги GP0-GP2 - адресная шина двух мультиплексоров (MUX) *
; Ногами GP3 и GP4 опрашиваем выходы MUXов *
; Ногой GP5 управляем реле питания свитча *
; Входы MUXа подключаются к 16св диодам свитча *
; (порядок пофиг) *
; *
; http://dj.yasenevo.ru *
; da-gabba@mail.ru *
; *
;**********************************************************************
list p=12c508a __CONFIG _CP_ON & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC linktmp EQU 0x09 tm1 EQU 0x0B ;Регистры таймера. relay EQU 0x05 ;ножка с реле ;Поехали... ORG 0x00 ; начальный вектор, отсюда мы стартуем movf link, 0 ;пишем во временные регистры movf active, 0 ;***************Читает инфу с лампочек (опрос мультиплексоров 561КП2) movlw 0x02 movlw 0x04 movlw 0x06 movlw 0x07 movlw 0xFF DLOOP ;*******************Сброс регистров таймера на 300сек END
E-mail:
info@telesys.ru
#include
;***** Выставляем переменные
link EQU 0x07 ;состояния линковых лампочек
active EQU 0x08 ;состояния лампочек активности
activetmp EQU 0x0A
tm2 EQU 0x0C
tm3 EQU 0x0D
tm4 EQU 0x0E
linkb EQU 0x03 ;-//- linkового мультиплексора
activeb EQU 0x04 ;-//- activeового мультиплексора
clrf GPIO
movlw b'11011000'
TRIS GPIO
call reset
loop:
bsf GPIO, relay
movlw 0x00 ;чистим все регистры лампочек
movwf active
movwf link
movwf linktmp
movwf activetmp
call readdata ;читаем мультиплексор
movwf linktmp
movf active, 0
movwf activetmp
call readdata ;читаем новые данные из мультиплексора
movf link, 0
subwf linktmp, 1 ;сравниваем старые и новые данные ЛИНКОВ кладем все в темп
subwf activetmp, 0 ;сравниваем старые и новые данные АКТИВОВ кладем все в темп
subwf linktmp, 1
btfss STATUS, 2
call reset
call dectmr
goto loop
readdata:
clrf link
clrf active
movlw 0x00
movwf GPIO
btfsc GPIO, linkb
bsf link, 0
btfsc GPIO, activeb
bsf active, 0
movlw 0x01
movwf GPIO
btfsc GPIO, linkb
bsf link, 1
btfsc GPIO, activeb
bsf active, 1
movwf GPIO
btfsc GPIO, linkb
bsf link, 2
btfsc GPIO, activeb
bsf active, 2
movlw 0x03
movwf GPIO
btfsc GPIO, linkb
bsf link, 3
btfsc GPIO, activeb
bsf active, 3
movwf GPIO
btfsc GPIO, linkb
bsf link, 4
btfsc GPIO, activeb
bsf active, 4
movlw 0x05
movwf GPIO
btfsc GPIO, linkb
bsf link, 5
btfsc GPIO, activeb
bsf active, 5
movwf GPIO
btfsc GPIO, linkb
bsf link, 6
btfsc GPIO, activeb
bsf active, 6
movwf GPIO
btfsc GPIO, linkb
bsf link, 7
btfsc GPIO, activeb
bsf active, 7
retlw 0
;**************************************
;*************уменьшаем таймер, если пора, то reboot
dectmr:
decfsz tm1, 1
retlw 0x00
decfsz tm2, 1
retlw 0x00
decfsz tm3, 1
retlw 0x00
call reboot
call reset
retlw 0x00
;******************************
;*************перезагружаем свитч с задержкой в 20 сек
reboot:
clrf GPIO
bcf GPIO, relay
DELAY
movwf tm1
movwf tm2
movlw 77
movwf tm3
decfsz tm1, 1
goto DLOOP
decfsz tm2, 1
goto DLOOP
decfsz tm3, 1
goto DLOOP
bsf GPIO, relay
retlw 0x00
;**************************************
reset: movlw 0xFF
movwf tm1
movwf tm2
movlw 0x2D
movwf tm3
retlw 0x00
Все работает, даже время почти угадал, но почему-то GP2 не выводит сигнал, хотя при симуляции все работает отлично!!! Блин, один пик уже испоганил...
Ответы