Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 15:56:18

Доброго времени суток!
Собрал модулятор и демодулятор в протеусе и теперь пытаюсь запустить прогу на микроконтроллере
Сначала выдавало ошибку Colon expected at start of the line
Поставил двоеточие перед инклюдом и теперь вылазит следующее:
Error reading HEX file 'Modulator.hex' at line 1: Expected program byte for address location 0xFFFFFFFE.. [U1]
(в модуляторе)
Error reading HEX file 'Demodulator.hex' at line 1: Expected program byte for address location 0xFFFFFFFE.. [U1]
(в демодуляторе)
Что можно сделать, чтобы это исправить?

Ссылки на скрины схем:
Изображение (модулятор)
Изображение (демодулятор)

Ссылка на hex'ы:
https://transfiles.ru/cp26b
Вложения
Demodulator.hex
(6.95 KiB) Скачиваний: 60
Modulator.hex
(8.03 KiB) Скачиваний: 66

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 17:50:04

Потому что это не файл прошивки в формате hex! Это просто текстовый файл исходника на ассемблере, сохраненный текстом, но зачем-то переименованный в hex.
Как запустить микроконтроллер с прошивкой? Надо создать в протеусе проект с этим микроконтроллером, выбрав в мастере создания проекта "Create Firmware Project", выбрать PIC16F84A, а потом в окошко с программным кодом вставить текст из файла Demodulator, предватительно переименовав расширение в txt и открыв в блокноте

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 17:55:21

Сделал, как вы сказали и столкнулся со следующими ошибками:
Код:
MPASMWIN.exe /e"./main.err" /l"./main.lst" /o"main.o" /q+ /p16f84a  "..\main.asm"
make: *** [main.o] Error 1

Error code 2

Error[122] ..\MAIN.ASM 1 : Illegal opcode (СИГНАЛИЗАЦИЯ)
Warning[205] ..\MAIN.ASM 13 : Found directive in column 1. (__CONFIG)
Warning[205] ..\MAIN.ASM 55 : Found directive in column 1. (ORG)
Warning[203] ..\MAIN.ASM 56 : Found opcode in column 1. (GOTO)
Warning[205] ..\MAIN.ASM 57 : Found directive in column 1. (ORG)
Warning[203] ..\MAIN.ASM 58 : Found opcode in column 1. (GOTO)
Error[111] ..\MAIN.ASM 61 : Missing symbol
Warning[203] ..\MAIN.ASM 63 : Found opcode in column 1. (BSF)
Warning[203] ..\MAIN.ASM 64 : Found opcode in column 1. (MOVLW)
Warning[203] ..\MAIN.ASM 65 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 66 : Found opcode in column 1. (MOVLW)
Warning[203] ..\MAIN.ASM 67 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 68 : Found opcode in column 1. (MOVLW)
Warning[203] ..\MAIN.ASM 69 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 70 : Found opcode in column 1. (MOVLW)
Warning[203] ..\MAIN.ASM 71 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 72 : Found opcode in column 1. (BCF)
Warning[203] ..\MAIN.ASM 73 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 74 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 75 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 76 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 77 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 78 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 79 : Found opcode in column 1. (GOTO)
Warning[203] ..\MAIN.ASM 84 : Found opcode in column 1. (ADDWF)
Warning[203] ..\MAIN.ASM 86 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 87 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 88 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 89 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 90 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 91 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 92 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 93 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 94 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 95 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 96 : Found opcode in column 1. (RETLW)
Warning[203] ..\MAIN.ASM 97 : Found opcode in column 1. (RETLW)
Warning[204] ..\MAIN.ASM 102 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 103 : Found opcode in column 1. (CALL)
Warning[203] ..\MAIN.ASM 104 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 105 : Found opcode in column 1. (GOTO)
Warning[203] ..\MAIN.ASM 110 : Found opcode in column 1. (BTFSS)
Warning[203] ..\MAIN.ASM 111 : Found opcode in column 1. (RETURN)
Warning[203] ..\MAIN.ASM 112 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 113 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 114 : Found opcode in column 1. (BTFSS)
Warning[203] ..\MAIN.ASM 115 : Found opcode in column 1. (RETURN)
Warning[203] ..\MAIN.ASM 116 : Found opcode in column 1. (INCF)
Warning[203] ..\MAIN.ASM 118 : Found opcode in column 1. (SUBWF)
Warning[204] ..\MAIN.ASM 119 : Found pseudo-op in column 1. (SKPNC)
Warning[203] ..\MAIN.ASM 120 : Found opcode in column 1. (BCF)
Warning[203] ..\MAIN.ASM 121 : Found opcode in column 1. (RETURN)
Warning[204] ..\MAIN.ASM 126 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 127 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 129 : Found opcode in column 1. (SUBWF)
Warning[204] ..\MAIN.ASM 130 : Found pseudo-op in column 1. (SKPNC)
Warning[203] ..\MAIN.ASM 131 : Found opcode in column 1. (CLRF)
Error[116] ..\MAIN.ASM 132 : Address label duplicated or different in second pass (MOVLW.20)
Error[122] ..\MAIN.ASM 133 : Illegal opcode (SCN)
Warning[204] ..\MAIN.ASM 134 : Found pseudo-op in column 1. (SKPNC)
Warning[203] ..\MAIN.ASM 135 : Found opcode in column 1. (BCF)
Warning[203] ..\MAIN.ASM 136 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 137 : Found opcode in column 1. (RETURN)
Warning[203] ..\MAIN.ASM 142 : Found opcode in column 1. (MOVWF)
Warning[204] ..\MAIN.ASM 143 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 144 : Found opcode in column 1. (MOVWF)
Warning[204] ..\MAIN.ASM 145 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 146 : Found opcode in column 1. (MOVWF)
Warning[203] ..\MAIN.ASM 147 : Found opcode in column 1. (BTFSS)
Warning[203] ..\MAIN.ASM 148 : Found opcode in column 1. (GOTO)
Warning[203] ..\MAIN.ASM 149 : Found opcode in column 1. (CALL)
Warning[203] ..\MAIN.ASM 151 : Found opcode in column 1. (BCF)
Warning[203] ..\MAIN.ASM 152 : Found opcode in column 1. (BCF)
Warning[204] ..\MAIN.ASM 153 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 154 : Found opcode in column 1. (MOVWF)
Warning[204] ..\MAIN.ASM 155 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 156 : Found opcode in column 1. (MOVWF)
Warning[204] ..\MAIN.ASM 157 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 159 : Found opcode in column 1. (RETFIE)
Warning[203] ..\MAIN.ASM 164 : Found opcode in column 1. (INCF)
Warning[204] ..\MAIN.ASM 165 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 166 : Found opcode in column 1. (ADDLW)
Warning[204] ..\MAIN.ASM 167 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 168 : Found opcode in column 1. (CALL)
Warning[204] ..\MAIN.ASM 169 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 170 : Found opcode in column 1. (ADDLW)
Warning[204] ..\MAIN.ASM 171 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 172 : Found opcode in column 1. (BCF)
Warning[204] ..\MAIN.ASM 173 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 174 : Found opcode in column 1. (BSF)
Warning[204] ..\MAIN.ASM 175 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 176 : Found opcode in column 1. (ADDLW)
Warning[204] ..\MAIN.ASM 177 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 178 : Found opcode in column 1. (BCF)
Warning[204] ..\MAIN.ASM 179 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 180 : Found opcode in column 1. (BSF)
Warning[204] ..\MAIN.ASM 181 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 182 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 183 : Found opcode in column 1. (GOTO)
Warning[204] ..\MAIN.ASM 184 : Found pseudo-op in column 1. (MOVFW)
Warning[203] ..\MAIN.ASM 185 : Found opcode in column 1. (ADDLW)
Warning[204] ..\MAIN.ASM 186 : Found pseudo-op in column 1. (SKPNZ)
Warning[203] ..\MAIN.ASM 187 : Found opcode in column 1. (CLRF)
Warning[203] ..\MAIN.ASM 188 : Found opcode in column 1. (GOTO)
Warning[205] ..\MAIN.ASM 190 : Found directive in column 1. (END)

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 18:06:02

Английским по белому написано, что нет отступа в строке.
Код на MPASM пишется по определенным правилам. Поэтому, следуя диагностике ВАРНИНГОВ, исправьте исходник.
Ошибок в коде ЧЕТЫРЕ. Про них тоже все написано.

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 18:32:49

Спасибо огромное, где нужно было таб поставил, но осталось еще пара ошибок значение которых мне не понятно:
Код:
LIST P=PIC16F84A
__CONFIG 0x3FF1

STATUS     EQU 0x03
PORTB    EQU 0x06
TRISB    EQU 0x06

Reg_1    EQU 0x0C
Reg_2    EQU 0x0D
Reg_3    EQU H'0E'

   org 0 ; начало программы
; подготовительные моменты
   bsf STATUS,5 ; переход в Банк 1
   clrf TRISB
   bcf STATUS,5 ; переход назад в Банк 0
; установка сигналов на порту В
m1       movlw b'11111111' ; запись в аккумулятор
   movwf PORTB ; перенос из аккумулятора в порт
   call Pause ; переход на метку (с возвратом)
   clrf PORTB ; "очистка" порта
   call Pause ; переход на метку (с возвратом)
   goto m1 ; переход на метку (зацикливание)


;delay = 500000 machine cycles
Pause    movlw .85
   movwf Reg_1
   movlw .138
   movwf Reg_2
   movlw .3
   movwf Reg_3
wr       decfsz Reg_1, F
   goto wr
   decfsz Reg_2, F
   goto wr
   decfsz Reg_3, F
   goto wr

   return

   end ; конец программы

З.Ы. Пишу диплом просто, сам не любитель программирования

Добавлено after 2 minutes 36 seconds:
Не то вставил, извините
Код:
MPASMWIN.exe /e"./main.err" /l"./main.lst" /o"main.o" /q+ /p16f84a  "..\main.asm"
make: *** [main.o] Error 1

Error code 2

Error[116] ..\MAIN.ASM 136 : Address label duplicated or different in second pass (MOVLW.2)
Error[116] ..\MAIN.ASM 145 : Address label duplicated or different in second pass (MOVLW.2)
Warning[207] ..\MAIN.ASM 147 : Found label after column 1. (PAUSA1)
Warning[204] ..\MAIN.ASM 192 : Found pseudo-op in column 1. (MOVFW)
Warning[204] ..\MAIN.ASM 194 : Found pseudo-op in column 1. (MOVFW)
Warning[204] ..\MAIN.ASM 199 : Found pseudo-op in column 1. (MOVFW)
Warning[204] ..\MAIN.ASM 201 : Found pseudo-op in column 1. (MOVFW)
Warning[204] ..\MAIN.ASM 203 : Found pseudo-op in column 1. (MOVFW)


Добавлено after 3 minutes 53 seconds:
Warning[207] ..\MAIN.ASM 147 : Found label after column 1. (PAUSA1)
Это исправил, остальное не знаю как

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 18:41:48

В каждой строке диагностики указан НОМЕР СТРОКИ с ошибкой или варнингом.
Поскольку в исходнике нет нумерации строк, а по тексту диагностики я в приведенном коде совпадений не нашел, то делаю вывод, что код приведен не весь.

Re: Помогите исправить ошибку в протеусе, PIC16F84A

Вс июн 05, 2022 18:45:07

Код:
ID2O
MOVLW.2 ;ПАУЗА 2,69 МИЛЛИСЕКУНДЫ.
   MOVWF COU ;ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA
   DECF COU,1 ;ВЫЧТЕМ 1.
   TSTF COU ;ПРОТЕСТИРУЕМ НА НОЛЬ.
   SKPZ ;ЕСЛИ НЕ РАВНО НУЛЮ,
   GOTO PAUSA ;ПОВТОРИМ.
   RETURN
ID21
MOVLW.2 ;ПАУЗА 2,69 МИЛЛИСЕКУНДЫ.
   MOVWF COU ;ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA1

Вот в этом месте выдает 2 ошибки
Код:
Error[116] ..\MAIN.ASM 136 : Address label duplicated or different in second pass (MOVLW.2) Error[116] ..\MAIN.ASM 145 : Address label duplicated or different in second pass (MOVLW.2)


Добавлено after 1 minute 16 seconds:
Код:
; ПОЖАРНАЯ СИГНАЛИЗАЦИЯ НА 11 ДАТЧИКОВ,
; МОДУЛЯТОР ПЕРЕДАТЧИКА.
; РАЗРАБОТАЛ ПОПОВ Е.С,.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ.
; ИЖЕВСК
;
; ПРОГРАММА = OXPANAPD.ASM
; ВЕРСИЯ: 11-04-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
;
   #include p16f84a.inc
   __CONFIG 3FF0H
;=====
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
;=====
; RB0=1, RB1=2, RB2=3, RB4=4, RB5=6, RB6=7, RB7=8,
; RA0=9, RA1=10, RA2=11 - ВХОДЫ ДАТЧИКОВ.
; RA3-ВЫХОД МОДУЛЯЦИИ, RA4-ВЫХОД ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
;=====
; СПЕЦ РЕГИСТРЫ.
;=====
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H ;OPTION (RP0=1).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H ;РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H ;ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H ;ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
;=======
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ.
;=======
SC EQU 0CH ;РЕГИСТР ИНДИКАЦИИ.
COU EQU 0DH ;СЧЕТЧИК ПАУЗЫ.
;====
; ВРЕМЕННЫЕ РЕГИСТРЫ.
;====
W_TEMP EQU 0EH ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 0FH ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
FSR_TEMP EQU 10H ;ВРЕМЕННЫЙ ДЛЯ FSR.
;=====================
; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG.
;=====================
FLAG EQU 11H ;
;
; 0-> НЕСУЩАЯ ВЫКЛЮЧЕНА ПО ДАТЧИКУ.
; 1-> НЕСУЩАЯ ВКЛЮЧЕНА ЧЕРЕЗ 1 СЕКУНДУ.
;
;=======
; 1. ПУСК.
;=======
   ORG 0
   GOTO INIT
   ORG 4
   GOTO CONST
;====
; 4. ВЫВОД ИМПУЛЬСОВ МОДУЛЯЦИИ.
;====
ID2
MOVLW.2 ;АНАЛОГИЧНО ПЕРВОМУ.
   MOVWF SC ;
   GOTO IDZ ;
;=======
ID3
MOVLW.3
   MOVWF SC
   GOTO IDZ ;
;======
ID4
MOVLW.4
   MOVWF SC
   GOTO IDZ ;
;=======
ID5
MOVLW.5
   MOVWF SC
   GOTO IDZ ;
;=======
ID6
MOVLW.6
   MOVWF SC
   GOTO IDZ ;
;=======
ID7
MOVLW.7
   MOVWF SC
   GOTO IDZ ;
;=======
ID8
MOVLW.8
   MOVWF SC
   GOTO IDZ ;
;=======
ID9
MOVLW.9
   MOVWF SC
   GOTO IDZ ;
;=======
ID10
MOVLW.10
   MOVWF SC
   GOTO IDZ ;
;=======
ID11
MOVLW.11
   MOVWF SC
   GOTO IDZ ;
;=====
ID1
MOVLW.1 ;ЗАПИШЕМ НОМЕР ДАТЧИКА
   MOVWF SC ;В РЕГИСТР ИНДИКАЦИИ.
IDZ
   TSTF SC ;ЕСЛИ
   SKPNZ ;РЕГИСТР НУЛЕВОЙ,
   GOTO ID0I ;ИДЕМ НА ЗАВЕРШЕНИЕ.
   DECF SC,1 ;ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
   BSF PORTA,3 ;ВКЛЮЧИМ ВЫХОД.
   CALL ID21 ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ.
   BCF PORTA,3 ;ВЫКЛЮЧИМ ВЫХОД.
   CALL ID2O ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ НОЛЯ.
   GOTO IDZ ;НАЧНЕМ СНАЧАЛА.
ID0I
   CLRWDT
   BCF PORTA,4 ;ВЫКЛЮЧИМ НЕСУЩУЮ.
   BSF FLAG,0 ;ВКЛЮЧИМ ФЛАГ ВЫКЛЮЧЕНИЯ НЕСУЩЕЙ.
   BTFSC FLAG,1 ;ЖДЕМ ПОКА ВКЛЮЧИТСЯ ФЛАГ ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
   GOTO ID0I ;ХОДИМ ПО КРУГУ.
   GOTO KEY ;ПРОВЕРИМ ДАТЧИКИ.
;=========
; 5. ПАУЗА.
;=========
ID2O
MOVLW.2 ;ПАУЗА 2,69 МИЛЛИСЕКУНДЫ.
   MOVWF COU ;ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA
   DECF COU,1 ;ВЫЧТЕМ 1.
   TSTF COU ;ПРОТЕСТИРУЕМ НА НОЛЬ.
   SKPZ ;ЕСЛИ НЕ РАВНО НУЛЮ,
   GOTO PAUSA ;ПОВТОРИМ.
   RETURN
ID21
MOVLW.2 ;ПАУЗА 2,69 МИЛЛИСЕКУНДЫ.
   MOVWF COU ;ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA1
   DECF COU,1 ;ВЫЧТЕМ 1.
   CLRWDT
   NOP
   NOP
   TSTF COU ;ПРОТЕСТИРУЕМ НА НОЛЬ.
   SKPZ ;ЕСЛИ НЕ РАВНО НУЛЮ,
   GOTO PAUSA1 ;ПОВТОРИМ.
   RETURN
;===========
; 3. ОПРОС ДАТЧИКОВ.
;===========
KEY
   CLRWDT
   BTFSS FLAG,1 ;ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧЕНА,
   GOTO KEY ;ОПРОС ДАТЧИКОВ НЕ ПРОИЗВОДИТСЯ.
   BTFSC PORTB,0 ;ЕСЛИ ДАТЧИК РАЗОРВАН,
   GOTO ID1 ;ИДЕМ ФОРМИРОВАТЬ ИМПУЛЬС МОДУЛЯЦИИ.
   BTFSC PORTB,1
   GOTO ID2
   BTFSC PORTB,2
   GOTO ID3
   BTFSC PORTB,3
   GOTO ID4
   BTFSC PORTB,4
   GOTO ID5
   BTFSC PORTB,5
   GOTO ID6
   BTFSC PORTB,6
   GOTO ID7
   BTFSC PORTB,7
   GOTO ID8
   BTFSC PORTA,0
   GOTO ID9
   BTFSC PORTA,1
   GOTO ID10
   BTFSC PORTA,2
   GOTO ID11
   BCF FLAG,0
   GOTO KEY ;ЕЩЕ РАЗ ПРОВЕРИМ ДАТЧИКИ.
;== ============
; 6. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
;==================
CONST
   MOVWF W_TEMP ;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
   MOVFW STATUS ;STATUS,
   MOVWF STATUS_TEMP ;
   MOVFW FSR ;FSR.
   MOVWF FSR_TEMP ;
   CALL S1 ;ПРИБАВИМ 1 В СЧЕТЧИК.
RECONST ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
   BCF INTCON,2 ;СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА.
   MOVFW STATUS_TEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
   MOVWF STATUS ;STATUS,
   MOVFW FSR_TEMP ;
   MOVWF FSR ;FSR,
   MOVFW W_TEMP ;W.
   RETFIE ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
;==========
; 7. ВКЛЮЧЕНИЕ НЕСУЩЕЙ.
;==========
S1
   BTFSC FLAG,1 ;ЕСЛИ НЕСУЩАЯ БЫЛА ВКЛЮЧЕНА,
   GOTO S10 ;ТО ИДЕМ ВЫКЛЮЧАТЬ.
   BSF PORTA,4 ;ВКЛЮЧИМ НЕСУЩУЮ,
   BSF FLAG,1 ;ПОСТАВИМ ФЛАГ ВКЛЮЧЕНИЯ.
   BTFSC FLAG,0 ;ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,
   RETURN ;ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.
   CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.
   BSF PORTA,3 ;ВКЛЮЧИМ ВЫХОД.
   CALL ID21 ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ.
   BCF PORTA,3 ;ВЫКЛЮЧИМ ВЫХОД.
   CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.
   BCF PORTA,4 ;ВЫКЛЮЧИМ НЕСУЩУЮ.
   RETURN
S10
   BCF FLAG,1 ;СБРОСИМ ФЛАГ ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
   BTFSC FLAG,0 ;ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,
   RETURN ;ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.
   BSF PORTA,4 ;ВКЛЮЧИМ НЕСУЩУЮ,
   CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.
   BSF PORTA,3 ;ВКЛЮЧИМ ВЫХОД.
   CALL ID21 ;ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ.
   BCF PORTA,3 ;ВЫКЛЮЧИМ ВЫХОД.
   CALL ID2O ;ПАУЗА, РАВНАЯ НУЛЮ.
   BCF PORTA,4 ;ВЫКЛЮЧИМ НЕСУЩУЮ.
   RETURN
;====
; 2. ИНИЦИАЛИЗАЦИЯ.
;====
INIT
   BSF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 1.
   MOVLW B'00000100';ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32...100,
   MOVWF OPTION_REG^80H;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ.
   MOVLW B'10100000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА.
   MOVWF INTCON ;
   MOVLW B'00000111' ;RA3,RA4-НА ВЫХОД, RA0-RA2-ВХОД.
   MOVWF TRISA^80H
   MOVLW B'11111111' ;RB0-RB7-НА ВХОД.
   MOVWF TRISB^80H
   BCF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 0.
   CLRF TMR0 ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
   CLRF FLAG
   CLRF PORTA
   CLRF COU
   GOTO KEY ;ИДЕМ НА ОПРОС ДАТЧИКОВ.
;==========
   END
;

Весь код на данный момент со всем табами
Ответить