Угораздило меня взяться за 18-ю серию, а именно за PIC18F14K50. Привлекло малое, но достаточное для большинства моих потребностей количество ног, функциональная насыщенность, "современность" МК, поддержка в ПИККИТ2, ну и наличие USB. Оно мне пока не нужно, но мало ли, вдруг поумнею и решусь задействовать.
Пока чипы в пути (заказал парочку) решил начать разбираться. До этого ничего из современного не трогал, только со старыми испытанными ПИЛ12 и 16 дело имел. Так вот прилепил к нему в Протеусе дисплей от 3310, энкодер с кнопкой и DS1307, чтоб в I2C попрактиковаться. Отработанные куски кода для дисплея и энкодера у меня есть, потому и задействовал их, как удобный визуально-управленческий блок.
Накидал начальные настройки битов, основные регистры законфигурировал, USB отключил, т.к. его выводы завязаны на энкодер, и на дисплей пустил выводить циклическую картинку для теста.
Это все заработало Протеусе (т.е. картинка выводится), но сотнями сыпались ошибки о том, что USB device not recognized. Крутил по всякому, читал и перечитывал описание портов, работу с USB, все правильно вроде. Там же фактически только один бит в регистре UCON, который отключает/включает его, а у меня Протеус показывает, что в нем прыгают биты, что-то там происходит непонятное.
Короче говоря, я это исправил. Каким образом? Просто в командах удалил последний 0, который согласно формату команд, например, movwf f,d,a должен указывать на access ram. Про организацию памяти я, конечно, прочитал, но почему это так влияет на работу, я не понял. Вернее как эта буква в конце влияет на память. Может кто-нибудь популярным языком вкратце объяснит?
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


