Код: Выделить всё
#include p16f873a.inc
__CONFIG _HS_OSC & _WDT_OFF;
ORG H'005' ;вектор сброса
CNT EQU H'A0' ;определение регистра счётчика
;с адресом А0(банк 1)
;запись возрастающих чисел в ОЗУ
BCF STATUS,RP1 ;выбираем банк регистров 1
BSF STATUS,RP0 ;
MOVLW H'20' ;загрузка в рабочий регистр адреса
;первого POH в банке 0
MOVWF FSR ;записываем начальный адрес
;в регистр косв.адресации
CLRF CNT ;обнуляем регистр счетчика
M10: MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый POH
INCF FSR,F ;увеличение адреса POH
;в регистре косвенной адресации
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый POH
INCF CNT,F ;увеличение счетчика на 1
INCF CNT,F ;увеличение счетчика на 1
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый POH
ANDLW h'0F' ; побитное И с 0A
XORLW h'0A' ; сравнение с 0A
BTFSS STATUS,Z ; если не совпадают, скачок через команду
GOTO M2 ; вызов подпрограммы М2
MOVF CNT,W ; загружаем счетчик в W
ADDLW H'6'
MOVWF CNT
M2:
MOVF CNT,W
MOVWF INDF
INCF FSR,F ;увеличение адреса POH на 1
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый POH
DECF CNT,F ;уменьшение счетчика на 1
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVWF INDF ;сохраняем очередной отсчет в косвенно адресуемый POH
ANDLW h'0F' ; побитное И с 0A
XORLW h'0F' ; сравнение с 0A
BTFSS STATUS,Z ; если не совпадают, скачок через команду
GOTO M3 ; вызов подпрограммы М2
MOVF CNT,W ; загружаем счетчик в W
ADDLW H'FA'
M3:
MOVF CNT,W ;загружаем значение счетчика в рабочий регистр
MOVF FSR,W
XORLW H'80' ;сравниваем его с последним значение +1
BTFSS STATUS,Z ;если не совпадают, то скачек через одну команду
GOTO M10 ;если не совпадают, то возврат
;к записи следующей ячейки
END
