Три подпрограммы выполнения команд
; Подпрограмма включение реле по номеру. ; Запишем в регистр 30h (установить соответствующий номеру реле бит).
Cmdset: CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x0 ; Реле 0.
BTFSC STATUS, Z
BSF 0x30, 0
CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x1 ; Реле 1.
BTFSC STATUS, Z
BSF 0x30, 1
CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x2 ; Реле 2.
BTFSC STATUS, Z
BSF 0x30, 2
CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x3 ; Реле 3. BTFSC STATUS, Z
BSF 0x30, 3 CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x4 ; Реле 4.
BTFSC STATUS, Z
BSF 0x30, 4
CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x5 ; Реле 5.
BTFSC STATUS, Z
BSF 0x30, 5
CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x6 ; Реле 6.
BTFSC STATUS, Z
BSF 0x30, 6
CLRW
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x7 ; Реле 7.
BTFSC STATUS, Z
BSF 0x30, 7
RETURN
; Подпрограмма выключения реле по номеру.
; Запишем в регистр 30h (сбросить соответствующий номеру реле бит).
Cmdreset: CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x0 ; Реле 0.
BTFSC STATUS, Z
BCF 0x30, 0
CLRW
ADDWF 0x23,0 BCF STATUS, Z XORLW 0x1 ; Реле 1. BTFSC STATUS, Z BCF 0x30, 1
CLRW
ADDWF 0x23,О
BCF STATUS, Z
XORLW 0x2 ; Реле 2.
BTFSC STATUS, Z
BCF 0x30, 2
CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x3 ; Реле 3 .
BTFSC STATUS, Z
BCF 0x30, 3
CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x4 ; Реле 4.
BTFSC STATUS, Z
BCF 0x30, 4
CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x5 ; Реле 5.
BTFSC STATUS, Z
BCF 0x30, 5
CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x6 ; Реле 6.
BTFSC STATUS, Z
BCF 0x30, 6
CLRW
ADDWF 0x23,0
BCF STATUS, Z
XORLW 0x7 ; Реле 7.
BTFSC STATUS, Z
BCF 0x30, 7
RETURN
; Подпрограмма передачи статуса реле
Stat: BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO
CLRW ; Проверим реле 0.
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x0 BTFSC STATUS, Z CALL relO CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x1 BTFSC STATUS, Z CALL rell CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x2 BTFSC STATUS, Z CALL ГЄІ2 CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x3 BTFSC STATUS, Z CALL rel3 CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x4 BTFSC STATUS, Z CALL ГЄІ4 CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x5 BTFSC STATUS, Z CALL ГЄІ5 CLRW
ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x6 BTFSC STATUS, Z CALL ГЄІ6 CLRW
Реле 0. Проверим реле 1. Реле 1. Проверим реле 2. Реле 2. Проверим реле 3. Реле 3. Проверим реле 4. Реле 4. Проверим реле 5. Реле 5. Проверим реле 6. Реле 6. Проверим реле 7. |
ADDWF 0x23, 0
BCF STATUS, Z
XORLW 0x7 ; Реле 7.
BTFSC STATUS, Z
CALL rel7
; теперь это все отправим в передатчик
BSF PORTB, 0 BCF STATUS, RPl BSF STATUS, RPO BSF TXSTA, TXEN BCF STATUS, RPl BCF STATUS, RPO MOVLW 0x52 MOVWF TXREG ; BCF STATUS, RPl BSF STATUS, RPO
Переключим драйвер RS485 на передачу. ; Выбор банка 1.
; Разрешаем передачу. ; Выбор банка 0.
Отправим символ модуля. ; Выбор банка 1.
OutdatO: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdatO
BCF STATUS, RPl ; Выбор банка 0.
BCF STATUS, RPO
CLRW
ADDWF 0x21,0
MOVWF TXREG ; Отправим первый символ адреса. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO
Outdatl: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdatl
BCF STATUS, RPl ; Выбор банка 0.
BCF STATUS, RPO
CLRW
ADDWF 0x22,0
MOVWF TXREG ; Отправим второй символ адреса.
BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO
Outdat2: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdat2
BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO MOVLW 0x23
MOVWF TXREG ; Отправим символ статуса. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO
Outdat3: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO ou t da t З
BCF STATUS, RPl ; Выбор банка 0.
BCF STATUS, RPO
CLRW
ADDWF 0x23,0 ADDLW 0x30
MOVWF TXREG ; Отправим символ номера реле. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO
Outdat4: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdat4
BCF STATUS, RPl ; Выбор банка 0.
BCF STATUS, RPO
CLRW
ADDWF 0x25,0
MOVWF TXREG ; Отправим символ статуса реле. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO
Outdat5: BTFSS TXSTA, RCIF ; Ждем отправки символа. GOTO outdat5
BCF TXSTA, TXEN ; Запрещаем передачу. BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO
BCF PORTB, 0 ; Переключим драйвер RS485 на прием. RETURN
; Подпрограмма обработки статуса реле.
RelO: BTFSC 0x30, 0 CALL sostn BTFSS 0x30, 0 CALL sostf RETURN rells BTFSC 0x30, 1 CALL sostn BTFSS 0x30, 1 CALL sostf
RETURN rel2: BTFSC 0x30, CALL sostn BTFSS 0x30, CALL sostf RETURN ГЄІЗ: BTFSC 0x30, CALL sostn BTFSS 0x30, CALL sostf RETURN rel4: BTFSC 0x30, CALL sostn BTFSS 0x30, ■ CALL sostf RETURN rel5: BTFSC 0x30, ! CALL sostn BTFSS 0x30, і CALL sostf RETURN rel6: BTFSC 0x30, і CALL sostn BTFSS 0x30, ( CALL sostf RETURN ГЄІ7: BTFSC 0x30, ; CALL sostn BTFSS 0x30, 1 CALL sostf RETURN
; Подпрограммы образования символов состояний.
Sostn: MOVLW 0x4E ; Состояние - включено. MOVWF 0x25 RETURN
Sostf: MOVLW 0x46 ; Состояние - выключено. MOVWF 0x25 RETURN
Если теперь соединить все представленные части граммы, программирование контроллера завершится.
Вставки и примечания, которые я привел выше, появились позже, при наладке модуля, но я решил привести их «досрочно». Очень часто у меня не хватает терпения дочитать что-то до конца, мне не терпится начать работу. Я представил, что подобной чертой характера могу отличаться не только я, и привел все примечания на случай, если и вы уже начали работу за компьютером. Мне очень не хотелось, чтобы вы полностью разочаровались во всем преждевременно.
Мы написали программу для контроллера. Постараемся ее проверить и отладить в программе MPLAB.