ПП чтения данных из Flash памяти программ.

Автор: Super User Просмотров: 1380

 

;------------------------------------
; таблица данных TEST
;------------------------------------
TEST  
db  0x14, 0x22, 0x36, 0x04

Чтения 1 байта.

            clrf           TBLPTRU ; Cбрасываем верхний байт
            movlw       high (TEST); =Задание адреса "TEST"
            movwf          TBLPTRH ;  старшего байта=
            movlw        low (TEST); =Задание адреса "TEST"
            movwf          TBLPTRL ;  младшего байта=
            call            R_DATA ; Вызов ПП чтения.
            результат в  "W"

 

;-------------------------------------
; ПП чтения  данных из памяти программ
; 1 байт
;-------------------------------------
R_DATA     TBLRD*                 ; Чтение байта
           movf          TABLAT,0 ; Результат в W
           return

 

 

 

 

Чтения нескольких  байт.

 

 

В примере таблица "TEST", состоящая из 8 байт копируется в область памяти данных (ОЗУ). Ограничение  объема таблицы  нет, все зависит от конкретного МК (сколько в нем ОЗУ).

Начальный адрес области "ОЗУ", куда в конечном итоге будут копироваться данные, указывается в строке:

lfsr       FSR0,0x0100 ; Начальный адрес В ОЗУ 0100h

;------------------------------------
; таблица данных TEST
;------------------------------------
TEST  
db  0x14, 0x22, 0x36, 0x04, 0x11, 0x02, 0x06, 0x44

 

;--------------------------------------------------------------
;Регистра общего назначения:
R_Bute_L - младший байт кол-ва данных таблицы.  
R_Bute_H - старший байт кол-ва данных таблицы. 
;--------------------------------------------------------------
            clrf           TBLPTRU ; Cбрасываем верхний байт
            movlw       high (TEST); =Задание адреса "TEST"
            movwf          TBLPTRH ;  старшего байта=
            movlw        low (TEST); =Задание адреса "TEST"
            movwf          TBLPTRL ;  младшего байта=
            lfsr       FSR0,0x0100 ; Начальный адрес В ОЗУ
            movlw               .8 ;
            movwf         R_Bute_L ; Кол-во байт (младший).
            movlw               .0 ;
            movwf         R_Bute_H ; Кол-во байт (старший).
            incf          R_Bute_H ; Коррекция.
            call            R_DATA ; Вызов ПП чтения.
            Результат в ОЗУ 8 байт  адреса 0100-0107h


            
;-------------------------------------
; ПП чтения данных из памяти программ
;-------------------------------------
 R_DATA    TBLRD*+                 ; Чтение байта +1 адрес
           movff      TABLAT,INDF0 ; Результат в ОЗУ
           movf           POSTINC0 ; Увеличиваем адрес FSR0L на 1
           decfsz         R_Bute_L ; Все прочитаны?
           bra              R_DATA ; нет,следующий
           decfsz         R_Bute_H ; Все прочитаны?
           bra              R_DATA ; нет,следующий   
           return                  ; Да, возврат из ПП

 

Важно:

Если таблица состоит из нескольких строк, то все строки кроме последней, должны иметь четное количество байт.

 


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru