JohnKorsh 1 6 мая, 2011 Опубликовано 6 мая, 2011 · Жалоба Добрый день! Код для PIC16F887 после ассемблирования пересёк границу банка памяти. Как правильно написать call, чтобы вазвать поцедуру из другого банка памяти и верннуться в вызывавший банк? И как то же самое проделать с goto? Если можно, то с "кусками" ассемблера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Driver_GV 1 6 мая, 2011 Опубликовано 6 мая, 2011 · Жалоба Добрый день! Код для PIC16F887 после ассемблирования пересёк границу банка памяти. Как правильно написать call, чтобы вазвать поцедуру из другого банка памяти и верннуться в вызывавший банк? Для перехода в следующий банк: ;********************************************************************** ORG 0x100 ;********************************************************************** START PAGESEL _INIT CALL _INIT^800 PAGESEL START ...... ;********************************************************************** ORG 0x800 ;********************************************************************** _INIT .. .. RETURN ;***** PAGESEL LCD_INIT GOTO LCD_INIT^800 Для перехода через банк заменить ^800 на ^1000 Для перехода через 2 банка заменить ^800 на ^1800 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 6 мая, 2011 Опубликовано 6 мая, 2011 (изменено) · Жалоба Непонятно...) этош 16-ый pic тамже вроде по банкам только регистры расбросанны так и пишиш : org 0x0 goto main ... main: call _delay5us ... _delay5us: nop nop nop nop return ... end или я эт дурак?) Изменено 6 мая, 2011 пользователем Integro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 6 мая, 2011 Опубликовано 6 мая, 2011 · Жалоба Непонятно...) этош 16-ый pic тамже вроде по банкам только регистры расбросанны В системе команд мелких пиков разрядность адреса в инструкциях call и goto составляет 11 бит, поэтому память программ режется на 2К страницы, выбор которых выполняется в PCLATH. Не ленитесь заглядывать в даташиты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 7 мая, 2011 Опубликовано 7 мая, 2011 · Жалоба Добрый день! Код для PIC16F887 после ассемблирования пересёк границу банка памяти. Как правильно написать call, чтобы вазвать поцедуру из другого банка памяти и верннуться в вызывавший банк? И как то же самое проделать с goto? Если можно, то с "кусками" ассемблера. Эх, ностальгия, смахнул подступившую слезу, достал с полки архивный CD-ROM многолетней давности и вытащил из архива макросы, которые я последний раз обновлял 9 лет назад. То что вам нужно, в начале идет, CALL и GOTO с учетом страниц (PxxCALL, PxxGOTO). Там же и остальное, что использовал, вдруг чего пригодится. MACDEFS.ZIP там где в комментарии написано ";C ВКЛЮЧЕНИЕМ ПЕРВОЙ СТРАНИЦЫ ОЗУ (ЕСЛИ НУЖНО)" на самом деле имеется в виду любая из четырех страниц, макросы начинали писаться когда пики были маленькими, потом макросы подредактировал, а комментарии поленился :) Но мой вам совет: идите-ка вы в Си, бросайте на чистом ассме писать. Вставки ассмовские раз в пять лет приходится делать, но не каждый год. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnKorsh 1 19 мая, 2011 Опубликовано 19 мая, 2011 · Жалоба Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться