.
Вызов ПП "W_DATA " результат в памяти данных.
;*************************************************************************** ;*************************************************************************** ; В ПП необходимо указать количество блоков по 8 байт, начальный адрес в ОЗУ, ; выделено красным цветом. Не забыть в начале программы своего приложения ; сбросить флаг ошибки. ;*************************************************************************** ;*************************************************************************** ;----------------------------------- ; Регистры общ. назначения ;----------------------------------- cblock 00h ; Flag ; Флаг ошибки. R_Bute_L ; Младший байт кол-ва данных таблицы. R_Bute_H ; Старший байт кол-ва данных таблицы. ProvEE_L ; Младший байт кол-ва данных проверки записи. ProvEE_H ; Старший байт кол-ва данных проверки записи. Temp ; Counter ; Количество байт (всегда 8) Count_Blok ; Количество блоков по 8 байт endc ; ;----------------------------------- ; ПП записи в память программ. ;----------------------------------- W_DATA movlw .8 ; movwf Count_Blok ; Количество байт (всегда 8) call Ukaz_1 ; TBLPTR на начало таблицы movlw .8 ; Количество блоков по 8 байт MULWF Count_Blok ; Высчитаваем общее количество байт movff PRODH,R_Bute_H ; Кол-во байт (старший, для коп. в ОЗУ movff PRODL,R_Bute_L ; Кол-во байт (младший),для коп. в ОЗУ movff PRODH,ProvEE_H ; Кол-во байт (старший) для проверки записи movff PRODL,ProvEE_L ; Кол-во байт (младший) для проверки записи incf R_Bute_H ; Коррекция. incf ProvEE_H ; Коррекция. call Ukaz_1 ; TBLPTR на начало таблицы call R_DATA ; Вызов ПП чтения. call ZAP_data ; Тестовая - для демонстрации (удалить) call Ukaz_1 ; TBLPTR на начало таблицы movlw .8 ; =Коррекция subwf TBLPTRL,F ; = movlw 0 ; = subwfb TBLPTRH,F ; = call Counter_8 ; Запись новых данных call Ukaz_1 ; TBLPTR на начало таблицы call PROV_EE ; Проверка записи return ;----------------------------------- ; проверка записи ;----------------------------------- PROV_EE TBLRD*+ ; Чтение байта +1 адрес movf POSTINC0,0 ; CPFSEQ TABLAT ; bsf Flag,0 ; Флаг ошибки. decfsz ProvEE_L ; Все прочитаны? bra PROV_EE ; нет,следующий decfsz ProvEE_H ; Все прочитаны? bra PROV_EE ; нет,следующий return ; Да, возврат из ПП ;----------------------------------- ; Короткая запись 8 байт ;----------------------------------- Counter_8 movlw 8 ; Задание количества movwf Counter ; байтов в одном блоке. nop movf POSTINC0,0 ; =Копируем в W значение регистра. movwf TABLAT ; в регистр TABLAT= tblwt*+ ; Запись в защелку decfsz Counter ; Все байты блока записаны? bra $-.8 ; нет,следующий. ;----------------------------------- ; Длинная запись ;----------------------------------- bsf EECON1,EEPGD ; Работа с Flash-памятью программ. bcf EECON1,CFGS ; Обращение к Flash памяти программ bsf EECON1,WREN ; Разрешение записи. bcf INTCON,GIE ; Запрет прерывания movlw 055h ; = movwf EECON2 ; Обязательная movlw 0AAh ; процедура. movwf EECON2 ; = bsf EECON1,WR ; Инициализация цикла записи. nop ; bsf INTCON,GIE ; Разрешение прерывания. decfsz Count_Blok ; Кол-во блоков по 8 байт call Counter_8 ; bcf EECON1,WREN ; Запрет записи. return ; Возврат из прерывания ;------------------------------------- ; Указаталь TBLPTR на начало таблицы ; FSR0,0x0100 ; Начальный адрес В ОЗУ ;------------------------------------- Ukaz_1 clrf TBLPTRU ; Cбрасываем верхний байт movlw high (TEST); =Задание адреса "TEST" movwf TBLPTRH ; старшего байта= movlw low (TEST); =Задание адреса "TEST" movwf TBLPTRL ; младшего байта= lfsr FSR0,0x0100 ; Начальный адрес В ОЗУ return ;------------------------------------- ; ПП чтения данных из памяти программ ;------------------------------------- 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 ; Да, возврат из ПП ;------------------------------------- ; ПП предварительной записи в ОЗУ необходимых ; данных, 15 байт. ПРИМЕР !!! ;------------------------------------- ZAP_data lfsr FSR0,0x0107 ; Адрес первого регистра для изменения. movlw .14 ; Всего 14 байт movwf Temp ; clrf INDF0 ; Очистить регистр movf POSTINC0 ; Увеличиваем адрес FSR0L на 1 decfsz Temp ; Все очищены? bra $-.6 ; нет,следующий lfsr FSR0,0x013C ; Адрес регистра для изменения. clrf INDF0 ; Очистить регистр return ; Да, возврат из ПП ;-------------------------------------------------------- ;ТАБЛИЦА ДАННЫХ 64 БАЙТА (ПРИМЕР) ;-------------------------------------------------------- org 0100h ; размещение таблицы начиная с 0100h TEST db 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, db 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x06, 0x0F, 0x10, db 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, db 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, db 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, db 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x06, 0x0F, 0x10, db 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, db 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|