Реализация десятичного калькулятора на 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 |
|||||||||||||
3а |
СОР |
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 |
|
Порт 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 |
|
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 - питание, |
Порт А - это порт разрядностью 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
Подобные документы
Изучение языка низкого уровня ассемблер для написания примера программы для 16 битного приложения. Разработка и реализация алгоритма поднесения чисел к степени чисел над полем за основанием 2 (mod 2). Иллюстрация техники создания DOS приложения.
курсовая работа [33,3 K], добавлен 08.11.2011Распределение функций между аппаратной и программной частями микропроцессорной системы. Выбор микроконтроллера, разработка и описание структурной, функциональной и принципиальной схемы. Выбор среды программирования, схема алгоритма и листинг программы.
курсовая работа [304,4 K], добавлен 17.08.2013Принципы и алгоритмы обработки прерываний. Набор действий по реализации этапов обработки прерываний микропроцессора. Разработка структуры и алгоритма резидентной программы. Реализация программы на языке Ассемблер, методы её отладки и тестирования.
курсовая работа [348,7 K], добавлен 22.12.2014Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.
курсовая работа [88,2 K], добавлен 19.09.2012Функциональная схема микроконтроллера. Схема подключения ADS7841. Блок-схема и интерфейс программы АЦП. Реализация Hart-протокола, пример транзакции. Результат моделирования передачи по Uart. Индикация, текст программы. Сторожевой таймер, печатная плата.
курсовая работа [2,3 M], добавлен 17.02.2013Написание программного обеспечения на языке ассемблер для AVR-МК ATmega16, позволяющего осуществлять вычисление заданной функции. Введение входных данных с помощью определенного макроса с командой загрузки значений в регистры ldi. Исходный код программы.
контрольная работа [521,0 K], добавлен 23.11.2014Разработка устройства управления двухконфорочной электроплитой на базе микроконтроллера, описание функциональных действий. Структурная схема аппаратной части. Проектирование программного обеспечения. Описание алгоритма работы системы и программы.
курсовая работа [709,3 K], добавлен 22.12.2010Разработка программного обеспечения в объектно-ориентированной среде визуального программирования Microsoft Office VBA, реализующего базу данных "Энциклопедия домашних животных". Выбор языка программирования. Реализация программных модулей в блоках.
курсовая работа [3,3 M], добавлен 11.01.2013Структура микропроцессорной системы, алгоритм ее управления и передачи сигналов. Карта распределения адресов. Разработка электрической принципиальной схемы и выбор элементной базы. Расчет потребляемого тока, блока питания, программного обеспечения.
курсовая работа [5,1 M], добавлен 22.01.2014Ввод и вывод чисел при помощи подключаемого модуля IO. Особенности работы с одномерными и двухмерными массивами. Тестирование состояние флагов. Рринципы и навыки работы с компилятором и отладчиком. Разработка схемы алгоритма программы на языке ассемблер.
курсовая работа [1,3 M], добавлен 02.12.2009