"Hello world!" на pic16f877a

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

"Hello world!" на pic16f877a

Сообщение Gurvinok »

Всем привет!
Я AVRшик, а PICи видел только припаянные к плате, но жизнь заставила разобраться с устройством на PIC контроллере. Дали мне HEX файл и все. Я его деассемблировал и начал изучать. Естественно ASM AVR отличается от ASM PIC. Отсюда встал вопрос изучения этого дела. Поставил MPLAB X, купил для мучений PIC16F877A, собрал схему на макетке в виде МК + кварц на 8МГц с двумя капаситорами на 22р от кварца на GND и светодиод от RC3 через резюк на GND. Программатор PicKit3. Ну вроде бы как все должно быть комильфо, но...
Накидал такой код.

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

    LIST p=16F877A
    __CONFIG 3FF1H
    
    ERRORLEVEL -302
    
STATUS   equ  03h
TRISC    equ  87h
PORTC    equ  07h
RP0	 equ  5
PC3	 equ  3
    
    org 0
    
    clrf STATUS
    
    bsf STATUS,RP0
    bcf TRISC,PC3

    bcf STATUS,RP0
    bsf PORTC,PC3
    
    end
Все скомпилилось без ошибок, но светодиод не горит, а на RC3 сидит 0,53в как на всех остальных ногах. Как я понял из 0 в 1 я так и не перешел.
Вопрос. В чем может быть проблема? Смущает регистр STATUS. Когда я сбрасываю третий разряд в регистре TRISC для перевода пина на выход, мне нужно перейти в банк1. Собственно в регистре STATUS я это и делаю выставляя RP0 в единицу, а вот когда мне нужно перебраться в банк 0... Регистр STATUS присутствует во всех банках но имеет разный адрес 0x0003, 0x0083, 0x0103, 0x0183. Здесь и сомнения, он сквозной для всех банков или нужно при переходе из одного банка в другой задавать изменения в текущем банке. Я уже запутался. Как мне зажечь светодиод, я уже не говорю о мигании.
Я не волшебник, я только лечусь
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: "Hello world!" на pic16f877a

Сообщение Zhuk72 »

Во-первых, на ресет надо повесить подтяжку. Оригинальный ДШ на стр. 148.
Во-вторых, не надо расписывать адреса регистров. Нужно только в начале исходника написать include p16f877a.inc
В-третьих, чтобы не мучиться с комбинациями битов для выбора банка, можно писать, скажем,

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

  banksel TRISC
  bcf TRISC,3
Препроцессор потом заменит banksel на нужную комбинацию битов в регистре STATUS, который, как вы верно заметили, "сквозной" во всех банках. А можно и свои макросы использовать, типа таких:
Спойлер

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

bank0	macro
	bcf STATUS,IRP
	bcf STATUS,RP1
	bcf STATUS,RP0
	endm

bank1	macro
	bcf STATUS,IRP
	bcf STATUS,RP1
	bsf STATUS,RP0
	endm
	
bank2	macro
	bsf STATUS,IRP
	bsf STATUS,RP1
	bcf STATUS,RP0
	endm
	
bank3	macro
	bsf STATUS,IRP
	bsf STATUS,RP1
	bsf STATUS,RP0
	endm
Чтобы засветить светодиод, напишите

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

  banksel PORTC
  bsf PORTC,3
А вообще желательно инициалищировать всю периферию, она может влиять (и влияет) на работу портов. В случае RC3 вроде ничего нет, но для проверять нужно. В конце каждого раздела в мануалах написано, какие регистры и биты в них играют роль в данном разделе (SUMMARY OF REGISTERS ASSOCIATED WITH xxx).

Добавлено after 6 minutes 54 seconds:
Забыл еще один момент: конфиг-биты пишите в таком виде:

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

 __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF
Их список в том же inc файле, но средствами МПлаба можно это автоматизировать. Для этого в меню выбираете Window - PIC memory views - Configuration Bits. В нем выставляете нужное, потом жмете Generate Sorce Code, копируете и вставляете в исходник.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: "Hello world!" на pic16f877a

Сообщение Gurvinok »

include p16f877a.inc
Уже пробовал, пишет что такой файл не найден. Поэтому расписывал все вручную.
У меня по ходу что-то в железе, а что не могу понять. В протеусе работает, а на железе нет, хотя MPLAB пишет что все залил и верификация прошла удачно.
Оригинальный ДШ на стр. 148.
Хотят резистор не более 40К, поставил на 20К. Теперь MPLAB перестала видеть МК.
Я не волшебник, я только лечусь
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: "Hello world!" на pic16f877a

Сообщение otest »

#include
10k прямо на MCLR
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: "Hello world!" на pic16f877a

Сообщение Gurvinok »

#include
Ну не дурак. Чай AVR рограммирую, там та же песня. :))
Window - PIC memory views - Configuration Bits
Вот это тема. Он сам мне все сделал.
10k прямо на MCLR
Не помогает. Причем если отсоединяю программатор и запитываю от внешнего источника, то светодиод промаргивает один раз.

Добавлено after 22 minutes 51 second:
Все, разобрался. В конфигурационном регистре нужно вместо _FOSC_XT поставить _FOSC_HS, тем самым разрешить работу быстрых кварцев. Очень напоминает фьюз биты в Мегах)))
Я не волшебник, я только лечусь
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: "Hello world!" на pic16f877a

Сообщение Zhuk72 »

Gurvinok писал(а):
include p16f877a.inc
Уже пробовал, пишет что такой файл не найден.
Как же так? Я именно так и писал всегда,все видит.
Он здесь сидит : C:\Program Files (x86)\Microchip\MPLABX\v3.40\mpasmx

Проект целым архивом можно увидеть?
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: "Hello world!" на pic16f877a

Сообщение Gurvinok »

Вот весь код.

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

    LIST p=16F877A
    
    #include "p16F877A.inc"

    __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_ON & _CPD_OFF & _WRT_OFF & _CP_OFF
    
    ERRORLEVEL -302
   
    RP0	 equ  5
    PC3	 equ  3
    
    org 0
    
    clrf STATUS
    
    bsf STATUS,RP0
    bcf TRISC,PC3

    bcf STATUS,RP0
    bsf PORTC,PC3
    
    end

Это я дурак. По не внимательности создал проект не под 16F877A, а под 16LF877A. Вот он и не видел.
Я не волшебник, я только лечусь
Ответить

Вернуться в «PIC»