Домашнее задание

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: