Разработка микропроцессорной системы
Электрическая схема и модули программы. Файл, содержащий все переменные. Разработка системы, обеспечивающей прием и обработку массива из 64 восьмиразрядных чисел из микросхемы КР1446ХК1 в оперативную память контроллера. Обеспечение световой индикации.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.06.2024 |
Размер файла | 339,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Нижегородский государственный технический университет им. Р.Е. Алексеева» (НГТУ)
Институт радиоэлектроники и информационных технологий
Кафедра «Информационные радиосистемы»
Курсовой проект
Разработка микропроцессорной системы
Проверил:
Букварев Е.А.
Выполнил:
студент гр. 20-Р
Краев А.А.
Нижний Новгород
2023
Оглавление
Задание
1. Описание электрической схемы
2. Описание модулей программы
2.1 Работа блока «main»
2.2 Работа блока «INT_1»
2.3 Работа блока «RS_INT»
2.4 Работа блока «INT_0»
3. Карта памяти системы
4. Текст программ
4.1 Программа основного модуля
4.2 Программы модулей прерываний
4.3 Файл, содержащий все переменные
Список литературы
Задание
память контроллер микросхема программа
Вариант 06. Разработать систему, обеспечивающую прием и обработку массива из 64 восьмиразрядных чисел из микросхемы КР1446ХК1 в оперативную память контроллера. Обработка - сортировка чисел в порядке убывания по модулю. При ошибке в канале обеспечить световую индикацию. Тип микроконтроллера - AT89C4051.
1. Описание электрической схемы
Электрическая схема представляет собой соединение используемого микроконтроллера AT89C4051 и микросхемы КР1446ХК1 с подключением постоянного напряжения питания VCC. На микроконтроллер подаётся частота тактирования 12 МГц.
Кнопка (лог. «0» при нажатии, при отжатой кнопке напряжение лог. «1» обеспечивается подтягивающим резистором R3) и светодиод ошибки подключены к выводам микроконтроллера. Элементы C1, C5 используются для фильтрации цепей питания.
Ножки микроконтроллера подключены следующим образом:
VCC - напряжение питания 5В;
GND - потенциал корпуса;
RST - сброс микроконтроллера, выполнен на элементах R1 и C4;
XTAL1, XTAL2 - кварцевый резонатор Z1 с конденсаторами C2 и C3 подключены по типовой схеме;
P3.0 (последовательный порт) принимает данные с ножки DATA микросхемы;
P3.2-ERR2 оповещает микроконтроллер о возникновении ошибки в канале, вызывает прерывание;
P3.3-RX оповещает микроконтроллер о готовности следующих двух байт;
P1.7-PROG позволяет программировать режим работы микросхемы;
P1.6-CLK контролирует тактирование передачи из микросхемы;
P1.5-W/R контролирует режим принятия и передачи данных микросхемы;
P1.4-RESET даёт возможность сбросить микросхему при возникновении ошибки в канале;
P1.3 связана с кнопкой;
P3.7-VD1 - светодиод, загорается при ошибке в канале.
Схема приведена на рисунке 1. VCC = 5В, Номиналы С1 = 10 мкФ, C2, C3 = 30 пФ, С4 = 1мкФ, С5 = 0.1 мкФ. R1 = 30 кОм, R2 = 510 Ом, R3 = 10 кОм.
Рисунок 1. Принципиальная электрическая схема системы
2. Описание модулей программы
Было принято решение разбить всю программу на несколько модулей, один из которых - основной модуль «main», содержащий в себе подпрограмму сортировки алгоритмом «пузырька», который вызывается при принятии 64 байтов (установлении бита «DATA_READY»). Также введены три модуля прерывания: при поступлении сигнала на контакт «INT_0», при поступлении сигнала на контакт «INT_1» и прерывание с последовательного порта «RS_INT».
2.1 Работа блока «main»
Работа этого блока частично описана выше: делается начальная настройка, после которой идёт ожидание становления бита готовности данных. По готовности данных, вызывается подпрограмма сортировки массива. Принимается, что байт с младшим адресом - старший, а значит, после сортировки там будет наибольший байт. Т.к. в MCS-51 нет инструкции сравнения, мы будем смотреть по знаковому биту при вычитании. Блок-схема «main» показана на рисунке 2, а блок-схема метода сортировки - на рисунке 3.
Рисунок 2. Блок-схема программы «main»
Рисунок 3. Блок-схема подпрограммы сортировки
2.2 Работа блока «INT_1»
Прерывание «INT_1» вызывается, когда микросхема посылает флаг готовности к передаче двух байт данных. После получения этого флага, в микросхеме устанавливается логическая «1» на входе W/R для смены режима приёма/передачи данных на передачу в микроконтроллер. Далее, программно тактируется вход CLK микросхемы с периодом 2 мкс для последовательной передачи 16 бит. В конце прерывания - вход W/R устанавливается в исходное положение (лог «0»). Блок-схема «INT_1» показана на рисунке 4.
Рисунок 4. Блок-схема прерывания INT_1
2.3 Работа блока «RS_INT»
Прерывание последовательного порта «RS_INT» сопровождается установкой флага RI, который говорит о заполнении буфера последовательного порта SBUF. Это прерывание должно возникать, пока действует прерывание «INT_1». Сначала определяется ячейка, куда нужно записать принятый байт. Это делается с помощью переменных, одна из которых хранит ячейку ОЗУ, где находится начало массива, а вторая - номер текущего записываемого байта. Далее, идёт запись из буфера последовательного порта в эту ячейку. При заполнении массива устанавливается бит «DATA_READY». Блок-схема «RS_INT» показана на рисунке 5.
Рисунок 5. Блок-схема прерывания RS_INT
2.4 Работа блока «INT_0»
Прерывание «INT_0» возникает, когда микросхема посылает флаг ошибки в канале. Это прерывание необходимо сделать приоритетным, т.к. от него зависит работа всей системы. Алгоритм прерывания: зажигается светодиод ошибки, ожидается нажатие на кнопку сброса. После нажатия на кнопку, подаётся лог «0» на контакт RESET микросхемы на время 1 мкс. Блок-схема «INT_0» показана на рисунке 6.
Рисунок 6. Блок-схема прерывания INT_0
3. Карта памяти системы
А. Память программ (FLASH).
Вектора прерывания - 0x0ч0x25, длина - 38 байт,
Код программы - 0x26ч0x101, длина - 220 байт,
Б. Память данных (внутреннее ОЗУ).
Регистры РОН - 0x0ч0x7, длина - 8 байт,
Переменные -0x21ч0x63, длина - 67 байт,
Битовые переменные - 0x20.0, длина - 1 бит,
Стек -0x6Aч0x7F, длина - 8 байт.
ВСЕГО:
258 bytes of CODE memory
67 bytes of DATA memory
22 bytes of IDATA memory
1 bit of BIT memory
4. Текст программ
4.1 Программа основного модуля
; тактовая частота контроллера 12 МГц
#include "ioAT89C4051.h"; файл API для AT89C4051
; МОДУЛЬ ЗАПУСКА ПРОГРАММЫ
NAME CSTARTUP
EXTERN main; метки из внешних модулей,
EXTERN INT_0; на которые есть ссылки из данного модуля
EXTERN INT_1
EXTERN RS_INT
ASEGN INTVEC:ROOT; абсолютный сегмент. в нем - таблица вызовов прерываний
CSTARTUP
ORG 0x00
JMP main; основной модуль
ORG 0x03
JMP INT_0; внешнее прерывание INT0.
JMP main; защита
ORG 0x13
JMP INT_1; внешнее прерывание INT1.
JMP main; защита
ORG 0x0B; под таймер 0 (не используем)
JMP main; защита
ORG 0x1B; под таймер 1 (не используем)
JMP main; защита
ORG 0x23
JMP RS_INT; прерывание последовательного порта.
ENDMOD; КОНЕЦ МОДУЛЯ CSTARTUP
; ОСНОВНОЙ МОДУЛЬ
NAME main ; имя модуля main
PUBLIC main ; имя этого модуля, доступное для других модулей
EXTERN RS_INT
#include "Variables.h" ; там - общие для всех модулей переменные
STACK ISTACK ; сегмент области стека
RSEG RCODE ; сегмент программного кода
main
MOV SP, #(SFB(ISTACK)); инициализация стека на начало сегмента ISTACK.
MOV IE, #00010101B ; прерывания (разрешёны прерывания ot SerBus, external_INT 0 & 1)
MOV IP, #00010001B ; приоритеты (max u INT_0 - ERR2 и "средний" у послед порта, см. RS_INT)
CLR A ; обнуляем аккумулятор
CPL A
MOV P3, A ; инициализация порта P3 (записываем число 0xFF)
MOV P1, #11011111B ; инициализация порта P1 ( все 1, кроме W/R)
MOV SCON, #00000000B ; последовательный порт - в режиме 0, с откл. приёмом REN = 0,
; частота для последовательного интерфейса - 12000/12 = 1000 кГц = 1 мкс
MOV PCON, # 00H ; при f кварца=12000, не удвоена (бит SMOD =0).
MOV TMOD, #00000000B ; таймеры выкл
MOV TCON, #00000000B ;таймеры выключены
; инициализация переменных
CLR A
MOV Rx_PTR, A ; сброс счётчика номера принятого байта
CLR DATA_READY
; данные пока не готовы (бит будет выставлен в подпрограмме RS_INT - обработки прерывания приемопередатчика)
SETB IE_EA ; разрешение прерываний
; секция основного кода
START: SETB LED_OUT ; потушили светодиод ошибки
CYC: JNB DATA_READY, CYC ; ждём, пока данные не будут готовы
CLR DATA_READY
ACALL SORT ; сортируем по убыванию
JMP CYC
; ОБЛАСТЬ ПОДПРОГРАММ ВНУТРИ МОДУЛЯ MAIN
; Сортировка
SORT:
PUSH A
PUSH PSW
MOV Rx_PTR, Buff_Size ; счётчик для количества байтов, которые надо проверить
SORT_CYC0:
MOV CNT, Buff_Size ; счётчик для проверки байта с соседним байтом
SORT_CYC1:
MOV A, #RxD_IN ; заносим в аккумулятор адрес последнего
ADD A, CNT ; байта массива
MOV r0, A ; устанавливаем указатель косвенной адресации
; сравниваем соседние байты
MOV A, @r0 ; В акк - первый сравниваемый байт
ANL A, #01111111B ; Сбрасываем знак (берем модуль)
DEC r0 ; сдвиг на 1 байт назад
MOV A, @r0 ; В акк - второй сравниваемый байт
ANL A, #01111111B ; Сбрасываем знак (берем модуль)
INC r0
SUBB A, @r0 ; вычитаем два байта
JB ACC.7, swap ; проверяем по знаку
noswap: ; всё как надо, смотрим дальше
DEC CNT ; в счётчике минус 1, когда там будет 0 - выход из цикла и функции
JNZ SORT_CYC1
JMP CYC1_stop
swap: ; не по порядку, надо поменять местами
MOV A, @r0 ; записываем то, что во втором байте в акк
DEC r0 ; возвращаемся на первый байт
MOV TMP, @r0 ; сохраняем то, что там в память
MOV @r0, A ; копируем из второго в первый
INC r0 ; идём во второй байт
MOV @r0, TMP ; копируем то, что было в первом во второй
DEC CNT ; в счётчике минус 1
JNZ SORT_CYC1
CYC1_stop:
DEC Rx_PTR
JNZ SORT_CYC0
POP PSW
POP A ; возвращаем то, что было в акк, PSW и r0
RET
4.2 Программы модулей прерываний
#include "ioAT89C4051.h" ; файл API для AT89C4051
;ПРЕРЫВАНИЕ INT0
NAME INT_0_INTERRUPT_SUBROUTINE
PUBLIC INT_0
EXTERN main
#include "Variables.h" ; там - общие для всех модулей переменные
RSEG RCODE:NOROOT
INT_0: PUSH A
PUSH PSW
CLR LED_OUT ; зажгли светодиод ошибки
BCHECK: JNB BTN, INT_0_OUT ; Проверка на нажатие
JMP BCHECK ; вечный цикл до нажатия на кнопку сброса
INT_0_OUT:
CLR RST
CALL DELAY ; Сброс с задержкой 1 мкс
SETB RST
CLR PSW
CLR A
JMP main ; Сбрасываем микроконтроллер и м/сх
DELAY:
PUSH A
MOV A, #0Ch ; 12 NOP - cчётчик для 1 мкс
D_CYC:
NOP
JNZ D_CYC
POP A
RET
ENDMOD; конец прерывания INT_0
;ПРЕРЫВАНИЕ INT1
NAME INT_1_INTERRUPT_SUBROUTINE
PUBLIC INT_1
#include "Variables.h" ; там - общие для всех модулей переменные
RSEG RCODE:NOROOT
INT_1: PUSH A ; Сохраняем в стек все,
PUSH PSW ; что будем использовать
CLR WR_switch ; защита
SETB WR_switch ; переводим м/сх в режим передачи
MOV A, #10h ; счётчик на 16 бит, что мы должны принять
INT_1_CYC:
CALL DELAY ; задержка 1 мкс в CLK
SETB REN ; включаем приём последовательного порта
CLR CLK ; ноль в CLK, смена бита
CLR REN ; выключаем приём последовательного порта,
; что б не было повторного принятия того же бита
CALL DELAY ; задержка 1 мкс в CLK
SETB CLK ; возврат CLK
DEC A
JNZ INT_1_CYC
CLR WR_switch ; переводим м/сх в режим приёма
POP PSW
POP A
RETI
DELAY:
PUSH A
MOV A, #0Ch ; 12 NOP - cчётчик для 1 мкс
D_CYC: NOP
JNZ D_CYC
POP A
RET
ENDMOD ; конец прерывания INT_1
;ПРЕРЫВАНИЕ ПОСЛЕДОВАТЕЛЬНОГО ПОРТА
NAME RS_INTERRUPT_SUBROUTINE
PUBLIC RS_INT
#include "Variables.h" ; там - общие для всех модулей переменные
RSEG RCODE:NOROOT
RS_INT:
PUSH IE ; Из пособия Intel: делаем так, что б было
; возможно прерывание от INT0 пока мы в RS_INT
MOV IE, #10000001B ; переопределяем прерывания (разрешены прерывания ot INT 0)
CALL PRIOR_SET ; сбрасываем "состояние прерывания", продолжаем работу текущего прерывания
PUSH A ; сохраняем аккумулятор в стек
PUSH PSW ; сохраняем регистр состояния процессора в стек
MOV A, #RxD_IN ; начальный адрес массива данных
ADD A, Rx_PTR ; вычисляем адрес, куда писать
MOV r0, A ; устанавливаем указатель косвенной адресации
MOV @r0, SBUF ; записываем принятый байт
CLR SCON.0 ; обнуляем бит RI (Receive Interrupt Flag)
INC Rx_PTR ; индексируем значение принятого байта
MOV A, Rx_PTR
CJNE A, #Buff_Size, RS_OUT ; проверяем на максимальное значение (A <> #Buff_Size ?) .
SETB DATA_READY ; если записали последний символ, взводим бит готовности данных
CLR A
MOV Rx_PTR, A ; и обнуляем номер символа
RS_OUT:
POP IE ; восстанавливаем исходные прерывания
POP PSW ; восстанавливаем регистр состояния процессора
POP A ; восстанавливаем аккумулятор
RET
PRIOR_SET: RETI
ENDMOD ; конец прерывания RS_INT
END
4.3 Файл, содержащий все переменные
; константы
Buff_Size EQU 64 ; размер буфера приема из последовательного интерфейса
; переопределения выводов микросхемы AT89C4051
RX_input EQU P3.0 ; (выв 02) вход последовательного интерфейса
LED_OUT EQU P3.7 ; (выв 11) выход на светодиод (горит по лог "0")
BTN EQU P1.3 ; (выв 15) вход от кнопки сброса (по лог "0")
RST EQU P1.4 ; (выв 16) выход для сброса микросхемы
WR_switch EQU P1.5 ; (выв 17) выход для смены ввода/вывода у микросхемы
CLK EQU P1.6 ; (выв 18) выход строба на м/сх ( \__/ по отр. фронту - выход данных)
PROG EQU P1.7 ; (выв 19) выход для задания режима работы микросхемы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMMON DATA_I ; сегмент данных в оперативной памяти контроллера (переменные пользователя)
; доступный всем модулям. После сброса процессора данные случайные.
; (линкер размещает его в нижней области внутренней памяти, 0x08-0x7F)
RxD_IN: DS Buff_Size ; массив размером Buff_Size, куда принимаются байты из приемопередатчика
Rx_PTR: DS 1 ; указатель номера байта, принимаемого из последовательного интерфейса
TMP: DS 1 ; хранилище для замены двух байтов местами
CNT: DS 1 ; счётчик для сравнения байта с байтом
COMMON BREG ; сегмент служебных бит (линкер размещает его в области памяти бит, 0x20-0x2F)
DATA_READY DS 1 ; если бит="1", то данные готовы (его устанавливает обработка прерывания последовательного порта)
Список литературы
1. Новиков Ю.В. Основы микропроцессорной техники. Курс лекций: Учеб. пособие / Ю.В. Новиков, П.К. Скоробогатов. - 2-е изд., испр. - М.: Интернет-Ун-т Информ. Технологий, 2004. - ISBN 5-9556-0016-7.
2. Материалы сайта microchip.com.
3. В.Н. Веприк, В.А. Афанасьев, А.И. Дружинин, А.А. Земсков, А.Р. Исаев, О.В. Малявко. Микроконтроллеры семейства MCS-51: Учебное пособие. - Новосибирск, 1997.
4. Intel Corp. MCS 51 Microcontroller Family User's Manual, 1994.
5. Электронные материалы, выдаваемые преподавателем при получении темы.
Размещено на Allbest.ru
...Подобные документы
Аппаратные принципы построения устройств микропроцессорной техники и приобретение практических навыков по разработке микропроцессорных систем. Техническая характеристика микропроцессора ATmega и анализ микросхемы памяти. Схема микропроцессорной системы.
курсовая работа [1,6 M], добавлен 19.11.2011Проект структурной схемы микропроцессорной системы управления. Блок-схема алгоритма работы МПС; создание программы, обеспечивающей его выполнение. Распределение области памяти под оперативное и постоянное запоминающие устройства. Оценка ёмкости ПЗУ и ОЗУ.
курсовая работа [467,9 K], добавлен 21.05.2015Разработка микропроцессорной системы для контроля и индикации параметров изменяющегося по случайному закону 8-ми разрядного двоичного кода. Проектирование принципиальной схемы микроконтроллера, описание работы схемы. Разработка блок-схемы программы.
курсовая работа [752,4 K], добавлен 10.01.2013Разработка микроконтроллера для контроля ритма дыхания больного в реанимационной палате. Структурная и принципиальная схемы микропроцессорного контроллера. Модули процессора, памяти, ввода и вывода, режимы индикации. Описание работы, принципиальная схема.
курсовая работа [197,6 K], добавлен 06.12.2013Создание микропроцессорной системы на базе микроконтроллера, предназначенного для функциональной диагностики цифровых и интегральных микросхем. Разработка и расчёт блоков микроконтроллера, сопряжения, управления, питания, цифровой и диодной индикации.
курсовая работа [1,5 M], добавлен 28.01.2016Общая характеристика узла системы ТУ-ТС, отвечающего за сбор и обработку сигналов, поступающих с отдельных узлов наземных радиолокационных станций. Описание принципа работы, разработка аппаратной и программной части. Расчет параметров устройства.
дипломная работа [1,6 M], добавлен 13.09.2014Разработка функциональной схемы детектора, выбор типа микропроцессорной системы. Реализация узлов управления и обработки, интерфейса RS-232, преобразователя уровней напряжения TTL/LVTTL. Расчёт частоты синхроимпульсов микроконтроллера, световой индикации.
дипломная работа [780,5 K], добавлен 26.05.2015Изучение устройства связи с датчиком и исполнительными механизмами, разработка блока памяти объёмом 80 кб. Характеристика программ, обеспечивающих выполнение заданного алгоритма и алгоритма обмена. Оценка микропроцессорной системы по аппаратным затратам.
практическая работа [154,1 K], добавлен 14.11.2011Рассмотрение аппаратных принципов построения устройств микропроцессорной техники и их программного обеспечения. Структурная схема микропроцессора К1821ВМ85А. Карта распределения адресного пространства памяти. Расчет потребляемой устройством мощности.
курсовая работа [2,4 M], добавлен 26.11.2012Процесс производства стали, способы детектирования шлака. Обзор периферийных устройств контроллера, определение режимов их работы. Разработка программного обеспечения для модуля, позволяющего применять данную плату для любой системы детектирования шлака.
дипломная работа [3,3 M], добавлен 07.07.2012Изобретение и развитие микропроцессоров. Микроконтроллеры различных типов. Принципиальная схема микропроцессорной системы. Выбор датчиков Расчет основных элементов МПС. Составление алгоритма работы схемы, программы для нее. Сборка МПС в программе Proteus.
курсовая работа [387,3 K], добавлен 25.04.2016Разработка микропроцессорной системы на основе однокристального 8-разрядного микропроцессора КР580ВМ80А. Основные характеристики системы. Формирование сигнала выбора модуля. Структура памяти, организация ввода и вывода. Программное обеспечение системы.
курсовая работа [422,5 K], добавлен 10.03.2015Критерии эффективности и обоснование выбора базисных элементов для записи отсчетов от 16 аналоговых датчиков в область памяти. Функциональная схема компьютерной системы управления железнодорожным переездом. Алгоритм работы микропроцессорной системы.
курсовая работа [1,4 M], добавлен 14.06.2016Описание алгоритма работы и разработка структурной схемы микропроцессорной системы управления. Разработка принципиальной схемы. Подключение микроконтроллера, ввод цифровых и аналоговых сигналов. Разработка блок-схемы алгоритма главной программы.
курсовая работа [3,3 M], добавлен 26.06.2016Разработка интерфейса и уточнённой структурной схемы, процессорного модуля, подсистем памяти и ввода/вывода, алгоритма программного обеспечения. Оценка памяти программ и данных. Структура адресного пространства. Организация клавиатуры и индикации.
курсовая работа [2,4 M], добавлен 09.08.2015Разработка микропроцессорной системы управления технологическим объектом. Выбор и расчет элементов системы, разработка ее программного обеспечения. Составление структурных, функциональных и принципиальных схем микроконтроллеров семейства MCS-51.
курсовая работа [579,0 K], добавлен 20.09.2012Техническая структура и программно-алгоритмическое обеспечение микропроцессорного регулирующего контроллера МПК Ремиконты Р-130. Разработка функциональной схемы контроллера для реализации автоматической системы регулирования. Схема внешних соединений.
контрольная работа [403,6 K], добавлен 18.02.2013Разработка адаптера аналого-цифрового преобразователя и активного фильтра низких частот. Дискретизация, квантование, кодирование как процессы преобразования сигналов для микропроцессорной секции. Алгоритм работы устройства и его электрическая схема.
реферат [847,2 K], добавлен 29.01.2011Анализ вариантов подключения и построения контроллеров индикации на PIC микроконтроллерах. Проектирование модулей системной шины ISA. Разработка обобщенной схемы модуля. Методы построения алгоритмов инициализации и управления, разработка программы.
курсовая работа [574,7 K], добавлен 04.09.2012Функциональная спецификация и структурная схема автомобильных вольтметра-термометра-часов. Описание ресурсов микроконтроллера, назначение выводов микросхемы. Ассемблирование и разработка алгоритма работы, коды кнопок и описание команд управления.
курсовая работа [2,0 M], добавлен 27.12.2009