Прошивка PIC12F675

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
bigory
Родился
Сообщения: 19
Зарегистрирован: Ср сен 28, 2011 19:57:21

Прошивка PIC12F675

Сообщение bigory »

Всем доброе время суток!
Наконец-то удалось написать код для микроконтроллера 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
Реклама
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Dmitry Dubrovenko »

У Вас отсутствует загрузка константы в управляющий регистр генератора (п 9.2.5 даташита).
ICQ нет, и, в ближайшее время, не будет.
Реклама
bigory
Родился
Сообщения: 19
Зарегистрирован: Ср сен 28, 2011 19:57:21

Re: Прошивка PIC12F675

Сообщение bigory »

Т.е. должно быть вот так

Код: Выделить всё

...
;------------------------------------------------------
; Начальные настройки
;------------------------------------------------------
...
bsf STATUS,RP0            ;Выбираем банк 1
movlw b'00011001'
movwf TRISIO
movlw b'00000001'
movwf ANSEL
movlw b'10001000' ;Настраиваем компаратор  /   4 1х бита, это выбор выходного напряжения Vref  /  Настроено на минимум
movwf VRCON  
CALL 3FFh
MOVWF OSCCAL
bcf STATUS,RP0
...
Правильно?
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошивка PIC12F675

Сообщение otest »

Правильно. Будет работать если по адресу 3FFH что нибудь есть.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Dmitry Dubrovenko »

Не "что-нибудь", а
retlw xx где xx - калибровочная константа
Это должно быть прописано в контроллере, при изготовлении, и доступно для чтения даже при выставленных фьюзах защиты.
ICQ нет, и, в ближайшее время, не будет.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Прошивка PIC12F675

Сообщение dosikus »

В протеусе так же , если выставлен внутренний генератор и не прописана константа в коде, будет переполнение стека .
Это если считываем константу.
Реклама
bigory
Родился
Сообщения: 19
Зарегистрирован: Ср сен 28, 2011 19:57:21

Re: Прошивка PIC12F675

Сообщение bigory »

Если я правильно понял, то я должен обратиться в подпрограмму 3FFh и перенести полученное в результате обращения в OSCCAL?
Микроконтроллер был куплен. Один раз прошил ту программу, которая на первом сообщении. Калибровочная константа может быть утеряна? Вроде как ранее не ссылался на тот адрес. При повторной прошивке нужно ли очищять память МК? Пропадет ли в этом случае та константа?
Аватара пользователя
wws63
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Вс май 21, 2006 16:07:59
Откуда: Алтай

Re: Прошивка PIC12F675

Сообщение wws63 »

При первой установке МК в программатор необходимо считать константу и запомнить её, например нацарапать или написать чем-нибудь на корпусе с обратной стороны. Где то видел пример, когда метять краской выводы (6 линий порта = 6 бит константы)
Если при чтении памяти программ по последнему адресу (3FFh) не 34хх, значит всё, пропала константа :(
Ничего страшного, можно помучаться и определить её. А оно вам надо?
movlw .32
movwf OSCCAL
Занести среднее значение. Для подобных проектов этого вполне достаточно :))
Последний раз редактировалось wws63 Чт ноя 10, 2011 19:24:35, всего редактировалось 1 раз.
Аватара пользователя
pazak
Прорезались зубы
Сообщения: 243
Зарегистрирован: Пт фев 26, 2010 03:33:02
Откуда: Донецк

Re: Прошивка PIC12F675

Сообщение pazak »

Нормальные программы (WinPIC 800 или PICPgm) сами сохраняют константу, Ic-Prog - ф топку! :))

С уважением.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Аlex »

pazak писал(а):Ic-Prog - ф топку! :))
IcProg тоже сохраняет всё, не надо ля-ля !!! :evil:
Фтопку кривые руки, которыми управляет кривой мозг ! :)))
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Dmitry Dubrovenko »

Аlex писал(а):IcProg тоже сохраняет всё, не надо ля-ля !!!
Подтверждаю.
wws63 писал(а):При первой установке МК в программатор необходимо считать константу и запомнить её, например нацарапать или написать чем-нибудь на корпусе
Это только если
кривые руки, которыми управляет кривой мозг !
А вообще программаторы сами спрашивают.
wws63 писал(а):movlw .32
movwf OSCCAL
Я просто, при помощи директивы ORG, прописываю в последнюю строку программы retlw .128
При прошивке, программатор спросит, какую из констант выбирать (это, разумеется, если в МК не тоже 128). Если не затёрта, выбираешь "которая в МК", ну, а если затёрта, то "которая в программе".
И в Протеусе тоже всё работает.
ICQ нет, и, в ближайшее время, не будет.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошивка PIC12F675

Сообщение otest »

Я просто, при помощи директивы ORG, прописываю в последнюю строку программы retlw .128
Всвязи с этим нужно внести исправления в ДШ.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Аlex »

otest писал(а):нужно внести исправления в ДШ.
Какие ? Всё там нормально.
Вызов ПП по адресу 0x3FF, а там RETLW .128. Что не так ?
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Прошивка PIC12F675

Сообщение Dmitry Dubrovenko »

otest писал(а):Всвязи с этим нужно внести исправления в ДШ.
Если это - шутка, то неудачная.
Ибо в том самом пункте 9.2.5 даташита сказано:
A calibration instruction is programmed into the last location of program memory. This instruction is a RETLW XX, where the literal is the calibration value.
Ну, а если серьёзно, то собственно и коментировать нечего.

Уп-с... Уже опередили. :)
ICQ нет, и, в ближайшее время, не будет.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»