Реализация десятичного калькулятора на PIC16F874
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?же находятся в высоком состоянии, а один - в низком, причем этот вывод периодически меняется. Если какая-либо из кнопок нажата, то при логическом нуле на соответствующем выводе порта А, ноль будет и на одном из выводов порта В. Таким образом, зная какие из выводов портов А и В в данный момент находятся в низком состоянии, можно определить, какая кнопка нажата.
Принципиальная схема устройства
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.
. Однокристальные микроЭВМ. Справочник. М.: МИКАП, 1994.
. Руководство по микроконтроллерам II. М. Предко, 2001.
. URL:
. URL:
Приложение 1
Текст программы
REG1L=H21H=H22
EXP1=H23L=H24H=H25=H26L=H27H=H28L=H29H=H2A=H2B=H2C=H2D=H2E=H2F=H30=H31=H32=H33=H34_R1=H35_R2=H36_R3=H37_R4=H38_R5=H39=H3A=H3B=H3C=H3D=H3E=H3F=H40=H41=H42=H43=H44=H45=H46=H47=H48=H49
#DEFINEMINESFLAG, 0
#DEFINEZEROFLAG, 1
H00
BSFSTATUS, RP0H00TRISAH06ADCON1B11110000TRISBH00TRISCOPTION_REGSTATUS, RP0
STATUS, RP0SSPSTATSSPSTAT, CKESTATUS, RP0
INTCON
HFFPORTCPORTBSDVIGCYCLECOUNTCOUNT1EXPTEMPTEMP1TEMP2TEMP3TEMP4TEMP5TEMP6TEMP7TEMP8SPI_R1SPI_R2SPI_R3SPI_R4SPI_R5FLAGBC1BC2BC3BC4BCD1BCD2BCD3BCD4BCD5REG1LREG1HREG2LREG2HREZ1LREZ1HREZ2LREZ2H
H0ASPI_R1SPISPI_R1
;*******************************************************************************************
; Сканирование клавиатуры
MOVLWB11111110PORTA
CALLSCANBB11111101PORTASCANBB11111011PORTASCANBB11110111PORTASCANBB11011111PORTA
CALLSCANBA1
;****************************************************
; п/программа определения вводимого числа
SCANBPORTB, WSTATUS, ZPORTB, 4B4PORTB, 5B5PORTB, 6B6PORTB, 7B7
TEMPH0BSTATUS, ZA2STATUS, CNUMBERTEMP, WH0BSTATUS, CCOMMAND
COMFPORTB, WSTATUS, ZA2
PORTA, 0H07PORTA, 1H08PORTA, 2H09PORTA, 0H04PORTA, 1H05PORTA, 2H06PORTA, 0H01PORTA, 1H02PORTA, 2H03PORTA, 3H26; минусPORTA, 0H00PORTA, 1H2APORTA, 3H2EPORTA, 5EQUELH0B
;****************************************************
; п/п нажатой цифрыCOUNTCOUNT, WH04STATUS, C
H04CYCLESTATUS, CRLFBCD1BCD2BCD3CYCLEA3TEMP, WBCD1
EXP_FLEXP
TEMP, WSTATUS, ZA4H0ATEMP
MOVLWH04CYCLESTATUS, CRLFSPI_R1SPI_R2SPI_R3CYCLEA5TEMP, WSPI_R1
SPI
;****************************************************
; п/п нажатой операцииTEMP, 5TEMP, WPCLP_MINUSPM; +/-P_PLUS
;****************************************************
; п/п вывода на индикацию
SPI
MOVLWHFFPORTC
SPI_R5, WTEMP2SPI1SPI_R4, WTEMP2SPI1SPI_R3, WTEMP2SPI1SPI_R2, WTEMP2SPI1SPI_R1, WTEMP2SPI1SSPCON, SSPENB00110000SSPCONTEMP2, WSSPBUFSTATUS, RP0BTFSSSSPSTAT, BFA6SSPSTAT, BFSTATUS, RP0
RETURN
;****************************************************
; п/п индикации переполнения
MOVLWHFFPORTCTEMP2SPI1SPI1SPI1SPI1SPI1SSPCON, SSPENHFFPORTC
$
;****************************************************
; п/п вывода +/-MINESA7MINESHF0SPI_R5SPI
BCFMINESHF0SPI_R5SPI
;****************************************************
; п/п оптимизации индицируемого числа
OPTIMTEMPTEMP1TEMP2TEMP3TEMP4TEMP5TEMP6TEMP7TEMP8EXP_FL
;****************************************************************************************
; если EXP>0, то приведение к EXP=0, иначе - вставка запятой
MOVLWH7FEXP, WSTATUS, C
;************************************************
; умножение SPI_R на 10 и декремент EXP, пока EXP не станет =0
OP1MOVFEXP, WSTATUS, ZOP_ZERO; EXP=0OPT1EXPTEMP1, WSTATUS, ZOVEROP1OP_ZERO
;************************************************
; п/п формирования нулей_ZERO
CLRFTEMP1TEMP2TEMP3TEMP4TEMP5
ZERO
H09;CYCLE
OPT1H0CTEMP1, WSTATUS, ZOP6HACTEMP1CYCLEZERO
CALLOPT1H0FTEMP1, WSTATUS, ZOP7ZEROOP8H0ATEMP1BSFZEROH0CTEMP1, WSTATUS, ZOP8HAC
MOVWFTEMP1
OP8DECFSZCYCLEOP6
ZEROOP9H0ATEMP1
MOVFTEMP1, WSPI_R1TEMP2, WSPI_R2TEMP3, WSPI_R3TEMP4, WSPI_R4TEMP5, WSPI_R5
;************************************************
; п/п вставки минуса при сформированном BCD
BTFSSMINESOP12
HF0SPI_R5, WSTATUS, ZOP10OP11
BTFSSEXP_FLOVER
OPT2MOVLWHF0SPI_R5
;************************************************
OPT1
MOVLWH04; сдвиг влево 4 раза
MOVWFCT_1RLFSPI_R1SPI_R2SPI_R3SPI_R4SPI_R5TEMP1TEMP2TEMP3TEMP4TEMP5CTOPT1_1
;*************************************************
H04CYCLE_1BCFSTATUS, CSPI_R5SPI_R4SPI_R3SPI_R2SPI_R1CYCLEOPT2_1
;*******************************************************************************************
; необходимые действия для ввода втрой цифр?/p>