ПІК PCL і PCLATH Проблема

N

neoaspilet11

Guest
Привіт всім,

Я отримав цей забавний досвід у поводженні з PCL і PCLATH регістрів ПОС.

У мене величезні таблиці даних у величині 800 елементу пам'яті.Переглянути видання моєї таблиці даних налічує більше 3000 осередків пам'яті.Але я не кодується ще.

Проблема виглядає наступним чином

WREG = 7C; перед входом в таблиці даних
PCLATH = 00h

Таблиця addwf PCL, 1; PCL = PCL ш Address = 0x83
....
....
....
retlw XX; Address = 00FF
retlw YY; Address = 0100
retlw ZZ; Address = 0101
.....
.....

Ви бачите, коли команда ДОДАТИ виконується, PCL = 100h або буфера!MPU просто виконати RESET вектор замість виконання Адреса 0100h.Хе-хе Мені знадобилося 30 хвилин, щоб зрозуміти, що була моя помилка.

Хоча у мене є рішення цієї проблеми шляхом простого поділу таблиці даних з декількох таблиць і маніпулювання Співвідношення які будуть додані до PCL, PCL PCLATH і я все ще є питання.

1.) Хіба це не автоматично, коли PCL переповнення, крім інструкції PCL, PCLATH буде збільшуватися?

2.) Чи є інший спосіб реалізації таблиці, не розділяючи його на декілька таблиць?(Слід зазначити, що значення, яке буде додано до PCL більше 8 біт. Це означає, що відповідні manipualtion PCLATH також має бути зроблено.)

3.) Можна маніпулювати як PCL і PCLATH всього одна інструкція з тільки що доданої вартості на це?

Дякуємо за ваші ідеї.

 
Ви можете мати великий стіл, скачки, якщо ви робите це правильно.Від'їзд piclist, але от наприклад в АСМ:

Код:TABLELOOKUP:

movlw (висока) (TABLESTART)

addwf offsetHigh, Вт; додати високою часткою

movwf PCLATH

movf offsetLow, ш

addlw (низький) TABLESTART; додати нижня частина

btfsc СТАТУС, C; виконувати при низькому переповнення частина

incf PCLATH, е

movwf PCL; стрибок

TABLESTART:

 
Привіт jonw0224,

Це було дуже акуратним у самому справі!Thnak дуже багато.Хоча я до сих пір, щоб спробувати код, але принаймні ви мені дали ідею.

neoaspilet11Є Вираз (висока) (TABLESTART) дорівнює верхній 5 бітів адреси TABLESTART?

Є Вираз (LOW) (TABLESTART), рівний нижньої 8 біт адреси TABLESTART?

 
Код, я отримав від piclist (www.piclist.com) близько роки тому.Існують і інші варіації одного й того ж.

Для 16-розрядні числа, висока дає найбільш значний 8 біт і низькою дає 8-ми значущих бітів.Для 24-розрядні числа, можна використовувати в середині, який дає центру 8 біт.Таким чином, в основному, в АНМ, так.

 

Welcome to EDABoard.com

Sponsor

Back
Top