Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 79 99

Поисчите в примерах MPLabs. Я точно помню, что в конце asm файла была команда org и за ней как то содержиме было записанно...
Там смысл на подобие слова конфигурации, оно также может размещатся в hex файле под определенным адрессом
....
что-то я вовсе примеров в MPLabs не нашел

 

Нашел в примере тетриса (Rickard Gunee 1998) у себя на пк:

org 0x2100
dw m_a3 + m_l2
dw m_e3 + m_l4
.....
dw m_d3 + m_l2
end

может это оно и есть?
.....
Проверил Яндексом - похоже оно и есть!

 

Спасибо, концы нашлись.

 

Хочу внести определенность для "грядущих поколений".
В "шапке" программы до директивы org 0 записываются директивы

org 0x2100 ;
DE число1, число2, число3,... и т. д.

Вместо "число1, число2,.." записываются восьмиразрядные числа, которые мы хотим записать в EEPROM при прошивке. Запись осуществляется по порядку, начиная с ячейки с адресом 0х00, далее 0х01 и т. д. Записать данные сразу, например, в ячейку с адресом 0х05, не записывая ничего в предыдущие ячейки, невозможно. Т.е., если мы хотим записать данные в в ячейку с адресом 0х05, необходимо записать какие-то данные во все предыдущие ячейки.

 

Zandy: записать данные в в ячейку с адресом 0х05
А если написать: org 0x2105 ?

 

SAK: А если написать: org 0x2105 ?
Процедура не будет осуществлена. В директиве org 0x2100, 0x2100 - не номер ячейки, а программный вектор, по которому должна быть записана вся последущая "ботва".

 

Zandy: В "шапке" программы до директивы org 0 записываются директивы
org 0x2100 ;
DE число1, число2, число3,... и т. д.

Будем знать. Спасибо.

 

Вопрос опять по работе с EEPROM.
Интересует назначение бита EEIE в регистре PIE(1). Влияет ли этот бит на все прерывания или только на прерывания от перефирийных модулей? У меня есть считывание - запись в EEPROM, прерывания от TMR0, "недопрерывания" от изменения состояния выводов, т. е. чтобы из SLEEPа выходить - GIE в 0, а GPIE в 1 (pic12f629).
Надо ли при таком раскладе "работать" с битом EEIE, т. е. устанавливать его в 1?

И еще влияют ли на флаг прерывания по изменению состояния выводов (надо ли его сбрасывать) такие вот "недопрерывания", как описано выше. То есть, когда глобальные прерывания запрещены, а прерывания по входам разрешены, из SLEEPа выходим, а по org4 не идем, выполняется следующая команда?

 

Zandy: Интересует назначение бита EEIE

Может на АВРы перейдём, а?

EEIE - разрешение прерываний по окончанию записи в EEPROM.
То есть, существует 2 подхода к записи в EEPROM.

Первый - EEIE=0, записать, и опрашивать флаг готовности (WR).

Второй - EEIE=1, записать и отвалить (уснуть, заняться другими делами...). После окончания записи возникнет прерывание, в обработчике заслать след. байт либо запретить прерывания.

 

AHTOXA: флаг готовности (WR)
Наверное не WR, а EEIF - флаг прерывания по окончанию записи в EEPROM? Н у с опросом понятно, а вот...
AHTOXA: После окончания записи возникнет прерывание
Т.е. программа перейдет по вектору org4? А как это? Ведь GIE = 0 при записи.
И еще непонятно. Что тогда делать контроллеру? Если мне надо по ходу программы сразу после записи разрешить прерывания, ну например по таймеру? Я не могу этого делать, пока не возникло прерывание по завершению записи? Делать паузу?