2.4.2.1.Изучить тексты готовых программ Lb1_1.doc, Lb1_2.doc, Lb1_3.doc и написать к ним комментарии.
2.4.2.2. Модифицировать программу Lb1_1.doc:
- Добавить перед циклом записи данных в порт В фрагмент опроса порта А с проверкой установки одного из его разрядов в 1 (по нажатию кнопки). Повторять опрос, пока 1 не установлена. При установке 1 перенастроить порт А на запись и переслать в него число 1Ch. Полученной программе присвоить имя Lb1_1m.doc.
2.4.2.2. Модифицировать программу Lb1_2.doc:
- Изменить делитель таймера на 1:128. Реализовать задержку, равную 20 мс, вместо имеющейся. Тактовая частота процессора 4 МГц, (таймер в режиме внутреннего тактирования). Присвоить новой программе имя Lb1_2m.doc.
2.4.2.3. Модифицировать программу Lb1_3.doc:
- Вместо пересылки данных из массива в порт В запрограммировать пересылку данных из порта В в массив IZM(15) в память данных, начиная с адреса, соответствующего началу ее свободной области.
Присвоить новой программе имя Lb1_3m.doc.
;Программа Lb1_1.asm. Запись в порт В по таймеру TMR0.
# INCLUDE "P16F84.INC"
|
|
LIST P=16F84
__CONFIG 3FFBh
ORG 20H
.UATA
COUNT1 RES 1
.CODE
ORG 05H
MOVLW 0FFH
MOVWF COUNT1; СЧЕТЧИК=256
CLRF PORTB;ОБНУЛИТЬ PORTB
BSF STATUS,5;БАНК1
CLRF TRISB;ЗАПИСЬ В PORTB
MOVLW 88H;РЕЖИМЫ
MOVWF OPTION_REG
BCF STATUS,5;БАНК0
M20: INCF PORTB,1;PORTB=1
CLRF TMR0;TMR0=0
M10: BTFSS INTCON,2;ФЛАГ TOIF=1?
GOTO M10;TOIF=0,ВОЗВРАТ
CLRF PORTB;PORTB=0
BCF INTCON,2;СБРОС ФЛАГА TOIF
DECFSZ COUNT1;COUNT=0?
GOTO M20;COUNT NOT 0,ЦИКЛ
RETURN;COUNT=0
END
;ПРОГРАММА Lb1_2.asm. Запись данных в порт В из массива,
; размещенного в памяти программы
#INCLUDE "P16F84.INC"
LIST P=16F84
__CONFIG 3FFBh
ORG 20H
.UDATA
COUNT1 RES 1
COUNT2 RES 1
COUNT3 RES 1
.CODE
ORG 00H
BSF STATUS,5
CLRF TRISB; НАСТРОЙКА ПОРТА В НА ЗАПИСЬ
MOVLW 08H
MOVWF OPTION_REG;РЕЖИМ ТАЙМЕРА И ДЕЛИТЕЛЯ
BCF STATUS,5;БАНК 0
MOVLW 1EH
MOVWF COUNT3;КРАТНОСТЬ ВЫВОДА МАССИВА ДАННЫХ
M30: MOVLW 0AH
MOVWF COUNT2;ЧИСЛО ЭЛЕМЕНТОВ МАССИВА
CLRF COUNT1;ТЕКУЩИЙ НОМЕР ЭЛЕМЕНТА МАССИВА
;(СМЕЩЕНИЕ К АДРЕСУ)
M10: CLRW
ADDWF COUNT1,0;УСТАНОВИТЬ НОМЕР ЭЛЕМЕНТА;МАССИВА
CALL MASSIV;ВЫЗОВ ПОДПРОГРАММЫ MASSIV
MOVWF PORTB;ЗАПИСЬ В ПОРТ
INCF COUNT1,1;УВЕЛИЧИТЬ НА 1 НОМЕР ЭЛЕМЕНТА
;МАССИВА
MOVLW 0E6H
MOVWF TMR0;TMR0=E6,ЗАПУСК ТАЙМЕРА,
;СЧЕТ 25 ТИКОВ
M20: BTFSS INTCON,2;ФЛАГ TOIF=1?
GOTO M20;TOIF=0,ВОЗВРАТ
BCF INTCON,2;СБРОС ФЛАГА TOIF
;(ТАЙМЕР ПЕРЕПОЛНЕН)
DECFSZ COUNT2,1;COUNT2=0?
GOTO M10;COUNT2 NOT 0, ОЧЕРЕДНОЙ
;ЭЛЕМЕНТ МАССИВА
DECFSZ COUNT3,1
GOTO M30;COUNT3 NOT 0, ВЫВОД МАССИВА
;COUNT3=0
MASSIV: ADDWF PCL
RETLW 07H
RETLW 0FH
RETLW 02H
RETLW 0EH
RETLW 03H
RETLW 0DH
RETLW 04H
RETLW 0CH
RETLW 05H
RETLW 0BH
END
; Lb1_3.asm. Программа записи данных массива в порт В.
#INCLUDE "P16F84.INC"
LIST P=16F84
__CONFIG 3FFBh
ORG 20H
.UDATA
COUNT1 RES 1
COUNT2 RES 1
.CODE
ORG 00H
GOTO INIT
MASSIV: ADDWF PCL
RETLW 04h
RETLW 7Ch
RETLW 0FFh
RETLW 0Bh
RETLW 32h
INIT: BSF STATUS,5
CLRF TRISB
BCF STATUS,5
CLRF PORTB
MOVLW 05h
MOVWF COUNT2
CLRF COUNT1
M10: MOVF COUNT1,0
CALL MASSIV
MOVWF PORTB
INCF COUNT1,1
DECFSZ COUNT2,1
GOTO M10
NOP
END