Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по ОМТ.doc
Скачиваний:
17
Добавлен:
19.11.2019
Размер:
3.88 Mб
Скачать
      1. Написание текста программы на языке Ассемблер

Исходный текст программы приведен далее:

; предварительные настройки

#include p16f873a.inc

CONFIG _HS_OSC ;

ORG H'000' ;вектор сброса

CNT EQU H'A0' ;определение регистра счетчика

;с адресом А0 (банк 1)

; запись возрастающих чисел в ОЗУ

BCF STATUS,RP1 ; ┬ выбираем банк регистров 1

BSF STATUS,RP0 ; ┘

MOVLW H'20' ;загрузка в рабочий регистр адреса

;первого РОН в банке 0

MOVWF FSR ;записываем начальный адрес

;в регистр косв. адресации

CLRF CNT ;обнуляем регистр счетчик

M10: MOVF CNT,W ;загружаем значение счетчика в рабочий регистр

MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый РОН

INCF FSR,F ;увеличение адреса РОН

;в регистре косвенной адресации

INCF CNT,F ;увеличение счетчика на 1

MOVF CNT,W ;загружаем новое значение счетчика

;в рабочий регистр

XORLW H'60' ;сравниваем его с последним значением +1

BTFSS STATUS,Z ;если совпадают то скачек через одну команду

GOTO M10 ;если не совпадают, то возврат

;к записи следующей ячейки

;копирование из ОЗУ в EEPROM

MOVLW H'20' ;загрузка в рабочий регистр

;адреса первого РОН в банке 0

MOVWF FSR ;записываем начальный адрес

;в регистр косв. адресации

CLRF CNT ;обнуляем регистр счетчик адреса EEPROM

M20: BSF STATUS,RP1 ; ┬ выбираем банк регистров 3

BSF STATUS,RP0 ; ┘

BTFSC EECON1,WR ; ┬ проверка окончания предыдущей

; │ записи в EEPROM

GOTO M20 ; ┘

BCF STATUS,RP1 ; ┬ выбираем банк регистров 1

BSF STATUS,RP0 ; ┘

MOVF CNT,W ;загружаем значение счетчика в рабочий регистр

BSF STATUS,RP1 ; ┬ выбираем банк регистров 2

BCF STATUS,RP0 ; ┘

MOVWF EEADR ;сохраняем адрес очередной ячейки в регистре адреса

MOVF INDF,W ;считываем данные из очередного РОН

;в рабочий регистр

MOVWF EEDATA ;и сохраняем их в регистре данных EEPROM

BSF STATUS,RP1 ; ┬ выбираем банк регистров 3

BSF STATUS,RP0 ; ┘

BCF EECON1,EEPGD ;выбираем EEPROM

BSF EECON1,WREN ;разрешаем запись

BCF INTCON,GIE ;запрещаем прерывания

MOVLW H'55' ; ┐

MOVWF EECON2 ; │

MOVLW H'AA' ; ├ обязательная последовательность из пяти команд

MOVWF EECON2 ; │

BSF EECON1,WR ; ┘

BCF EECON1,WREN ;запрещаем запись

BCF STATUS,RP1 ; ┬ выбираем банк регистров 1

BSF STATUS,RP0 ; ┘

INCF FSR,F ;увеличение адреса РОН

;в регистре косвенной адресации

INCF CNT,F ;увеличение счетчика на 1

MOVF CNT,W ;загружаем новое значение счетчика

;в рабочий регистр

XORLW H'60' ;сравниваем его с последним значением +1

BTFSS STATUS,Z ;если совпадают то скачек через одну команду

GOTO M20 ;если нет, то переход к копированию

;очередной ячейки

M30: GOTO M30 ;зацикливаемся здесь

END ;конец программы