[an error occurred while processing this directive] [an error occurred while processing this directive]
Я повешусь!!!! Пмогите!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено DJ DaGABBA 12 мая 2002 г. 20:58

;**********************************************************************
; *
; Notes: Софт для перезагузчика подвисших свитчей. *
; PIC 12C508A *
; Ноги GP0-GP2 - адресная шина двух мультиплексоров (MUX) *
; Ногами GP3 и GP4 опрашиваем выходы MUXов *
; Ногой GP5 управляем реле питания свитча *
; Входы MUXа подключаются к 16св диодам свитча *
; (порядок пофиг) *
; *
; http://dj.yasenevo.ru *
; da-gabba@mail.ru *
; *
;**********************************************************************

list p=12c508a
#include

__CONFIG _CP_ON & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC


;***** Выставляем переменные
link EQU 0x07 ;состояния линковых лампочек
active EQU 0x08 ;состояния лампочек активности

linktmp EQU 0x09
activetmp EQU 0x0A

tm1 EQU 0x0B ;Регистры таймера.
tm2 EQU 0x0C
tm3 EQU 0x0D
tm4 EQU 0x0E

relay EQU 0x05 ;ножка с реле
linkb EQU 0x03 ;-//- linkового мультиплексора
activeb EQU 0x04 ;-//- activeового мультиплексора

;Поехали...

ORG 0x00 ; начальный вектор, отсюда мы стартуем


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 ;читаем мультиплексор

movf link, 0 ;пишем во временные регистры
movwf linktmp
movf active, 0
movwf activetmp

call readdata ;читаем новые данные из мультиплексора

movf link, 0
subwf linktmp, 1 ;сравниваем старые и новые данные ЛИНКОВ кладем все в темп

movf active, 0
subwf activetmp, 0 ;сравниваем старые и новые данные АКТИВОВ кладем все в темп

subwf linktmp, 1
btfss STATUS, 2
call reset
call dectmr

goto loop

;***************Читает инфу с лампочек (опрос мультиплексоров 561КП2)
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

movlw 0x02
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

movlw 0x04
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

movlw 0x06
movwf GPIO
btfsc GPIO, linkb
bsf link, 6
btfsc GPIO, activeb
bsf active, 6

movlw 0x07
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

movlw 0xFF
movwf tm1
movwf tm2
movlw 77
movwf tm3

DLOOP
decfsz tm1, 1
goto DLOOP
decfsz tm2, 1
goto DLOOP
decfsz tm3, 1
goto DLOOP
bsf GPIO, relay
retlw 0x00
;**************************************

;*******************Сброс регистров таймера на 300сек
reset: movlw 0xFF
movwf tm1
movwf tm2
movlw 0x2D
movwf tm3
retlw 0x00

END


Все работает, даже время почти угадал, но почему-то GP2 не выводит сигнал, хотя при симуляции все работает отлично!!! Блин, один пик уже испоганил...

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru