Реализация десятичного калькулятора на PIC16F874

Разработка микропроцессорной системы на базе однокристальной микроЭВМ, также программного обеспечения, реализующего заданный набор функций. Структура и схема микроконтроллера PIC16. Разработка программы на языке ассемблер в среде MPLAB IDE v8.84.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.07.2012
Размер файла 515,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

????????? ?? http://www.allbest.ru/

Реализация десятичного калькулятора на PIC16F874

Задание

Разработать микропроцессорную систему на базе однокристальной микроЭВМ и её программное обеспечение, реализующее заданный набор функций.

1. Краткое описание PIC16F874

Этот микроконтроллер является одним из представителей семейства PIC16. Архитектура основана на концепции раздельных шин и областей памяти для данных и для команд (Гарвардская архитектура). Шина данных и память данных (ОЗУ) имеют ширину 8 бит, а программная шина и программная память (ПЗУ) имеют ширину 14 бит.

Общая архитектура

Контроллер включает в себя (рис. 1):

§ процессор;

§ память программ;

§ память данных (ОЗУ, регистровый файл);

§ многочисленные внешние устройства.

К узлам процессора можно отнести:

§ 8-разрядное АЛУ;

§ 8-разрядный рабочий регистр W (аккумулятор);

§ 8-разрядный регистр флагов STATUS (рис. 2);

§ 13-разрядный программный счетчик PC, по содержимому которого осуществляется доступ в память программ;

§ 8-уровневый стек программного счетчика, предназначенный для хранения только адресов возврата из подпрограмм (прерываний). (Программный доступ в стек не возможен!);

§ регистр команд и блок управления;

§ тактовый генератор;

§ схемы, реализующие режимы пониженного энегропотребления.

Рис. 1. Общая структура микроконтроллера PIC16

Регистр STATUS содержит арифметические флаги АЛУ, состояние контроллера при сбросе и биты выбора банка для памяти данных

Область ОЗУ (память данных) организована как 256 Ч 8 бит и разбита на два банка, каждый по 128 байтов. Каждый банк занимает адресное пространство 7Fh (128 байт). Первые 32 адреса в обоих банках занимают специальные регистры. Адреса 20h - 7Fh (банк 0) и A0h - FFh (банк 1) занимают регистры общего назначения (ячейки ОЗУ).

Среди регистров семейства PIC16 можно выделить группу «процессорных» - PCL, OPTION, STATUS, FSR, PCLATH; и несколько групп, относящихся к различным «внешним» устройствам и подсистемам. Подсистема прерываний поддерживается регистрами INTCON, PIR1, PIR2, PIE1, PIE2; подсистема параллельного ввода / вывода - регистрами портов PORT A, PORT B, PORT C, PORT D, PORT E и регистрами направлений TRIS A, TRIS B, TRIS C, TRIS D, TRIS E.

Подсистема контроля времени включает регистры таймеров управления ими: TMR0, TMR1L, TMR1H, T1CON, TMR2, T2CON, а также регистры, относящиеся к двум каналам CCP - Capture\Compare\PWM (захват \ сравнение \ ШИМ): CCPR1L, CCPR1H, CCP1CON, CCPR2L, CCPR2H, CCP2CON.

Подсистема последовательного ввода / вывода представлена регистрами асинхронного приемопередатчика: TXREG, RCREG, TXSTA, RCSTA, SPBRG и синхронного последовательного порта: SSPBUF, SSPCON, SSPADD, SSPSTAT.

Наконец, аналого-цифровой преобразователь использует регистры ADRES, ADCON 0, ADCON 1.

Память программ в PIC16 не пересекается с памятью данных (Гарвардская архитектура) и имеет собственную разрядную шину в 14 бит. Адресация памяти программ осуществляется только по содержимому программного счетчика.

Программный счетчик имеет разрядность 13 бит и способен адресовать 8К Ч 14 бит объема программной памяти. При обращение к адресам выше 0FFFh фактически обращение производится к тем же четырем килобайтам.

Форматы команд и способы адресации

Все команды контроллера имеют одинаковую длину - 14 бит (одно командное слово) и с точки зрения форматов делятся на три разновидности (рис. 4):

§ байт-ориентированные;

§ бит - ориентированные;

§ команды с константами (8- или 11-битными).

Форматы этих команд (рис. 5), при этом приняты следующие обозначения:

СОР - поле кода операции;

f - поле адреса памяти данных;

d - указатель регистра-приемника;

b - номер бита в адресуемом f регистре;

k - 8-битная константа - непосредственный операнд;

Addr - адрес перехода или вызова (для команд GOTO, CALL).

Для доступа к регистрам ОЗУ используется прямая или косвенная адресация.

13

8

7

6

0

1

СОР

d

f

байт-ориентированные

13

10

9

7

6

0

2

СОР

b

f

бит-ориентированные

13

8

7

0

3

СОР

k

команды

с константами

13

11

10

0

СОР

Addr

Рис. 4. Форматы команд

Для организации косвенной адресации необходимо в поле f команды поместить код 000 0000.

В PIC16F874 объем ОЗУ составляет 256 байт и. Поэтому биты IRP и RP1 для формирования адреса не используются. Их можно, но не рекомендуется, использовать как биты общего назначения.

При непосредственной адресации первый операнд двухместных операций извлекается из младшего байта командного слова, второй операнд и результат - всегда в регистре W.

Порты ввода / вывода

На кристалле PIC16F874 предусмотрено пять портов параллельного обмена с побитовой индивидуальной настройкой на вход или на выход. Выводы кристалла, линии портов используются одновременно и для подключения к АЦП, к внешнему прерыванию и другим встроенным узлам кристалла. Альтернативные переключения осуществляются через управляющие регистры. В таблице 1 приведено назначение выводов кристалла.

Таблица 1

Обозначение

Тип

вывода

Тип

буфера

Режим

Порт А

RA0/AN0 - RA3/AN3

I/O

TTL

Порт ввода / вывода // Аналоговый вход канала

RA4/T0CKI

I/O

ST

Линия порта ввода / вывода с открытым стоком // Вход частоты для таймера / счетчика TMR0.

RA5/AN4 //SS

I/O

TTL

Порт ввода / вывода // Аналоговый вход канала 4
 // В режиме последовательного интерфейса
SPI - сигнал выборка slave

Порт B

RB0/INT

I/O

TTL/ST

Порт ввода / вывода // Внешний вход прерывания

RB1-RB3

I/O

TTL

Порт ввода / вывода

RB4, RB5

I/O

TTL

Порт ввода / вывода. Прерывание при изменении значения на выводе

RB6, RB7

I/O

TTL/ST

Порт ввода / вывода. Прерывание при изменении значения на выводе. // Также используется при программировании кристалла.

Порт С

RС0/T1OSO/T1CKI

I/O

ST

Порт ввода / вывода. // Выход генератора TMR1 // Вход внешней тактовой частоты

RС1/T1OSI/CCP2

I/O

ST

Порт ввода / вывода. // Вход генератора TMR1
 // Модуль CCP2 (защелкивание2 - вход, сравнение2 - выход, ШИМ2 - выход)

RС2/CCP1

I/O

ST

Порт ввода / вывода. // Модуль CCP1 (защелкивание1-вход, сравнение1 - выход, ШИМ1 - выход)

RС3/SCK/SCL

I/O

ST

Порт ввода / вывода // Тактовая частота для режимов SPI, I2C

RС4/SDI/SDA

I/O

ST

Порт ввода / вывода // Вход данных в режиме SPI // Вход/выход данных в режиме I2C

RС5/SDO

I/O

ST

Порт ввода / вывода // Выход данных в режиме SPI

RС6/TX/CK

I/O

ST

Порт ввода / вывода // В режиме SCI (асинхронном) выход данных // В режиме SCI (синхронном) тактовая частота

RС7/RX/DT

Порт ввода / вывода // В режиме SCI (асинхронном) вход данных // В режиме SCI (синхронном) вход / выход данных

Порт D

RD [0:7]/PSP [0:7]

I/O

ST/TTL

Двунаправленный порт (RD0..RD7) ввода / вывода // Параллельный порт-защелка (PSP0..PSP7) для подключения к микропроцессорной шине в качестве сопроцессора

Порт Е

E0 //RD/AN5, E1 //WR/AN6, E2 //CS/AN7

I/O

ST/TTL

Двунаправленный порт ввода / вывода // Сигнал чтения в режиме микропроцессорной шины
 // Аналоговый вход канала

Выводы кристалла, не входящие в порты

/MCLR/Vpp

I/P

ST

Низкий уровень на этом входе генерирует сигнал сброса для контроллера. Активный низкий.

OSC1/CLKIN

I

CMOS

Для подключения кварца или вход внешней тактовой частоты

OSC2/CLKOUT

O

Генератор, выход тактовой частоты в режиме RC генератора, в остальных случаях - для подключения кварцевого резонатора

Vdd

Р

-

Напряжение питания

Vss

Р

-

Общий(земля)

Условные обозначения: I - только вход, O - только выход, I/O - вход / выход, P - питание,
TTL - уровень ТТЛ, ST - вход триггера Шмитта.

Порт А - это порт разрядностью 6 бит, соответствующие выводы кристалла RA [5:0]. Выводы RA [3:0], RA5 двунаправленные. Относящийся к порту А управляющий регистр TRISA расположен по адресу 85h.

Порт В-это двунаправленный порт разрядностью 8 бит (адрес регистра 06h). Относящийся к порту В управляющий регистр TRISB расположен по адресу 86h.

Порт С - это двунаправленный порт разрядностью восемь бит (адрес регистра 07h). Относящийся к порту C управляющий регистр TRISC расположен по адресу 87h.

Порт D - это двунаправленный порт разрядностью восемь бит (адрес регистра 08h). Относящийся к порту D управляющий регистр TRISD расположен по адресу 88h.

Порт Е имеет три линии (RE0, RE1, RE2), которые могут быть настроены как линии ввода / вывода (адрес регистра 09h. Относящийся к порту E управляющий регистр TRISE (рис. 6) расположен по адресу 89h.

7

6

5

4

3

2

1

0

IBF

OBF

IBOV

PSPMODE

TRISE2

TRISE1

TRIS0

IBF - входной буфер заполнен;

OBF - выходной буфер заполнен;

IBOV - входной буфер переполнен;

PSPMODE - выбирает режим для порта D и порта E;

TRISE [2:0] - биты управления направлением на выводах RE [2:0] соответственно

Аналого-цифровой преобразователь (АЦП)

Модуль АЦП (рис. 7) содержит восемь аналоговых каналов, мультиплексируемых на одну схему выборки / хранения и далее на АЦП. Опорное напряжение поступает извне через вывод RA3/AIN3/Vref или формируется внутри кристалла из напряжения питания Vdd.

Таймерная система

В семействе PIC16 находятся 3 таймера TMR0, TMR1, TMR2.

Таймер TMR1. Таймер 1 - это 16-битовый таймер / счетчик (рис. 7), который имеет два 8-битовых регистра (TMR1H и TMR1L). Эти регистры доступны для чтения и записи. Таймер 1 инкрементируется от 0000h до FFFFh, после чего опять переходит в 0000 h.

2. Разработка системы

2.1 Параметры устройства

Разрабатываемая система должна обеспечить:

· ввод и редактирование входных значений;

· выполнение операции в зависимости от нажатой кнопки («+», «-», «=», «+\-», «С»);

· индикацию результата;

Для выполнения данных функций ОМЭВМ должна обладать следующими ресурсами:

· встроенный АЦП;

· 8 выходных линий для подключения ЖК индикатора при динамической индикации;

· 8 выходных линии для подключения матричной клавиатуры;

· система таймеров;

PIC16F874 удовлетворяет всем требованиям данной задачи

2.2 Обоснование выбранных устройств. Организация диалога с пользователем

В качестве индикатора устройства используются широко распространенный 10-разрядный жк-индикатор. Для управления

На лицевой панели устройства находятся 10-разрядный жк-индикатор, предназначенный для вывода результатов вычислений, кнопки ввода, редактирования и вычислений заданных арифметических операций.

Лицевая панель устройства

Тип и назначение каждой из кнопок:

Кнопка «0» - «9» предназначен для записи чисел в регистры REG1 и REG2 и вывода на индикацию.

Кнопка «С» предназначена для очистки регистров (REG1, REG2, REZ) и индикации.

Кнопка «+» предназначена для записи значения «+» в регистр операций OPER.

Кнопка «-» предназначена для записи значения «-» в регистр операций OPER.

Кнопка «+\-» предназначена для изменения знакового разряда числа.

Кнопка «=» предназначена для подсчета результатов в зависимости от выполняемой операции и вывод на индикацию индицируемого регистра SPI.

калькулятор программа микроконтроллер десятичный

2.3 Схема устройства

Для индикации используется 10-разрядный жк-индикатор. Для управления индикатором используется интерфейс SPI.

Для управления устройством используется матричная клавиатура (используемые регистры: A0 - A5, B4 - B7). Она реализована следующим образом: выводы RB4-RB7 подтянуты к Vdd, т.е. при чтении порта возвращают логическую единицу. Четыре вывода из RA0-RA3 также находятся в высоком состоянии, а один - в низком, причем этот вывод периодически меняется. Если какая-либо из кнопок нажата, то при логическом нуле на соответствующем выводе порта А, ноль будет и на одном из выводов порта В. Таким образом, зная какие из выводов портов А и В в данный момент находятся в низком состоянии, можно определить, какая кнопка нажата.

Принципиальная схема устройства

2.4 Программное обеспечение

Для работы данной программы частота 20 Мгц является высокой поэтому она занижена до 5 Мгц. Сама программа состоит из 3-х основных частей: настройки системы, вывода индикации и измерений. В первой части происходит настройка портов, АЦП, таймеров, очистка необходимых для работы ячеек и т.д. Во второй происходит опрос клавиатуры и ввод значений в регистры для дальнейшего выполнения операций. Третья часть вызывается при нажатии кнопки «=». В ней выполняется заданная ранее операция и производится вывод на индикацию полученного значения.

Распределение памяти

Номер(а) ячейки

Назначение

21-23

Коды цифр первого введенного числа

24-26

Коды цифр второго введенного числа

27-2B

Коды цифр результирующего числа

2С-30

Коды двоично-десятичного числа

31-34

Коды двоичного числа

35-39

Коды индицируемого числа

3A-41, 49

Регистры временного хранения

42

Регистр сдвигов

43

Регистр циклов

44-46

Регистры счетчика

47

Регистр флагов

48

Регистр операций

Заключение

Таким образом, была завершена разработка микропроцессорной системы на базе однокристальной микроЭВМ PIC16F874 и её программного обеспечения, реализующих заданный набор функций в соответствии с техническим заданием.

Код был разработан на языке ассемблер в среде MPLAB IDE v8.84. MPLAB - это интегрированная среда разработки (IDE) для семейства микроконтроллеров PICmicro фирмы Microchip Technology Incorporated, поддерживающая написание на таких языках, как C\C++ и ассемблер.

Список литературы

1. Жмакин А.П., Титов В.С. Однокристальные микроЭВМ в системах управления: Учебное пособие / Курск. гос. тех. ун-т., Курск, 2002.

2. Однокристальные микроЭВМ. Справочник. М.: МИКАП, 1994.

3. Руководство по микроконтроллерам II. М. Предко, 2001.

4. URL: http://www.gaw.ru/html.cgi/txt/interface/spi/index.htm - Информация про интерфейс SPI

5. URL: http://www.averos.narod.ru/pdf/ht1611.pdf - Информация про 10-разрядный жк-индикатор НТ 1611

Приложение 1

Текст программы

REG1L = H'21'

REG1H = H'22'

EXP1 = H'23'

REG2L = H'24'

REG2H = H'25'

EXP2 = H'26'

REZ1L = H'27'

REZ1H = H'28'

REZ2L = H'29'

REZ2H = H'2A'

EXP = H'2B'

BCD1 = H'2C'

BCD2 = H'2D'

BCD3 = H'2E'

BCD4 = H'2F'

BCD5 = H'30'

BC1 = H'31'

BC2 = H'32'

BC3 = H'33'

BC4 = H'34'

SPI_R1 = H'35'

SPI_R2 = H'36'

SPI_R3 = H'37'

SPI_R4 = H'38'

SPI_R5 = H'39'

TEMP1 = H'3A'

TEMP2 = H'3B'

TEMP3 = H'3C'

TEMP4 = H'3D'

TEMP5 = H'3E'

TEMP6 = H'3F

TEMP7 = H'40'

TEMP8 = H'41'

SDVIG = H'42'

CYCLE = H'43'

COUNT1 = H'44'

COUNT = H'45'

CT = H'46'

FLAG = H'47'

OPER = H'48'

TEMP = H'49'

#DEFINE MINES FLAG, 0

#DEFINE ZERO FLAG, 1

ORG H'00'

BEGIN BSF STATUS, RP0

MOVLW H'00'

MOVWF TRISA

MOVLW H'06'

MOVWF ADCON1

MOVLW B'11110000'

MOVWF TRISB

MOVLW H'00'

MOVWF TRISC

CLRF OPTION_REG

BCF STATUS, RP0

BSF STATUS, RP0

CLRF SSPSTAT

BSF SSPSTAT, CKE

BCF STATUS, RP0

CLRF INTCON

MOVLW H'FF'

MOVWF PORTC

MOVWF PORTB

CLRF SDVIG

CLRF CYCLE

CLRF COUNT

CLRF COUNT1

CLRF EXP

CLRF TEMP

CLRF TEMP1

CLRF TEMP2

CLRF TEMP3

CLRF TEMP4

CLRF TEMP5

CLRF TEMP6

CLRF TEMP7

CLRF TEMP8

CLRF SPI_R1

CLRF SPI_R2

CLRF SPI_R3

CLRF SPI_R4

CLRF SPI_R5

CLRF FLAG

CLRF BC1

CLRF BC2

CLRF BC3

CLRF BC4

CLRF BCD1

CLRF BCD2

CLRF BCD3

CLRF BCD4

CLRF BCD5

CLRF REG1L

CLRF REG1H

CLRF REG2L

CLRF REG2H

CLRF REZ1L

CLRF REZ1H

CLRF REZ2L

CLRF REZ2H

MOVLW H'0A'

MOVWF SPI_R1

CALL SPI

CLRF SPI_R1

;*******************************************************************************************

; Сканирование клавиатуры

A1 MOVLW B'11111110'

MOVWF PORTA

CALL SCANB

MOVLW B'11111101'

MOVWF PORTA

CALL SCANB

MOVLW B'11111011'

MOVWF PORTA

CALL SCANB

MOVLW B'11110111'

MOVWF PORTA

CALL SCANB

MOVLW B'11011111'

MOVWF PORTA

CALL SCANB

GOTO A1

;****************************************************

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

SCANB

COMF PORTB, W

BTFSC STATUS, Z

RETURN

BTFSS PORTB, 4

CALL B4

BTFSS PORTB, 5

CALL B5

BTFSS PORTB, 6

CALL B6

BTFSS PORTB, 7

CALL B7

MOVWF TEMP

SUBLW H'0B'

BTFSC STATUS, Z

GOTO A2

BTFSC STATUS, C

CALL NUMBER

MOVF TEMP, W

SUBLW H'0B'

BTFSS STATUS, C

CALL COMMAND

A2 COMF PORTB, W

BTFSC STATUS, Z

RETURN

GOTO A2

B4

BTFSS PORTA, 0

RETLW H'07'

BTFSS PORTA, 1

RETLW H'08'

BTFSS PORTA, 2

RETLW H'09'

B5

BTFSS PORTA, 0

RETLW H'04'

BTFSS PORTA, 1

RETLW H'05'

BTFSS PORTA, 2

RETLW H'06'

B6

BTFSS PORTA, 0

RETLW H'01'

BTFSS PORTA, 1

RETLW H'02'

BTFSS PORTA, 2

RETLW H'03'

BTFSS PORTA, 3

RETLW H'26'; минус

B7

BTFSS PORTA, 0

RETLW H'00'

BTFSS PORTA, 1

RETLW H'2A'

BTFSS PORTA, 3

RETLW H'2E'

BTFSS PORTA, 5

CALL EQUEL

RETLW H'0B'

;****************************************************

; п/п нажатой цифры

NUMBER

INCF COUNT

MOVF COUNT, W

SUBLW H'04'

BTFSS STATUS, C

RETURN

MOVLW H'04'

MOVWF CYCLE

BCF STATUS, C

A3 RLF BCD1

RLF BCD2

RLF BCD3

DECFSZ CYCLE

GOTO A3

MOVF TEMP, W

ADDWF BCD1

BTFSC EXP_FL

DECF EXP

MOVF TEMP, W

BTFSS STATUS, Z

GOTO A4

MOVLW H'0A'

MOVWF TEMP

A4 MOVLW H'04'

MOVWF CYCLE

BCF STATUS, C

A5 RLF SPI_R1

RLF SPI_R2

RLF SPI_R3

DECFSZ CYCLE

GOTO A5

MOVF TEMP, W

ADDWF SPI_R1

CALL SPI

RETURN

;****************************************************

; п/п нажатой операции

COMMAND

BCF TEMP, 5

MOVF TEMP, W

ADDWF PCL

CALL P_MINUS

RETURN

CALL PM; +/-

RETURN

CALL P_PLUS

RETURN

RETURN

;****************************************************

; п/п вывода на индикацию

SPI

MOVLW H'FF'

MOVWF PORTC

MOVF SPI_R5, W

MOVWF TEMP2

CALL SPI1

MOVF SPI_R4, W

MOVWF TEMP2

CALL SPI1

MOVF SPI_R3, W

MOVWF TEMP2

CALL SPI1

MOVF SPI_R2, W

MOVWF TEMP2

CALL SPI1

MOVF SPI_R1, W

MOVWF TEMP2

CALL SPI1

BCF SSPCON, SSPEN

RETURN

SPI1

MOVLW B'00110000'

MOVWF SSPCON

MOVF TEMP2, W

MOVWF SSPBUF

BSF STATUS, RP0

A6 BTFSS SSPSTAT, BF

GOTO A6

BCF SSPSTAT, BF

BCF STATUS, RP0

RETURN

;****************************************************

; п/п индикации переполнения

OVER

MOVLW H'FF'

MOVWF PORTC

MOVWF TEMP2

CALL SPI1

CALL SPI1

CALL SPI1

CALL SPI1

CALL SPI1

BCF SSPCON, SSPEN

MOVLW H'FF'

MOVWF PORTC

GOTO $

;****************************************************

; п/п вывода +/-

PM

BTFSC MINES

GOTO A7

BSF MINES

MOVLW H'F0'

ADDWF SPI_R5

CALL SPI

RETURN

A7 BCF MINES

MOVLW H'F0'

SUBWF SPI_R5

CALL SPI

RETURN

;****************************************************

; п/п оптимизации индицируемого числа

OPTIM

CLRF TEMP

CLRF TEMP1

CLRF TEMP2

CLRF TEMP3

CLRF TEMP4

CLRF TEMP5

CLRF TEMP6

CLRF TEMP7

CLRF TEMP8

BCF EXP_FL

;****************************************************************************************

; если EXP>0, то приведение к EXP=0, иначе - вставка запятой

MOVLW H'7F'

SUBWF EXP, W

BTFSC STATUS, C

;************************************************

; умножение SPI_R на 10 и декремент EXP, пока EXP не станет =0

OP1 MOVF EXP, W

BTFSC STATUS, Z

GOTO OP_ZERO; EXP=0

CALL OPT1

DECF EXP

MOVF TEMP1, W

BTFSS STATUS, Z

GOTO OVER

GOTO OP1

GOTO OP_ZERO

;************************************************

; п/п формирования нулей

OP_ZERO

CLRF TEMP1

CLRF TEMP2

CLRF TEMP3

CLRF TEMP4

CLRF TEMP5

BCF ZERO

MOVLW H'09';

MOVWF CYCLE

CALL OPT1

MOVLW H'0C'

SUBWF TEMP1, W

BTFSS STATUS, Z

GOTO OP6

MOVLW H'AC'

MOVWF TEMP1

DECF CYCLE

BSF ZERO

OP6 CALL OPT1

MOVLW H'0F'

ANDWF TEMP1, W

BTFSS STATUS, Z

GOTO OP7

BTFSS ZERO

GOTO OP8

MOVLW H'0A'

ADDWF TEMP1

OP7 BSF ZERO

MOVLW H'0C'

SUBWF TEMP1, W

BTFSS STATUS, Z

GOTO OP8

MOVLW H'AC'

MOVWF TEMP1

OP8 DECFSZ CYCLE

GOTO OP6

BTFSC ZERO

GOTO OP9

MOVLW H'0A'

MOVWF TEMP1

OP9 MOVF TEMP1, W

MOVWF SPI_R1

MOVF TEMP2, W

MOVWF SPI_R2

MOVF TEMP3, W

MOVWF SPI_R3

MOVF TEMP4, W

MOVWF SPI_R4

MOVF TEMP5, W

MOVWF SPI_R5

;************************************************

; п/п вставки минуса при сформированном BCD

BTFSS MINES

GOTO OP12

MOVLW H'F0'

ANDWF SPI_R5, W

BTFSS STATUS, Z

GOTO OP10

GOTO OP11

OP10 BTFSS EXP_FL

GOTO OVER

CALL OPT2

OP11 MOVLW H'F0'

ADDWF SPI_R5

OP12

RETURN

;************************************************

OPT1

MOVLW H'04'; сдвиг влево 4 раза

MOVWF CT

OPT1_1 RLF SPI_R1

RLF SPI_R2

RLF SPI_R3

RLF SPI_R4

RLF SPI_R5

RLF TEMP1

RLF TEMP2

RLF TEMP3

RLF TEMP4

RLF TEMP5

DECFSZ CT

GOTO OPT1_1

RETURN

;*************************************************

OPT2

MOVLW H'04'

MOVWF CYCLE

OPT2_1 BCF STATUS, C

RRF SPI_R5

RRF SPI_R4

RRF SPI_R3

RRF SPI_R2

RRF SPI_R1

DECFSZ CYCLE

GOTO OPT2_1

RETURN

;*******************************************************************************************

; необходимые действия для ввода втрой цифры

CLRREG

CALL BCD_BC

CLRF BCD1

CLRF BCD2

CLRF BCD3

CLRF BCD4

CLRF BCD5

CLRF COUNT

BCF MINES

BCF EXP_FL

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.