Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Написание текста программы на языке Ассемблер

Читайте также:
  1. CALL — Вызов подпрограммы
  2. I. Простые запросы на языке SQL
  3. III. Вкажіть номери речень які відповідають змісту текста
  4. III. Вкажіть номери речень які відповідають змісту текста.
  5. III. Вкажіть номери речень які відповідають змісту текста.
  6. III. Вкажіть номери речень які відповідають змісту текста.
  7. III. Вкажіть номери речень які відповідають змісту текста.

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

 

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

#include p16f873a.inc

__CONFIG _HS_OSC;

RCV_S: SET H'20';принятый символ

STEK_0: SET H'21';программный стек данных

STEK_1: SET H'22';|

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

GOTO BEGIN;переход на начало основной программы

ORG H'004';вектор прерывания

GOTO INT;переход к обработчику прерываний

;начало основной программы

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

BSF STATUS,RP0;|

;задаем режимы работы параллельных портов

MOVLW B'00001110';задаем аналоговый вход PORTA,0

MOVWF ADCON1;программируем регистр АЦП 1

MOVLW B'00000001';PORTA, 7-1 выходы, PORTA, 0 вход

MOVWF TRISA;программируем регистр направления PORTA

MOVWF OPTION_REG;включаем подтягивающие резисторы PORTB

MOVLW B'11111111';PORTB, 7-0 входы

MOVWF TRISB;программируем регистр направления PORTB

MOVLW B'10000000';PORTC, 7 вход, PORTC, 6-0 выходы

MOVWF TRISC;программируем регистр направления PORTC

;разрешаем прерывания от приемника USART

MOVLW B'11000000';биты GIE и PEIE = 1

MOVWF INTCON;программируем регистр управления прерываниями

BSF PIE1,RCIE;разрешение прерываний от приемника USART

;задаем режим работы последовательного порта

MOVLW D'12';скорость передачи по USART 19200

MOVWF SPBRG;программируем регистр скорости обмена

MOVLW B'00100100';разрешение передачи, высокоскоростной асинхронный режим

MOVWF TXSTA;программируем регистр статуса передатчика

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

BCF STATUS,RP0;|

MOVLW B'10010000';включение USART, разрешение приема

MOVWF RCSTA;программируем регистр статуса приемника

;проверка кнопок и передача символов

M10: BCF STATUS,RP1;выбираем банк регистров 0

BCF STATUS,RP0;|

BTFSC PORTB,5;скачек,если нажата кнопка SA2

GOTO M20;переход к опросу SA3

MOVLW A'2';загружаем в аккумулятор ASCII символ "2"

CALL TSMIT;вызов подпрограммы передачи посылки

M20: BTFSC PORTB,4;скачек,если нажата кнопка SA3

GOTO M30;переход к опросу SA4

MOVLW A'3';загружаем в аккумулятор ASCII символ "3"

CALL TSMIT;вызов подпрограммы передачи посылки

M30: BTFSC PORTB,2;скачек,если нажата кнопка SA4

GOTO M40;переход к опросу SA5

MOVLW A'4';загружаем в аккумулятор ASCII символ "4"

CALL TSMIT;вызов подпрограммы передачи посылки

M40: BTFSC PORTB,1;скачек,если нажата кнопка SA5

GOTO M50;переход к опросу SA6

MOVLW A'5';загружаем в аккумулятор ASCII символ "5"

CALL TSMIT;вызов подпрограммы передачи посылки

M50: BTFSC PORTB,0;скачек,если нажата кнопка SA6

GOTO M60;переход к ожиданию и приему посылок

MOVLW A'6';загружаем в аккумулятор ASCII символ "6"

CALL TSMIT;вызов подпрограммы передачи посылки

;ожидание и прием символа

M60: MOVLW A'1';1 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTA,5;включаем HL1

MOVLW A'2';2 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTC,0;включаем HL2

MOVLW A'3';3 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTC,1;включаем HL3

MOVLW A'4';4 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTC,3;включаем HL4

MOVLW A'5';5 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTC,4;включаем HL5

MOVLW A'6';6 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSC STATUS,Z;скачек, если не равно

BSF PORTC,5;включаем HL6

MOVLW A'0';0 сравниваем

XORWF RCV_S,W;с принятым символом

BTFSS STATUS,Z;скачек, если равно

GOTO M10;возврат к началу программы если нет

BCF PORTA,5;гасим HL1

CLRF PORTC;гасим остальные светодиоды

GOTO M10;возврат к началу программы если нет

;подпрограмма передачи символа

TSMIT: MOVWF TXREG;инициируем передачу

NOP

T10: BTFSS PIR1,TXIF;скачек,если буфер освободился

GOTO T10;иначе, ждем освобождения буфера

BCF PIR1,TXIF;сброс флага освобождения буфера

RETURN;возврат в основную программу

;драйвер прерываний от приемника USART

INT: MOVWF STEK_0;сохраняем аккумулятор в ОЗУ

MOVF STATUS,W;сохраняем регистр статуса в ОЗУ

MOVWF STEK_1;|

BTFSC RCSTA,OERR;проверка ошибки переполнения буфера

GOTO I10;переход, если есть ошибка

BTFSC RCSTA,FERR;проверка ошибки кадра

GOTO I20;переход, если есть ошибка

MOVF RCREG,W;считываем принятый символ

MOVWF RCV_S;и сохраняем его в ОЗУ

GOTO I30;переход к выходу из драйвера прерывания

I10: MOVF RCREG,W;очистка буфера

MOVF RCREG,W;|

GOTO I30;переход к выходу из драйвера прерывания

I20: BCF RCSTA,CREN;сброс флага ошибки кадра

BSF RCSTA,CREN;|

I30: MOVF STEK_1,W;извлекаем регистр статуса из ОЗУ

MOVWF STATUS;|

MOVF STEK_0,W;извлекаем аккумулятор из ОЗУ

RETFIE;возврат в основную программу

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

 


Дата добавления: 2015-07-08; просмотров: 210 | Нарушение авторских прав


Читайте в этой же книге: Компиляция исходного текста программы в машинные коды | Отладка (выполнение) программы | FLASH память программ | Энергонезависимая память данных EEPROM | Разработка алгоритма программы | Написание текста программы на языке Ассемблер | Тестирование и отладка | Разработка алгоритма программы | Написание текста программы на языке Ассемблер | Трансляция текста программы в машинные коды |
<== предыдущая страница | следующая страница ==>
Разработка алгоритма программы| Разработка алгоритма программы

mybiblioteka.su - 2015-2024 год. (0.009 сек.)