От военных сводок к мирной жизни — распределяем память микроконтроллера PIC16F

Это очень важно — хранить данные не только в регистрах Памяти для Данных, но и Памяти для Программ (Линейной памяти, флэш памяти). При необходимости извлекать из программной памяти данные и выводить их на ЖКИ LCD 1602 (дисплей). Тем самым создавая удобный интерфейс конечного пользователя-потребителя вместе с 16-битной клавиатурой. Которая, кстати может быть запараллелена с 8-битным портом данных ЖКИ. (входящие и выходящие данные).

ORG 0x2000
В ассемблере MPASM, PIC_ASM — есть директива da «ABCD», 0; —  для ввода строки символов в ячейки памяти начиная со строки 0x2000 Liner Memory, за содержанием которой Вы можете наблюдать в меню IDE->Windos->Programm Memory, а также непосредственно — за регистрами косвенной адресации FSRn (0-1, для PIC16f) через меню WATCH.

Данные прописались в GPR Memory со (строки) 0х0020 – ячейки. Это  Temp_N(0x0020), FLAG_edge (0x0021),
H_byte (0x022)/ Суппер!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  Дважды копировался WREG, пришлось закомментировать инструкцию записи movwf INDF1, — Т.К. ПРИ ЭТОМ ЯЧЕЙКА FSR1++ СДВИГАЛАСЬ ЕЩЕ НА ОДИН ШАГ.
Данные FSR0 – сдвинул вправо на одну ячейку при записи изначально. Потому что к адресации получалось – что ячейка сдвигается для получения данных и первое число терялось. Можете проверить и устранить небольшие шероховатости при отладке — пошагово. А я потом, расскажу — какие именно. Так интереснее.
В этой программе мы побайтово, в режиме косвенной адресации заносим ASCII символы «О», «К», «R» в память Program Memory начиная с адреса 20А1. При извлечении этих данных обращаемся к ячейке 20А0, т.к. инструкция MOVIW FSRO++ (ПОСТИНКРЕМЕНТ), при первом цикле — инкрементирует адрес к 20А1. Происходит как бы преинкремент. Считываем данные в 20А1, потом постинкремент данных и еще два раза. В случае da «OKR», 0; будет цикл адресации к метке с прекращением по условию Z=0; IORLW  0x00;
— Успехов друзья в программировании!!!

Код программы приведен ниже:

list           p = 16f18855

#include p16f18855.inc

; CONFIG1
__CONFIG _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT1 & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_ON

; CONFIG2
__CONFIG _CONFIG2, _MCLRE_OFF & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_OFF & _BORV_HI & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON

; CONFIG3
__CONFIG _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_SC

; CONFIG4
__CONFIG _CONFIG4, _WRT_OFF & _SCANE_not_available & _LVP_ON

; CONFIG5
__CONFIG _CONFIG5, _CP_OFF & _CPD_OFF

UDATA  0x20;Specify RAM

Temp_N      res 1; Counter loop

H_byte  res     1      ; equ     10

L_byte  res     1       ; equ     11

CountB    res           1              ;

org 0x000

RES_VECT  CODE    0x0000            ; processor reset vector

GOTO    START                   ; go to beginning of program

org 0x0004

; TODO ADD INTERRUPTS HERE IF USED

BTFSC     PIR6,CCP1IF; Here CCP1? — bit 0; заполнил прерывания для компаратора

;GOTO    CCP_ISR; PROGRAMM isr  for CCP; в этом примере — не задействован

retfie;

START

MAIN_PROG CODE                      ; let linker place main program

movlw 0xA1          ;

movwf FSR0L         ; open indeirect bank 0xA0,0xA1,0xA2

movlw A’O’;0x0F

movwf    INDF0    ; Data inR0 — cell N0

;CLRF INDF0

INCF FSR0

movlw A’K’            ;0x10

movwf INDF0       ;FSR0 Data in R1 — cell N1

;CLRF INDF0

INCF FSR0

movlw A’R’            ;0x11

movwf    INDF0    ; Data in R2- cell N2

movlw     .3                            ;Data of counter

movwf    CountB   ;

movlw     0x00        ;shifting 0x20A0 — before 0xA0first address memory bank1

movwf    FSR0H   ;

movlw     0xA0       ;

movwf    FSR0L    ;

movlw     0x020      ;first address memory bank2 H_byte

movwf    FSR1L    ;

movlw     0x00        ;

movwf    FSR1H   ;

B3           moviw     FSR0++  ;10FSR0; 10;postincrement FSR0 cells bank1

movf       INDF0,0 ;

movwi     FSR1++; 10           ;p-i FSR1 cells bank2

;movwf   INDF1;

decfsz      CountB   ;

BRA       B3           ; CHECK                the line mamory

 

GOTO $                          ; loop forever

 

END