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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    294,38 Кб
  • Опубликовано:
    2012-07-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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









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

Задание

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

.       
Краткое описание
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

СОР

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


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

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

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

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.

 

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


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

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

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

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

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

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

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

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

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

 

.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.

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

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

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

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


Приложение 1

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

REG1L       =       H'21'H        =       H'22'

EXP1         =       H'23'L        =       H'24'H        =       H'25' =       H'26'L        =         H'27'H        =       H'28' L       =       H'29'H        =       H'2A'          =       H'2B' =         H'2C' =       H'2D'          =       H'2E' =       H'2F' =       H'30' =       H'31' =       H'32' =         H'33' =       H'34'_R1    =       H'35'_R2    =       H'36'_R3    =       H'37'_R4    =         H'38'_R5    =       H'39' =       H'3A'          =       H'3B' =       H'3C' =       H'3D'          =         H'3E' =       H'3F  =       H'40' =       H'41' =       H'42' =       H'43' =       H'44' =       H'45'         =       H'46' =       H'47' =       H'48' =       H'49'

#DEFINE   MINES       FLAG, 0

#DEFINE   ZERO         FLAG, 1

         H'00'

         BSF  STATUS, RP0     H'00' TRISA        H'06' ADCON1   B'11110000'         TRISB        H'00' TRISC        OPTION_REG    STATUS, RP0

         STATUS, RP0     SSPSTAT  SSPSTAT, CKE  STATUS, RP0

         H'FF' PORTC      PORTB      SDVIG       CYCLE      COUNT     COUNT1   EXP         TEMP        TEMP1      TEMP2      TEMP3      TEMP4      TEMP5      TEMP6         TEMP7      TEMP8      SPI_R1       SPI_R2       SPI_R3       SPI_R4       SPI_R5         FLAG         BC1  BC2  BC3  BC4  BCD1         BCD2         BCD3         BCD4         BCD5         REG1L       REG1H      REG2L       REG2H      REZ1L       REZ1H         REZ2L       REZ2H

         H'0A'          SPI_R1       SPI    SPI_R1

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

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

         MOVLW    B'11111110'        PORTA

CALL         SCANB      B'11111101'        PORTA      SCANB      B'11111011'         PORTA      SCANB      B'11110111'        PORTA      SCANB      B'11011111'         PORTA

CALL         SCANB      A1

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

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

SCANB      PORTB, W STATUS, Z         PORTB, 4  B4     PORTB, 5  B5     PORTB, 6         B6     PORTB, 7  B7

         TEMP        H'0B' STATUS, Z         A2     STATUS, C         NUMBER  TEMP, W         H'0B' STATUS, C         COMMAND

         COMF        PORTB, W STATUS, Z         A2

         PORTA, 0  H'07' PORTA, 1  H'08' PORTA, 2  H'09' PORTA, 0  H'04' PORTA, 1         H'05' PORTA, 2  H'06' PORTA, 0  H'01' PORTA, 1  H'02' PORTA, 2  H'03' PORTA, 3         H'26'; минус        PORTA, 0  H'00' PORTA, 1  H'2A'          PORTA, 3  H'2E' PORTA, 5         EQUEL      H'0B'

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

; п/п нажатой цифры    COUNT     COUNT, W         H'04' STATUS, C

         H'04' CYCLE      STATUS, C         RLF  BCD1         BCD2         BCD3         CYCLE      A3     TEMP, W   BCD1

         EXP_FL     EXP

         TEMP, W   STATUS, Z         A4     H'0A'          TEMP

         MOVLW    H'04' CYCLE      STATUS, C         RLF  SPI_R1       SPI_R2         SPI_R3       CYCLE      A5     TEMP, W   SPI_R1

         SPI

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

; п/п нажатой операции                  TEMP, 5    TEMP, W   PCL  P_MINUS  PM; +/-         P_PLUS

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

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

SPI

MOVLW    H'FF' PORTC

         SPI_R5, W TEMP2      SPI1  SPI_R4, W TEMP2      SPI1  SPI_R3, W TEMP2         SPI1  SPI_R2, W TEMP2      SPI1  SPI_R1, W TEMP2      SPI1  SSPCON, SSPEN                   B'00110000'        SSPCON    TEMP2, W SSPBUF     STATUS, RP0     BTFSS         SSPSTAT, BF     A6     SSPSTAT, BF     STATUS, RP0

RETURN

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

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

MOVLW    H'FF' PORTC      TEMP2      SPI1  SPI1  SPI1  SPI1  SPI1  SSPCON, SSPEN       H'FF' PORTC

         $

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

; п/п вывода +/-   MINES       A7     MINES       H'F0' SPI_R5       SPI

         BCF  MINES       H'F0' SPI_R5       SPI

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

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

OPTIM       TEMP        TEMP1      TEMP2      TEMP3      TEMP4      TEMP5         TEMP6      TEMP7      TEMP8      EXP_FL

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

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

MOVLW    H'7F' EXP, W      STATUS, C

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

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

OP1  MOVF        EXP, W      STATUS, Z         OP_ZERO; EXP=0       OPT1         EXP         TEMP1, W STATUS, Z         OVER        OP1  OP_ZERO

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

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

CLRF         TEMP1      TEMP2      TEMP3      TEMP4      TEMP5

         ZERO

         H'09';         CYCLE

         OPT1         H'0C' TEMP1, W STATUS, Z         OP6  H'AC'         TEMP1         CYCLE      ZERO

         CALL         OPT1         H'0F' TEMP1, W STATUS, Z         OP7  ZERO         OP8         H'0A'          TEMP1      BSF  ZERO         H'0C' TEMP1, W STATUS, Z         OP8         H'AC'

MOVWF        TEMP1 

OP8  DECFSZ    CYCLE      OP6

         ZERO         OP9  H'0A'          TEMP1

         MOVF        TEMP1, W SPI_R1       TEMP2, W SPI_R2       TEMP3, W SPI_R3         TEMP4, W SPI_R4       TEMP5, W SPI_R5

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

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

BTFSS       MINES       OP12

         H'F0' SPI_R5, W STATUS, Z         OP10 OP11

         BTFSS       EXP_FL     OVER

         OPT2         MOVLW    H'F0' SPI_R5               

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

OPT1

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

MOVWF    CT    _1     RLF  SPI_R1       SPI_R2       SPI_R3       SPI_R4       SPI_R5         TEMP1      TEMP2      TEMP3      TEMP4      TEMP5      CT    OPT1_1

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

         H'04' CYCLE_1  BCF  STATUS, C         SPI_R5       SPI_R4       SPI_R3         SPI_R2       SPI_R1       CYCLE      OPT2_1

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

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

CLRREG    BCD_BC


Похожие работы на - Реализация десятичного калькулятора на PIC16F874

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!