Наконец-то удалось написать код для микроконтроллера PIC12F675 на ассемблере. В среде протеус светодиодики зажигались когда поступала нужная команда. Собрал реальную схему, проверил все контакты,подавал на площадку, где должен сидеть микроконтроллер, землю или напряжение, все горело как надо. Делаю вывод,что схема собрана правильно. Возникли проблемы с микроконтроллером. Попытался загрузить программу, которую отлаживал в протеусе, вроде бы записалась. Единственное что, на экране поразила одна из надписей:
Генератор:IN I OSC, I/O function on CLKOUT
Вставил микроконтроллер в схему, подал питание, землю, нулевая реакция, как-будто его и нет.
Ниже рабочий код на протеусе. Почему на реальном чипе он не сработал?
Код: Выделить всё
list p=pic12f675
#include <P12F675.INC>
; настройка слова конфигурации микроконтроллера
; _CP_OFF защита программного кода выключена
; _DEBUG_OFF режим отладки выключен
; _WRT_OFF защита записи FLASH выключена
; _CPD_OFF защита памяти EEPROM выключена
; _LVP_OFF режим низковольтового программирования выключен
; _BODEN_ON сброс по снижению питания включен
; _PWRTE_ON таймер задержки по квлючению питания включен
; _XT_OSC использование кварцевого резонатора на 4МГц
__CONFIG _CPD_OFF&_CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
ERRORLEVEL 2 ;Вывод только ошибок
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANSEL equ 9Fh ;
ADRESH equ 1Eh ; Регистры для АЦП
ADRESL equ 9Eh ;
ADCL equ 21h ; Результат оцифровки
ADCH equ 22h ;
SIGNAL equ 23h ;Подсчет сигнала (Младшие разряды)
SIGNALH equ 24h ;Подсчет сигнала (Старшие разряды)
METK equ 25h ;Для метки
CONTROLS equ 26h ;Для настройки
org 0x00
;------------------------------------------------------
; Начальные настройки
;------------------------------------------------------
bcf STATUS,RP0 ;Выбираем банк 0
movlw b'00000001'
movwf ADCON0
movlw b'01011110' ;Режимы работы компаратора
movwf CMCON
bsf STATUS,RP0 ;Выбираем банк 1
movlw b'00011001'
movwf TRISIO
movlw b'00000001'
movwf ANSEL
movlw b'10001000' ;Настраиваем компаратор / 4 1х бита, это выбор выходного напряжения Vref / Настроено на минимум
movwf VRCON
bcf STATUS,RP0
;Обнуляем регистры
movlw b'00000000'
movwf SIGNAL
movlw b'00000000'
movwf SIGNALH
;------------------------------------------------------
;------------------------------------------------------
; Старт
;------------------------------------------------------
PREOBR
bsf GPIO,1
bsf GPIO,5
bsf GPIO,2
;BTFSS GPIO,4 ; Регулировка порога
BTFSC GPIO,4
GOTO CONTROL ;
BTFSS CMCON,6 ;
GOTO B0 ; Ищем уровень сигнала
BTFSC CMCON,6 ; выше порога
GOTO B1 ;
goto PREOBR
;------------------------------------------------------
;------------------------------------------------------
; Значения меньше порога
;------------------------------------------------------
B0 ;При 0 гаснет индикатор и сбрасывает на 0 счетчик
movlw b'00000000'
movwf SIGNAL
movlw b'00000000'
movwf SIGNALH
goto PREOBR
;------------------------------------------------------
;------------------------------------------------------
; Значения выше порога
;------------------------------------------------------
B1
;Запускающий счетчик
;Отсчитывает 511 тактов
movlw b'00000001'
ADDWF SIGNAL,1
BTFSS SIGNAL,7
GOTO PREOBR
BTFSS SIGNAL,6
GOTO PREOBR
BTFSS SIGNAL,5
GOTO PREOBR
BTFSS SIGNAL,4
GOTO PREOBR
BTFSS SIGNAL,3
GOTO PREOBR
BTFSS SIGNAL,2
GOTO PREOBR
BTFSS SIGNAL,1
GOTO PREOBR
BTFSC SIGNAL,0
GOTO B2
goto PREOBR
B2 ;Продолжение счета
movlw b'00000001'
ADDWF SIGNALH,1 ;Прибавляем след.разряд
BTFSS SIGNALH,0
GOTO MESSAGE
goto PREOBR
;------------------------------------------------------
;------------------------------------------------------
; Сигнализация
;------------------------------------------------------
ALARM
bCf GPIO,1
movlw b'00000000'
movwf SIGNAL
movlw b'00000000'
movwf SIGNALH
;BTFSS GPIO,3
BTFSC GPIO,3
GOTO PREOBR
;BTFSS GPIO,4
BTFSC GPIO,4
GOTO CONTROL
GOTO ALARM
;------------------------------------------------------
;------------------------------------------------------
; Отправка сообщения
;------------------------------------------------------
MESSAGE
movlw b'00000000'
movwf METK
;01110011 Серийный номер
bcf GPIO,2 ;Ctart
nop ;
nop ; -\___
bcf GPIO,2 ; ---\_
bcf GPIO,5 ;
nop ;
bsf GPIO,5 ;
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bcf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bcf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
bcf GPIO,2 ;Для метки
bcf GPIO,5
nop
bsf GPIO,5
;Отправка кода сигнала
;---------------------------
MESS
movlw b'00000001' ;Отключаем опорное напряжение
movwf ADCON0
bsf ADCON0,1 ;Запуск преобразования
btfsc ADCON0,1
goto $-1
nop
nop
nop
nop
movf ADRESH,W
movwf ADCH
bsf STATUS,RP0
movf ADRESL,W
bcf STATUS,RP0
movf ADCL
BTFSC ADCL,0
call M1
BTFSS ADCL,0
call M0
BTFSC ADCL,1
call M1
BTFSS ADCL,1
call M0
BTFSC ADCL,2
call M1
BTFSS ADCL,2
call M0
BTFSC ADCL,3
call M1
BTFSS ADCL,3
call M0
BTFSC ADCL,4
call M1
BTFSS ADCL,4
call M0
BTFSC ADCL,5
call M1
BTFSS ADCL,5
call M0
BTFSC ADCL,6
call M1
BTFSS ADCL,6
call M0
BTFSC ADCL,7
call M1
BTFSS ADCL,7
call M0
BTFSC ADCH,0
call M1
BTFSS ADCH,0
call M0
BTFSC ADCH,1
call M1
BTFSS ADCH,1
call M0
bcf GPIO,2
BTFSS CMCON,6
GOTO mess_off
BTFSC CMCON,6
GOTO MESS
mess_off
;-----------------------------
bcf GPIO,2 ;Stop
nop ; ___/--
nop ; _/----
bsf GPIO,2 ;
GOTO ALARM
;------------------------------------------------------
;------------------------------------------------------
; Подпрограммы отправки сигнала
;------------------------------------------------------
M0
bcf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
call METKA
return
M1
bsf GPIO,2
bcf GPIO,5
nop
bsf GPIO,5
call METKA
return
;-------------------------------------------------------
;------------------------------------------------------
; Подпрограмма метки
;------------------------------------------------------
METKA
movlw b'00000001'
ADDWF METK,1
BTFSS METK,3
return
BTFSC METK,2
return
BTFSC METK,1
return
BTFSC METK,0
return
bcf GPIO,5
bcf GPIO,2
bsf GPIO,5
movlw b'00000000'
movwf METK
return
;------------------------------------------------------
;------------------------------------------------------
; Процедура регулировки порога
;------------------------------------------------------
CONTROL
movlw b'00000001'
ADDWF SIGNAL,1
BTFSS SIGNAL,7
GOTO CONTROL
BTFSS SIGNAL,6
GOTO CONTROL
BTFSS SIGNAL,5
GOTO CONTROL
BTFSS SIGNAL,4
GOTO CONTROL
BTFSS SIGNAL,3
GOTO CONTROL
BTFSS SIGNAL,2
GOTO CONTROL
BTFSS SIGNAL,1
GOTO CONTROL
BTFSS SIGNAL,0
GOTO CONTROL
bsf STATUS,RP0
BSF VRCON,7 ;Настраиваем чувствительность
BSF VRCON,3
movlw b'00000001'
ADDWF CONTROLS,1
BTFSC CONTROLS,3
BCF CONTROLS,3
BTFSC CONTROLS,0
BSF VRCON,0
BTFSC CONTROLS,1
BSF VRCON,1
BTFSC CONTROLS,2
BSF VRCON,2
BTFSS CONTROLS,0
BCF VRCON,0
BTFSS CONTROLS,1
BCF VRCON,1
BTFSS CONTROLS,2
BCF VRCON,2
bcf STATUS,RP0
CONTR
BTFSC GPIO,4
GOTO CONTR
movlw b'00000000'
movwf SIGNAL
CONTR1
movlw b'00000001'
ADDWF SIGNAL,1
BTFSS SIGNAL,7
GOTO CONTR1
BTFSS SIGNAL,6
GOTO CONTR1
BTFSS SIGNAL,5
GOTO CONTR1
BTFSS SIGNAL,4
GOTO CONTR1
BTFSS SIGNAL,3
GOTO CONTR1
BTFSS SIGNAL,2
GOTO CONTR1
BTFSS SIGNAL,1
GOTO CONTR1
BTFSS SIGNAL,0
GOTO CONTR1
movlw b'00000000'
movwf SIGNAL
GOTO PREOBR
;------------------------------------------------------
END


