Какой-то фон. Я использую MPLABx с PicKit2 для программирования различных типов изображений. На данный момент это 16F887. Я стараюсь придерживаться цепочки инструментов Hi-Tech PICC Lite, но я все больше недоволен тем, как собраны некоторые вещи. Операции, которые должны быть относительно быстрыми (учитывая цикл команд 500 нс на частоте 8 МГц), выполняются за 20 мкс. Поэтому я начал вставлять свой собственный код ASM, чтобы справиться с этим.
Однако у меня возникли трудности с пониманием карты памяти, представленной в таблице данных на странице 20.
Память программ начинается с 0005h. Однако на странице 23 показаны адреса файлов регистров специального назначения, таких как, например, порт A. Адрес порта А отображается как «05h».
Я не понимаю, как отличить ячейку памяти 0005h от регистра специального назначения, расположенного по адресу 05h. Как ссылаться на регистры специального назначения?
Я занимался довольно обширным программированием на ассемблере для старых чипов HC11, но это мой первый опыт программирования PIC asm. Любая помощь здесь будет оценена по достоинству.
PIC использует так называемую «гарвардскую архитектуру», что означает наличие отдельных адресных пространств для инструкций и данных.
Относится ли адрес к регистру или к инструкции, зависит от контекста, в котором он используется.
Диаграммы в разделе 2.1 «Организация памяти программ» относятся к памяти программ или адресному пространству команд. Диаграммы в разделе 2.2 «Организация памяти данных» относятся к регистрам и регистрам специальных функций или адресному пространству памяти данных.
То, что сказал Дейв, но я также хочу указать, что память программ начинается с 0, а не с 5. При сбросе процессор устанавливает ПК в 0 и начинает работать. При прерывании процессор фактически вызывает обращение к ячейке 4 и отключает глобальный бит разрешения прерывания. Ячейка памяти программы 5 не является специальной, за исключением того, что это будет вторая инструкция процедуры прерывания, если у вас есть процедура прерывания.
Майкл
Олин Латроп
Майкл