Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Hello world
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
DmitrySvrv
Собрал себе макетную плату.
Подключил PIC по стандартной схеме.

5В на сброс, 5В на питание, внешний генератор кварц 4 МГц конденсаторы 18пФ

Написал программу

LIST P=16F876
; указывает программе тип контроллера
TITLE Программа моргания светодиодами
; имя программы
include "C:\Program Files\Microchip\MPASM Suite\P16F876A.INC"
; включение в текст имен стандартных регистров микроконтроллера
include "C:\LED\Header\LED.h"
; включение в текст файла заголовка с нашими определениями
; ************************************************** *********
org 0x00
goto Entry ; переход к основной программе
;************************************************* ***********
; Инициализация
; ************************************************** *********
Entry
clrwdt ; убиваем сторожа
bcf INTCON,GIE ; запрет прерываний
bcf _RP1 ; выбор банка 1
bsf _RP0
clrf TRISB ; порт В как выход

; ************************************************** **************
; Основная программа
; ************************************************** **************
bcf _RP0 ; выбор банка 0
movlw 0xFF ; записываем в аккумулятор 11111111
movwf PORTB ; логическая 1 на выходах
goto Entry ; зациклили
; ************************************************** **************
END


Компилятор выдал

Make: The target "C:\LED\Source\LED.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F876A "LED.asm" /l"LED.lst" /e"LED.err"
Warning[205] C:\LED\SOURCE\LED.ASM 1 : Found directive in column 1. (LIST)
Message[302] C:\LED\SOURCE\LED.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[203] C:\LED\SOURCE\LED.ASM 25 : Found opcode in column 1. (bcf)
Warning[203] C:\LED\SOURCE\LED.ASM 26 : Found opcode in column 1. (movlw)
Warning[203] C:\LED\SOURCE\LED.ASM 27 : Found opcode in column 1. (movwf)
Warning[203] C:\LED\SOURCE\LED.ASM 28 : Found opcode in column 1. (goto)
Loaded C:\LED\Source\LED.COD.
BUILD SUCCEEDED: Thu Mar 31 21:41:22 2011

Заливаю хекс программатором фитон Chip Prog-2
Не работает, почему? 1111493779.gif
Чем можно посмотреть есть ли тактовая частота, осцил. не показваетsad.gif то ли уровень малый то ли сажает

GetSmart
табуляций не хватает перед инструкциями. (наверное)

а название правильнее писать - чё за ботва, пацаны?
DmitrySvrv
никак не хочет дружить со мной микроконтроллер.

Следующий мой шаг был поморгать светодиодом.
есть такая периферия TMR0.

Частота 4МГЦ, предделитель на 256 - итого 15 Гц
или 0,07с за такт.
256*0,07=17с- задеражка при переполнении регистра ТМР0

Код:
Код
   LIST P=16F876
; указывает программе тип контроллера
TITLE Программа моргания светодиодами
; имя программы
include "C:\Program Files\Microchip\MPASM Suite\P16F876A.INC"
; включение в текст имен стандартных регистров микроконтроллера
include "C:\LED\Header\LED.h"
; включение в текст файла заголовка с нашими определениями
; ********************************************************
    org 0x00
    goto Entry; переход к основной программе
;*********************************************************
; Инициализация
; *******************************************************
Entry
    bcf INTCON,2
    clrwdt; убиваем сторожа
    bcf INTCON,GIE; запрет прерываний
    bcf _RP1; выбор банка 1
    bsf _RP0
    clrf TRISB; порт В как выход
    
LED_ON
    bcf _RP0; выбор банка 0
    movlw 0xFF; записываем в аккумулятор 11111111
    movwf PORTB; логическая 1 на выходах

Pause1
    movlw b'11000111'; Настроить предделитель на 256  тмр0,от внутр.г.                      
    movwf OPTION_REG
    bsf INTCON,5      ; Разрешить прерывания
    incf TMR0,1         ;ИНкримент регистра тмр0
    BTFSS INTCON,2   ;Проверим на прерывание от регистра
    goto Pause1
LED_OFF
    bcf _RP0; выбор банка 0
    movlw 0x00;  
    movwf PORTB; логический 0 на выходах
Pause2
    movlw b'11000111'
    movwf OPTION_REG
    bsf INTCON,5
    incf TMR0,1
    BTFSS INTCON,2
    goto Pause2
    goto LED_ON

END



И что он не хочет работать то?
xemul
Цитата(DmitrySvrv @ May 3 2011, 21:36) *
Код
...
; однократным убийством его не возьмёшь
    clrwdt; убиваем сторожа
...
Pause1
; в Вашей проге это достаточно сделать единожды до LED_ON
    movlw b'11000111'; Настроить предделитель на 256  тмр0,от внутр.г.                      
    movwf OPTION_REG

; чесслово, лень смотреть, за что отвечает 5 бит в INTCON
; а если учесть bcf INTCON,GIE чуть выше, то и бессмысленно
    bsf INTCON,5; Разрешить прерывания

; зачем? таймер сам будет считать
; 'incf TMR0, f' никогда не приведёт к T0IF, а вот прескейлер будет сбрасываться
    incf TMR0,1;ИНкримент регистра тмр0
    BTFSS INTCON,2;Проверим на прерывание от регистра
    goto Pause1
; здесь, если оно вдруг случится, очень к месту будет
    BCF INTCON,2
...

И что он не хочет работать то?

Он работает. Как написали, так и работает.
sargein
Цитата(DmitrySvrv @ May 3 2011, 20:36) *
никак не хочет дружить со мной микроконтроллер.

Следующий мой шаг был поморгать светодиодом.
есть такая периферия TMR0.

Частота 4МГЦ, предделитель на 256 - итого 15 Гц
или 0,07с за такт.
256*0,07=17с- задеражка при переполнении регистра ТМР0


И что он не хочет работать то?



интересно считаете...

Частота кварца 4 МГц => частота на таймере 4/4 = 1 МГц => 1МГц/256 = 3,90625 кГц или 256 микросекунд
xemul
Цитата(sargein @ May 3 2011, 23:53) *
интересно считаете...

Частота кварца 4 МГц => частота на таймере 4/4 = 1 МГц => 1МГц/256 = 3,90625 кГц или 256 микросекунд

Вы забыли про прескейлер
1 МГц / 256 / 256 = 15.3 Гц частота T0IF без вмешательства ручек

Кто такая "17с- задеражка", я тоже не понял, но оно несущественно.
sargein
upd. перечитал и въехал, что вы имели ввиду частоту T0IF, с этим согласен, я в своем посте считал время одного тика просто, а не полного заполнения регистра TMR0
_Pasha
Цитата(DmitrySvrv @ May 3 2011, 20:36) *
И что он не хочет работать то?

Хинт: все попытки наладить дружбу с пиками лучше делать на основе симулятора MPLAB. Потому что он- правильный и ему можно верить.
testerplus
Чтение документации укрепит дружбу. Особенно про таймер и про прерывания. А еще про то, что запись в TMR0 обнуляет счетчик прескейлера.
dimka76
а еще про FUSE bit забыли.
Они прямо в тексте программы должны прописываться.
xemul
Цитата(dimka76 @ May 4 2011, 12:08) *
а еще про FUSE bit забыли.
Они прямо в тексте программы должны прописываться.

Кстати, да. По умолчанию этот пик будет считать, что его от RC заводят.
Но, м.б., ТС тоже ручками в программаторе CONFIG задаёт?
Цитата(DmitrySvrv @ Mar 31 2011, 21:51) *
Чем можно посмотреть есть ли тактовая частота, осцил. не показваетsad.gif то ли уровень малый то ли сажает

Прочитать 12.1, 12.2 ДШ, и "%Program Files%\Microchip\MPASM Suite\hlpMPASMAsm.chm" на предмет __config.
Кварц 4 МГц == XT
dimka76
Цитата(DmitrySvrv @ Mar 31 2011, 21:51) *
Чем можно посмотреть есть ли тактовая частота, осцил. не показваетsad.gif то ли уровень малый то ли сажает


Щуп с делителем нужен.
mmor
Цитата(DmitrySvrv @ Mar 31 2011, 21:51) *
Чем можно посмотреть есть ли тактовая частота, осцил. не показваетsad.gif то ли уровень малый то ли сажает


Я сначала подавал питание, потом смотрел осциллографом обычным щупом. Если сразу ставлю щуп, а потом включаю - генерации нет.
7 Мгц. 1886ВЕ2У
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.