Для контроллеров младших семейств (PIC12, PIC16) для изменения доступен только младший байт счётчика PCL. В PIC18 можно производить операции как над младшим, так и над старшим байтами PC.
Програмирование PIC с помощью ассемблера.
Счётчик команд как раз и управляет контроллером. Он указывает ту команду, которую необходимо извлечь из памяти программ и выполнить в следующем цикле работы.
Для контроллеров младших семейств (PIC12, PIC16) для изменения доступен только младший байт счётчика PCL. В PIC18 можно производить операции как над младшим, так и над старшим байтами PC.
Для контроллеров младших семейств (PIC12, PIC16) для изменения доступен только младший байт счётчика PCL. В PIC18 можно производить операции как над младшим, так и над старшим байтами PC.
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых Вас не устраивает...
- Реклама
С каких пор? PCLATH для этого существует. См. даташиты.levscha писал(а):Для контроллеров младших семейств (PIC12, PIC16) для изменения доступен только младший байт счётчика PCL
И с таблицами ничего страшного если ознакомится с AN556 - Implementing a Table Read запросто делаются сколь угодно большие таблицы без опасности вылететь за пределы
Код: Выделить всё
С каких пор? PCLATH для этого существует. См. даташиты.
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых Вас не устраивает...
"И с таблицами ничего страшного " - не страшного, а излишне напрягающего
сравнить
movc a,@a+dptr ; где dptr 16-разрядный, а при сложении учитывается перенос из А.7
или
movc a,@a+PC ; mcs51
или
pchl
sphl; - intel 8080
или разновидности чтения и переходов для AVR
с
retlw
где надо отслеживать и границу страниц и содержимое pclath...
а попробуй простенький условный возврат из подпрограммы выполнить или табличный селектор переходов(без излишнего внимания)
сравнить
movc a,@a+dptr ; где dptr 16-разрядный, а при сложении учитывается перенос из А.7
или
movc a,@a+PC ; mcs51
или
pchl
sphl; - intel 8080
или разновидности чтения и переходов для AVR
с
retlw
где надо отслеживать и границу страниц и содержимое pclath...
а попробуй простенький условный возврат из подпрограммы выполнить или табличный селектор переходов(без излишнего внимания)
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
Есть с счётчиком команд разобрался.
Теперь прошу объяснить (что это, как эго понимать и как это делается), такие пункты.
1.Определить активный фронт прерывания.
2.Если мы установили прерывание из порта Б, тоесть любая изменение на какойнибуть ноге этого порта приведёт к уходу в подпрограмму, но как узнать какая именно нога отправила в ПП? Опрашивать каждую в ПП?
Теперь прошу объяснить (что это, как эго понимать и как это делается), такие пункты.
1.Определить активный фронт прерывания.
2.Если мы установили прерывание из порта Б, тоесть любая изменение на какойнибуть ноге этого порта приведёт к уходу в подпрограмму, но как узнать какая именно нога отправила в ПП? Опрашивать каждую в ПП?
- Реклама
По п.1 видимо идёт речь про внешнее прерывание (INTE). Не путать с прерыванием по изменению уровня. Тут смысл что прерывание будет срабатывать по фронту либо спаду (это выбирается данным битом) импульса на ноге с этим прерыванием. Т.е. подав меанд на эту ногу прерывания будут происходить по 1 разу за период этого меандра. А в случае с изменеием уровня - 2 раза за период, ибо фронт (0->1) = спаду (1->0) = прерывание.
2. Так и есть. Только внимательно даташит смотри потому что особенно у старых камней не все ноги имеют интеррапт-он-чендж. Вообще часто не обязательно уводить проц в прервание (кнопки, например), а достаточно опрашивать соответствующие флаги/ноги_портов по ходу работы, ибо если запретить все прерывания глобально, но включить по отдельности их то на соответствущее событие будет вставать флаг-бит, но проц не уйдёт в прерывание.
2. Так и есть. Только внимательно даташит смотри потому что особенно у старых камней не все ноги имеют интеррапт-он-чендж. Вообще часто не обязательно уводить проц в прервание (кнопки, например), а достаточно опрашивать соответствующие флаги/ноги_портов по ходу работы, ибо если запретить все прерывания глобально, но включить по отдельности их то на соответствущее событие будет вставать флаг-бит, но проц не уйдёт в прерывание.


