Реализация десятичного калькулятора на 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>