Організація і використання пам’яті даних, страница 2

Для цього у регістр W заносимо знайдене максимальне значення з усіх комірок пам’яті EEPROM яке знаходиться у обраної комірки пам’яті з намером 0Ch,(банк 0) та з нього у регістр EEDATA у регістр EEADR заносимо адресу останньої комірки пам’яті EEPROM 3Fh у яку будемо записувати знайдене максимальне значення та вибравши банк 1, виконуючи обов’язкову послідовність команд записуємо це мінімальне значення у останню комірку пам’яті EEPROM.

5. Визначити час запису одного байта в EEPROM можна буде під час покрокового виконання програми шляхом вичитання кільості нарахованих тактів до початку циклу запису одного байта в EEPROM та після його закінчення.

6. Визначити можливість читання даних з EEPROM відразу після початку циклу запису можна буде (також під час покрокового виконання програми) шляхом виконання команд читання даних з EEPROM під час виконання циклу запису даних у EEPROM.

Розобивши алгоритм виконання завдання, напишемо текст програми, яка буде працювати за цим алгоритмом:

Текст програми:

list p=16f84

       #include p16f84.inc   ;подключение библиотеки

kol EQU .12                  

name EQU 0x10                 ;ячейка памяти с которой начинаются фамилия и имя

adr EQU 0x0c                  ;ячейка памяти в которой будет храниться минимальное значение

                              ;из всех ячеек памяти EEPROM

       org 0                  ;адрес сегмента размещения начала программы

main

       call init

       movlw .12

       movwf kol

       call proc1

       call proc2

       goto main             ;зацикливание основной программы

init   movlw 'B'             ;процедура которая выполняет методом прямой адрессации

       movwf name            ;запись в память данных фамилию и имя

       movlw 'o'

       movwf name+1

       movlw 'g'

       movwf name+2  

       movlw 'a'

       movwf name+3         

       movlw 'c'

       movwf name+4         

       movlw 'h'

       movwf name+5         

       movlw 'e'

       movwf name+6         

       movlw 'v'

       movwf name+7         

       movlw ' '

       movwf name+8         

       movlw 'A'

       movwf name+9         

       movlw ' '

       movwf name+0x0a              

       movlw 'S'            

        movwf name+0x0b

       return

proc1  movlw 0x10             ;процедура которая виполняет методом косвенной адрессации      

       movwf FSR              ;переписсывание анкетних даных из памяти данных в 

m1     bcf STATUS,RP0         ;энэргонезависимую память EEPROM

       movf INDF,w

       movwf EEDATA

       movfw FSR

       movwf EEADR

       bsf STATUS,RP0

       bsf EECON1,WREN

       bcf EECON1,EEIF

       bcf INTCON,GIE

       movlw 0x55

       movwf EECON2

       movlw 0xaa

       movwf EECON2

       bsf EECON1,WR

m2     btfss EECON1,EEIF

       goto m2

       bcf STATUS,RP0

       incf FSR

       decfsz kol,1

       goto m1

       return

proc2  movlw 0x3e           ;процедура которая выполняет поиск минимального значения в памяти

       movwf kol            ;EEPROM и записывает его в последнюю ячейку памяти.

       movlw 0x1

       movwf FSR

       movlw 0FFh

       movwf adr

m3     bcf STATUS,RP0

       movfw FSR

       movwf EEADR

       bsf STATUS,RP0

       bsf EECON1,RD

       bcf STATUS,RP0

       movf EEDATA,w

       bcf STATUS,0

        subwf adr,0

        btfss STATUS,0

        goto k

        movf EEDATA,w

        movwf adr

k      incf FSR

       decfsz kol,1

       goto m3

       bcf STATUS,RP0

       movf adr,w

       movwf EEDATA

       movfw FSR

       movwf EEADR