44949

Работа с EEPROM памятью данных

Реферат

Информатика, кибернетика и программирование

Поставим перед собой достаточно простую и конкретную задачу (что-то типа задания на первоначальную разработку). Допустим, что в ходе исполнения программы нужно изменить (модифицировать) содержимое пяти ячеек EEPROM памяти, начиная с адреса 7. Для простоты модификации (и для обеспечения наглядности наблюдения за происходящими в EEPROM памяти изменениями) к первому числу (по адресу 7) необходимо добавить 1...

Русский

2013-11-14

61.93 KB

11 чел.

Работа с EEPROM памятью данных

EEPROM память данных так же, как и память программ, является энергонезависимой памятью, но к памяти программ она отношения не имеет, а выполняет свои специфические функции. Ее функции, в конечном итоге, сводятся к сохранению либо констант, либо числовых результатов операций после выключения питания микроконтроллера, с целью их дальнейшего использования после следующего включения питания.

Разберемся со структурой и основными принципами организации работы с EEPROM памятью данных. Объем EEPROM памяти данных микроконтроллеров не велик, например, для PIC16F84A, это – 64 ячейки, а в других типах микроконтроллеров может быть и больше. В каждую из этих ячеек может быть записан один байт (число от .00 до .255). После записи этот байт (байты) можно считать и результат этого считывания использовать в программе. Каждая из этих 64-х ячеек, в диапазоне адресов от .00 до .63 (00h .. 3Fh), имеет свой адрес, который обязательно нужно указывать как при чтении из EEPROM памяти данных, так и при записи в нее. По ходу составления программы программист определяет содержимое какой именно ячейки (ячеек) нужно считать и в какую именно ячейку (ячейки) нужно произвести запись, c “привязкой” этих действий к логике программы.

Поставим перед собой достаточно простую и конкретную задачу (что-то типа задания на первоначальную разработку). Допустим, что в ходе исполнения программы нужно изменить (модифицировать) содержимое пяти ячеек EEPROM памяти, начиная с адреса 7. Для простоты модификации (и для обеспечения наглядности наблюдения за происходящими в EEPROM памяти изменениями) к первому числу (по адресу 7) необходимо добавить 1, второму – 2, третьему – 3 и т.д. На примере реализации поставленной задачи рассмотрим общие положения организации работы с EEPROM памятью данных.

; EEPROM-1

;==========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Reg  equ  0Ch

Count  equ  0Dh

Add  equ  0Eh

Step  equ  0Fh

Num  equ  1Ch

Del_T equ  .24

;==========================

 org  0

 goto  Start

;==========================

;******************************

Start movlw .6

 movwf Add

 clrf  Step

 clrf  Num

;---------------------------------------------

Cont  incf  Add,F

;==========================

Rd_EE bcf  Status,RP0

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Reg

;---------------------------------------------

Mod  incf  Step,F

 movf  Reg,W

 addwf  Step,W

;==========================

Wr_EE bcf  Intcon,GIE

 movfw Add

 movwf EEAdr

;---------------------------------------------

 movfw Reg

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

;==========================

Delay  movlw Del_T

  movwf Count

Del  decfsz Count,F

 goto  Del

;==========================

 incf  Num,F

 movfw Num

 sublw  .5

 btfss  Status,Z

 goto  Cont

 goto  Start

;******************************

 end

Необходимо отметить, что процедуры чтения/записи (особенно записи) довольно-таки “громоздки”, т.е. для их выполнения используется достаточно большое количество команд.

Между метками Start и Cont выполняются начальные установки, соответствующие первоначальным значениям адреса (Add) ячейки EEPROM памяти и шага модификации (Step), с которых начинается их наращивание. После этого командой incf  Add,F осуществляется наращивание адреса ячейки EEPROM памяти (т.е. выбирается первая, подлежащая к модификации, ячейка). В дальнейшем рабочая точка программы “переходит” на начало исполнения группы команд, которая работает с EEPROM памятью данных. В данном случае, переход на это “начало” происходит “естественным образом” (на “линейном участке программы”. Без задействования call/goto). Если используются команды переходов call/goto, то переход на это “начало” может происходить из любого “места” программы. В этом случае, группе команд, обеспечивающей работу с EEPROM памятью данных, нужно либо “присвоить статус” подпрограммы, либо выставить метку на первой команде этой группы. В рассматриваемой программе имеются множество меток, которые выставлены только в учебных целях, а именно для того, чтобы легче было ориентироваться (найти) в различных процедурах, выполняемых при решении конкретных задач.

Разбираемся с тем, что же должна из себя представлять эта группа команд? В соответствии со сформулированной выше задачей, это должна быть группа команд, обеспечивающая считывание числа из 7-й ячейки EEPROM памяти данных в регистр оперативной памяти. Следовательно, под это дело нужно задействовать один из регистров общего назначения. Назначенное ему название Reg “прописана” в “заголовке” программы по адресу 0Ch.

Теперь мы конкретно знаем, откуда считывать и куда “закладывать на временное хранение” результат этого считывания. Остается только выяснить, как конкретно это сделать?

Группа команд чтения данных из EEPROM памяти данных (и записи тоже) является стандартным “набором” команд, рекомендованных к применению разработчиками. Нужно только “врезать” эту стандартную группу команд в нужное “место” текста программы. Внутри этой группы команд, нужно:

  1. выставить адрес ячейки, из которой производится чтение (в нашем случае, 07h);
  2. и указать название регистра, в который запишется считываемое число (в нашем случае, Reg).

То же самое относится и к процессу записи данных в EEPROM память данных. Разберемся с этими стандартными наборами.

Чтение данных из EEPROM памяти данных (метка Rd_EE) начинается с перехода в 0-й банк  (bcf Status,RP0). Если в ходе составления программы выяснится, что на момент начала процедуры чтения происходит работа в 0-м банке, то эту команду из текста программы можно (и нужно) удалить (какой смысл выбирать 0-й банк, если работа и так происходит в нем?). Следующая команда – стандартная команда записи константы, о котором многократно говорилось ранее. В данном случае, константой является адрес 7-й ячейки (07h), помещенная до этого в аккумулятор. Эта константа записывается в регистр специального назначения EEAdr, который используется только при работе с EEPROM памятью данных. Число, которое в него записывается, определяет адрес той ячейки, из которой будет производиться считывание.

Итак, ячейка выбрана и далее нужно инициализировать чтение (разрешить считывание, из нее, числа). Этим делом “рулит” нулевой бит регистра специального назначения EECon1 (см. таблицу 7.1), который находится в 1-м банке и используется только при работе с EEPROM памятью данных. Следовательно, нужно перейти в 1-й банк, установить в 1 первый бит (бит №0) регистра EECon1 и опять вернуться в 0-й банк, так как следующая команда (movf EEData,W) обращается к регистру, который “лежит” в 0-м банке.

Таблица 7.1 Регистр EECON1

Биты

Название

Описание

4

EEIF

Флаг прерывания по окончанию записи в EEPROM:

1 – запись данных в EEPROM завершена

0 – запись данных в EEPROM не завершена

3

WRERR

Флаг ошибки записи в EEPROM:

1 – запись прервана

0 – запись завершена

2

WREN

Разрешение записи в EEPROM:

1 – запись разрешена

0 – запись запрещена

1

WR

Инициализация записи в EEPROM:

1 – инициализация записи

0 – запись завершена

0

RD

Инициализация чтения из EEPROM:

1 – инициализация чтения

0 – чтение завершено

После команды перехода в 0-й банк, располагается группа из двух команд. После исполнения первой команды этой группы (movf EEData,W), хранящееся в ячейке (с адресом 07h) число копируется в регистр W (аккумулятор), а после исполнения второй команды этой группы (movwf Reg) оно копируется из регистра W в регистр оперативной памяти Reg, с содержимым которого, в дальнейшем, можно произвести ту или иную операцию. Регистр специального назначения EEData (регистр данных) задействуется только при работе с EEPROM памятью данных.

Необходимо иметь в виду, что при первом чтении любой ячейки EEPROM памяти, там окажется число FFh, так как то во всех ячейках по умолчанию установлено это число (см. рисунок 7.1). В этом можно убедиться в соответствующем окне симулятора (Tools/EEPROM Memory Editor).

Рисунок 7.1

Теперь, в соответствии с алгоритмом работы программы, нужно произвести операцию приращения, т.е. модификацию скопированного в регистр Reg числа. Эта процедура выполняется в блоке с меткой Mod, путем инкрементирования содержимого регистра Step и добавления его к содержимому регистра Reg.

Разработчики микроконтроллеров PIC рекомендуют начинать процедуру записи (блок Wr_EE) с команды глобального запрета прерываний bcf Intcon,GIE. Глобальный запрет прерываний также можно осуществить при помощи байт-ориентированной команды clrf Intcon. Если на момент начала исполнения одной из этих команд, в 7-м бите регистра Intcon ранее уже был записан 0, то (по аналогии с командой bcf Status,RP0) эту команду можно исключить из текста “программы”. Формальная необходимость запрета прерываний обусловлена тем, что если прерывания по окончанию записи в EEPROM (см. 6-й бит регистра Intcon) будут разрешены, то после окончания записи, рабочая точка программы “улетит” в подпрограмму прерывания, которой, в данном случае, нет (“глюк”). Для недопущения этого, нужно просто глобально запретить все прерывания командой bcf Intcon,GIE. Эта команда, в отличие от команды clrf Intcon, не “выключает” прерывания от других источников прерываний, а только (в интервале времени от исполнения команды bcf Intcon,GIE и до исполнения команды bsf Intcon,GIE) запрещает их.

После команды глобального запрета прерываний, следуют 2 команды адресного выбора ячейки. Они в точности такие же, как и команды адресного выбора ячейки при чтении (задействована одна ячейка) и останавливаться на них не будем.

После выполнения следующей пары команд, модифицированное до этого число, через регистр W, копируется из регистра оперативной памяти Reg в регистр специального назначения EEData и на этом процесс предварительной подготовки к записи заканчивается.

Теперь нужно сначала разрешить, а затем и произвести запись. Запись в выбранную ячейку EEPROM памяти данных разрешается установкой в 1 второго бита (бит №1) регистра EECon1. Он “лежит” в 1-м банке. Следовательно, перед тем как это сделать, нужно выбрать 1-й банк (bsf Status,RP0). После разрешения записи (bsf EECon1,2), можно произвести эту запись. Для этого используется обязательная последовательность из пяти команд (см. текст программы). При этом, производятся операции с так называемым “физически не реализованным” регистром EECon2, технические детали которых разработчики не объясняют. Что касается этой “загадочной” процедуры записи чисел 055h и 0AAh в несуществующий регистр EECon2, то думаю, что они предусмотрены для предотвращения случайной записи в EEPROM память данных.

После исполнения обязательной последовательности команд, флаг прерывания по окончанию записи в EEPROM устанавливается в 1 (флаг поднят). Это и есть критерий окончания записи, т.е. информация о том, что запись завершена и можно выйти из процедуры записи. Но для того чтобы можно было осуществить следующую запись, этот флаг нужно программно (‘принудительно”) сбросить (bcf EECon1,4). Это единственный вариант его сброса. Аппаратно (автоматически) он не сбрасывается. Теперь можно перейти из 1-го банка в 0-й (bcf Status,RP0).

В тексте примера предполагается, что следующие, после команды bcf Status,RP0, операции будут производиться с регистрами 0-го банка (вероятность этого – большая), но если после завершения процедуры записи, следующие операции будут производиться с регистрами 1-го банка (вероятность этого – маленькая), то команду bcf Status,RP0 нужно “вырезать” из концовки процедуры записи и перенести ниже (по тексту программы), “врезав” ее в то “место”, в котором заканчиваются операции с регистрами 1-го банка и начинаются операции с регистрами 0-го банка. В нашей программе после команды bcf Status,RP0 введена подпрограмма задержки Delay. Причина введения этой задержки объясняется тем, что для завершения процесса записи в EEPROM память требуется определенное время. Длительность этого времени, определяется константой Del_T, значение которой подобрано путем экспериментальной проверки работы программы на симуляторе. Можете убедиться в этом, уменьшив значение этой константы и запустив программу в работу.

В последнем блоке программы осуществляется проверка числа осуществленных модификаций. В случае незавершенности числа необходимых модификаций (в нашем случае 5) рабочая точка переходит на метку Cont и продолжается модифицирование содержимого следующих ячеек EEPROM памяти.

В рассмотренном случае выполняется процедура типа чтение – модификация – запись, в “границах” только одного полного цикла программы. Не трудно догадаться, что произойдет в ходе исполнения последующих, полных циклов программы: с каждым циклом, значение чисел, записываемых в ячейки EEPROM памяти, будут модифицироваться, исходя уже из новых (измененных в предыдущем цикле) значений. Это можно пронаблюдать с помощью симулятора.

Если остановить работу программы (симулятора) и снова запустить ее, то новые модификации будут осуществляться исходя из сохраненных в  EEPROM памяти при остановке.

А теперь объединим возможности предыдущей (Dynamic Display) и рассмотренной программ.

При новом запуске программы Dynamic Display генерирование (соответственно и отображение) начиналось всегда с самых младших значений, т.е. со значения 1. А теперь изменим эту программу таким образом, чтобы при новом запуске программы счет продолжался с достигнутого перед остановкой значения и в том же темпе (вспомните, что темп счета в процессе работы программы менялся). Измененная программа (EEPROM-2) приведена ниже.

; EEPROM-2

;-----------------------------------------------

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;*******************************

DataL  equ  0Ch

DataH equ  0Dh

D_L  equ  0Eh

D_H  equ  0Fh

Step  equ  1Bh

Led0  equ  1Ch

Led1  equ  1Dh

Led2  equ  1Eh

Led3  equ  1Fh

Index  equ  10h

Count  equ  11h

Temp  equ  12h

Mem  equ  13h

TempL equ  15h

TempH equ  16h

Trig  equ  17h

Add  equ  18h

;-----------------------------------------------

Del_T equ  .30

;*******************************

  org  0

 goto  START

;*******************************

Start   bsf  Status,RP0

 movlw .16

 movwf TrisA

 movlw .00

 movwf TrisB

 bcf  Status,RP0

;-----------------------------------------------

  clrf  DataL

 clrf  DataH

 clrf  Step

 clrf  Trig

 clrf  Led0

 clrf  Led1

 clrf  Led2

 clrf  Led3

;===========================

  call  RD_0

 movfw Trig

 btfsc  Status,Z

 goto  Data

 call  RD_EE

;===========================

Data  clrwdt

  movf  DataH,W

 addlw  ECh

 btfss  Status,C

 goto  Incr

;-----------------------------------------------

Decr  decf  Step,F

 movf  Led3,W

 sublw  .9

 btfss  Status,Z

 goto  Cont

 movf  Led2,W

 sublw  .9

 btfss  Status,Z

 goto  Cont

;-----------------------------------------------

S_7  movlw .7

 movwf Step

;-----------------------------------------------

 movf  Led1,W

 addlw  F8h

 btfss  Status,C

 goto  Cont

  goto  S_1

;-----------------------------------------------

Incr  incf  Step,F

 movf  DataH,F

 btfss  Status,Z

 goto  Cont

 movf  DataL,W

 addlw  F5h

 btfsc  Status,C

 goto  Cont

;-----------------------------------------------

S_1  movlw 1

 movwf Step

;===========================

Cont  clrwdt

 movfw Step

 addwf  DataL,F

 btfsc  Status,C

 incf  DataH,F

 movf  DataL,W

 movwf D_L

 movf  DataH,W

 movwf D_H

 call  BinDec

 incfsz  Temp,F

 goto  Data

 call  Clr

 call  Fin

 goto  Start

;*******************************

;*******************************

BinDec bcf  Status,C

 movlw .16

 movwf Count

 clrf  Led0

 clrf  Led1

 clrf  Led2

 clrf  Led3

;===========================

Loop8 clrwdt

 rlf   D_L,F

 rlf   D_H,F

 rlf   Led0,F

 rlf   Led1,F

 decfsz Count,F

 goto  adjDEC

;-----------------------------------------------

 swapf  Led1,W

 andlw  0Fh

 movwf Led3

;-----------------------------------------------

  movfw Led1

 andlw  0Fh

 movwf Led2

;-----------------------------------------------

 swapf  Led0,W

 andlw  0Fh

 movwf Led1

;-----------------------------------------------

 movfw Led0

 andlw  0Fh

 movwf Led0

 goto  Disp

;===========================

adjDEC movlw Led0

 movwf FSR

 call  adjBCD

;-----------------------------------------------

 movlw LED1

 movwf FSR

 call  adjBCD

;-----------------------------------------------

 goto  Loop8

;===========================

adjBCD movlw 3

 addwf  0,W

 movwf Mem

 btfsc  Mem,3

 movwf 0

;-----------------------------------------------

 movlw 30h

 addwf  0,W

 movwf Mem

 btfsc  Mem,7

 movwf 0

;-----------------------------------------------

 retlw  0

;*******************************

Disp  clrwdt

 movlw .3

 movwf Index

 movf  Led3,F

 btfss  Status,Z

 goto  IndexS

;-----------------------------------------------

 decf  Index,F

 movf  Led2,F

 btfss  Status,Z

 goto  IndexS

;-----------------------------------------------

 decf  Index,F

 movf  Led1,F

 btfss  Status,Z

 goto  IndexS

;-----------------------------------------------

 decf  Index,F

;===========================

IndexS clrf  PortA

 movf  Index,W

 addwf  PCL,F

 goto  Disp0

 goto  Disp1

 goto  Disp2

;===========================

Disp3  clrf  PortA

 movf  Led3,W

 call  Table

 movwf PortB

 movlw .8

 movwf PortA

;-----------------------------------------------

Disp2  clrf  PortA

 movf  Led2,W

 call  Table

 movwf PortB

 movlw .4

 movwf PortA

;-----------------------------------------------

Disp1  clrf  PortA

 movf  Led1,W

 call  Table

 movwf PortB

 movlw .2

 movwf PortA

;-----------------------------------------------

Disp0  clrf  PortA

 movf  Led0,W

 call  Table

 movwf PortB

 movlw .1

 movwf PortA

;===========================

 call  WR_EE

;*******************************

Aud  movf  Led3,W

 sublw  .9

 btfss  Status,Z

 return

 movf  Led2,W

 sublw  .9

 btfss  Status,Z

 return

 movf  Led1,W

 sublw  .9

 btfss  Status,Z

 return

 movf  Led0,W

 sublw  .9

 btfss  Status,Z

 return

 movlw FFh

 movwf Temp

 clrf  Trig

 return

;*******************************

Clr  movlw .3

  movwf Index

 movlw .10

 movwf Led0

 movwf Led1

 movwf Led2

 movwf Led3

 call  IndexS

;-----------------------------------------------

  movlw .255

 movwf Temp

Del_0  decfsz Temp,F

 goto  Del_0

;-----------------------------------------------

  movlw .3

 movwf Index

 movlw .11

 movwf Led0

 movwf Led1

 movwf Led2

 movwf Led3

 call  IndexS

;-----------------------------------------------

  movlw .255

 movwf Temp

Del_1  decfsz Temp,F

 goto  Del_1

 return

;*******************************

Table  addwf  PCL,F

;-----------------------------------------------

 retlw  b'00111111'

 retlw  b'00000110'

 retlw  b'01011011'

 retlw  b'01001111'

 retlw  b'01100110'

 retlw  b'01101101'

 retlw  b'01111101'

 retlw  b'00000111'

 retlw  b'01111111'

 retlw  b'01101111'

;-----------------------------------------------

 retlw  b'10001000'

 retlw  b'00000000'

;*******************************

RD_0  bcf  Status,RP0

 clrw

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Trig

 incf  Trig,F

 btfss  Status,Z

 return

;===========================

  clrf  Add

 clrf  Trig

 bcf  Intcon,GIE

Cont_0 movfw Add

 movwf EEAdr

;-----------------------------------------------

 clrw

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

 incf  Add,F

 movfw Add

 sublw  .8

 btfss  Status,Z

 goto  Cont_0

 return

;*******************************

Fin  clrf  Add

 bcf  Intcon,GIE

Cont_F movfw Add

 movwf EEAdr

;-----------------------------------------------

  movlw FFh

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

 incf  Add,F

 movfw Add

 sublw  .8

 btfss  Status,Z

 goto  Cont_F

 return

;*******************************

RD_EE incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Step

;-----------------------------------------------

 incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf DataH

;-----------------------------------------------

 incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf DataL

;-----------------------------------------------

 incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Led3

;-----------------------------------------------

 incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Led2

;-----------------------------------------------

 incf  Add,F

 movfw Add

 movwf  EEAdr  

 bsf  Status,RP0

 bsf  EECon1,0

 bcf  Status,RP0

 movf  EEData,W

 movwf Led1

;-----------------------------------------------

 return

;*******************************

WR_EE clrf  Add

 bcf Intcon,GIE

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movlw 1

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw Step

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw DataH

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw DataL

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw Led3

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw Led2

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw Led1

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

;===========================

 incf  Add,F

 movfw Add

 movwf EEAdr

;-----------------------------------------------

 movfw Led0

 movwf EEData

 bsf  Status,RP0

 bsf  EECon1,2

 movlw 055h

 movwf EECon2

 movlw 0AAh

 movwf EECon2

 bsf  EECon1,1

 bcf  EECon1,4

 bcf  Status,RP0

 call  Delay

 movlw .1

 movwf Trig

;===========================

 return

;*******************************

Delay  movlw Del_T

 movwf Count

Del  decfsz Count,F

 goto  Del

;-----------------------------------------------

  return

;*******************************

 end

Сравнивая эту программу с базовой программой (Dynamic Display), проанализируйте произведенные в ней изменения. Для проверки работы измененной программы, т.е. результатов использования в этой программе EEPROM памяти данных, остановите запущенную до этого программу, заметьте последнее индицированное число. После этого снова запустите программу и вы увидите, что при этом программа продолжает индицирование новых чисел, как будто остановки программы и не было. Повторите предложенный сценарий проверки работы программы несколько раз.


 

А также другие работы, которые могут Вас заинтересовать

5005. Выбор системы автоматического управления сверлильно-расточно-фрезерного станка модели 600V 100 KB
  Выбрать систему автоматического управления сверлильно-расточно-фрезерного станка модели 600V, проспект Стерлитамакского станкостроительного завода прилагается. Список сокращений САУ – система автоматического управления УЧПУ...
5006. Проект геодезического обоснования стереотопографической съемки масштаба 1:5000 302 KB
  Топографические карты, созданные в результате обработки данных топографической съемки, используют в различных областях человеческой деятельности. Без карт невозможна работа по прокладке нефтепроводов и газопроводов, строительству электрост...
5007. Экономическая система: понятие, структура, генезис 180 KB
  Экономическая система есть совокупность взаимосвязанных и определенным образом упорядоченных элементов экономики, образующих экономическую структуру общества. Вне системного характера экономики не могли бы воспроизводиться (постоянно возоб...
5008. Анализ стилевых особенностей и имиджа менеджера 309 KB
  Общество представляет собой сложную, многоуровневую, целостную и динамически развивающуюся систему. Неотъемлемым атрибутом любой системы – является управление, которое обеспечивает ее сохранение и развитие, упорядочение структуры, взаи...
5009. Возможности использования в российских условиях зарубежного опыта управления предприятием, организацией, фирмой 148.5 KB
  Возможности использования в российских условиях зарубежного опыта управления предприятием, организацией, фирмой. Теория и практика менеджмента получили широкое применение в развитых странах. В США доля менеджеров различных уровней в общей...
5010. Элементы квантовой теории. Основы атомной и ядерной физики 516.5 KB
  Введение В сборнике представлены тестовые задания закрытого типа и на соответствие по разделам Элементы квантовой теории, Основы атомной и ядерной физики, предназначенные для аудиторной и внеаудиторной самостоятельной работы студентов. Тестовые за...
5011. Загадка сверхзвезд. Квазары и радиогалактики. Незвездная материя 185.5 KB
  Загадка сверхзвезд До недавнего времени в звездной астрономии считалось, что масса звезд не может превосходить массу Солнца более чем в 100 раз. В противном случае звезда окажется неустойчивой и распадется. Однако, Хойл и Фаулер предположили, что вр...
5012. Матеpиальное стимулиpование как фактор повышения производительности труда 139 KB
  Управление производительностью - составная часть управления промышленным производством. Управление производительностью, так же, как и управление вообще, на научную основу было впервые поставлено Ф.У. Тейлором, который...
5013. Рыночная инфраструктура и проблемы ее формирования 147 KB
  Целью данной курсовой работы является дальнейшее изучение проблем современного рынка. Характеристику рынка как совокупности или арены актов купли-продажи можно раскрыть через его структуры, систему и инфраструктуру. Становление и...