2.3. Содержание работы.
В данной работе осваивается применение основных функций меню Mplab с использованием готовых текстов программ. Отрабатывается практика создания новых проектов на примере работы с этими текстами, запуска проектов и проверки их работы. При этом выполняется просмотр и модификация отдельных строк программ в режиме симуляции. Создаются новые программы путем внесения изменений в имеющиеся.
2.4. Порядок выполнения работы.
2.4.1. Домашняя подготовка к работе.
- изучить лекционный материал по PIC-контроллерам: организацию памяти контроллера PIC16C8X, систему его команд, структуру и принципы работы встроенных периферийных устройств и их программирования (портов, таймеров и пр.),
- ознакомиться с готовыми программами и написать новые в соответствии со следующим заданием.
2.4.2. Домашнее задание.
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