Разработка контроллера управления последовательным портом

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

ются главной программой. Процедура приема get_char получает один байт данных по линии приема данных (RXD) и помещает его в тип char. Процедура get_char вызывает подпрограмму get_bit, которая фиксирует три значения состояния RXD, из которых получают бит данных и информацию о наличии шума. При выходе из get_char, если не все три значения при приеме любого из битов кадра совпали, то устанавливается флаг наличия шума NE=1; в противном случае он будет обнулен. Если оказалось, что на месте стопового бита обнаружен сигнал логического нуля, то произошла ошибка кадра (FE=1). Если шум или кадр ошибки присутствуют во время приема символа, то загораются соответствующие светодиоды, сигнализируя об ошибке.

Процедура передачи put_char передает последовательно содержание char, используя линию передачи данных (TXD).

Обе процедуры get_char и put_char вызывают delay_13a, подпрограмму, которая производит задержку 13 * ACC + 12 циклов ЦП, где ACC - это значение в накапливающем сумматоре во время вызова подпрограммы delay_13a.

Скорость передачи данных как для приемника, так и для передатчика выбирается путем изменения BAUD_SEL на 4, 8, 16, 32, 64 или 128, который совместно с кварцевым генератором с частотой 4 МГц дает скорость 19200, 9600, 4800, 2400 , 1200 и 600 бод соответственно. Скорость передачи данных для приемника и передатчика будет та же самая. Приложение D определяет допуск приемника и точность передатчика для каждой скорости.

 

интерфейс микросхема контроллер порт

Заключение

 

В ходе курсовой работы был детально изучен контроллер управления последовательным портом. Основным элементом, координирующим работу всех узлов схемы, является микроконтроллер МС68HC705J1A. Данный МК не имеет последовательных портов.

Поэтому в устройстве применяется программная эмуляция последовательной передачи данных SCI через выводы параллельных двунаправленных портов. Этот вариант схемы довольно дешёв, поскольку используется самый простой МК фирмы Motorola. Эта особенность позволяет использовать её повсеместно. Программная эмуляция интерфейса SCI предлагают разработчику приложений альтернативу использования аппаратных SCI.

 

 

Библиографический список

 

1. Ремизевич Т.В. Микроконтроллеры для встраиваемых приложений: от общих подходов - к семействам НС05 и НС08 фирмы Motorola/под ред. Кирюхина И.С. ДОДЭКА, 2000. - 272 с.

. Шагурин И.И. Микропроцессоры и микроконтроллеры фирмы Motorola. Справочное пособие. М.: Радио и связь. 1998. 560с.

 

 

Приложение А

 

Приложение Б

 

ОбозначениеНаименованиеколКонденсаторС1,С2К50-16 100 Мкф +\- 10%2ТранзисторыVT2,VT3КТ315Г2VT1КТ361Г3МикросхемыU1,PIC16F841U1,742471U1,74011ДиодVD1, VD2, VD3, VD4КД5224

 

Приложение В

 

На рисунках В1, В2, В3,В4 представлены блок-схемы основной программы Main, подпрограммы Put_Char , подпрограммы GET_CHAR и подпрограммы GET_BIT соответственно.

 

Рисунок В1. Блок-схема программы Main

Рисунок В2 - Блок схема программы PUT_CHAR

На рисунке B3 - Блок схема подпрограмма GET_CHAR

 

На рисунке В4 - схема подпрограммы GET_BIT

 

 

Приложение Г

 

Main Routine SCI_01 - SCI Software Transmit/Receive Routines *

* *

*****************************************************************************

* *

* File Name: SCI_01.RTN Copyright (c) Motorola 1995 *

* *

* Full Functional Description of Routine Design: *

* Program flow: *

* Reset: Call init to initialize port pins *

* Call get_char to receive a byte of data *

* Light frame error LED if frame error occurred *

* Light noise LED if frame error occurred *

* Call put_char to transmit the received byte of data *

* Loop back to get_char call (endless loop) *

* *

*****************************************************************************

* *

* Part Specific Framework Includes Section *

* *

*****************************************************************************

#INCLUDE H705J1A.FRK ; Include the equates for the

; HC705J1A so all labels can

; be found.

MOR Bytes Definitions for the Main Routine *

* *

*****************************************************************************

org MOR

fcb $20

******************************************************************************

* *

* Equates and RAM Storage *

* *

******************************************************************************

*** I/O Pin Equates:_port equ $01 ; port used for serial port

; pins_port equ $00 ; port used for driving LEDs.equ 4 ; pin # for noise LEDequ 5 ; pin # for frame LEDequ 0 ; pin # for receive data pinequ 1 ; pin # for transmit data pin

*** Program Constant Equates: ; Baud rate select table:_SEL equ $08 ; BAUD_SEL 4MHz osc 2MHz osc

; $04 19.2k 9600

; $08 9600 4800

; $10 4800 2400

; $20 2400 1200

; $40 1200 600

; $80 600 300

*** RAM variable allocation:

org RAMrmb 1 ; data register for scirmb 1 ; temp storage variable* main - example program that continually echoes back received characters. *

* *

* input cond. - reset *

* output cond. - none (infinite loop) *

* stack used - 4 bytes *

* variables used - none *

* ROM used - 28 bytes *

*****************************************************************************

org ROM ; start at the top of ROMrsp ; reset the stack pointer

jsr init ; initialize port pins_loop jsr get_char ; receive one byte of data

; from rxd pin

bcc no_frame_error ; branch if no noise occured

bclr frame,status_port ; turn on frame LED

bra continue ; dont check for noise --

; its undefined_frame_err bset frame,status_port ; turn off frame LED

bhcs noise_error ; branch if noise occured

bset noise,status_port ; turn off noise LED

bra continue ; skip next line of code_noise_err bclr noise,status_port ; turn on noise LEDjsr put_char ; transmit the received byte

bra main_loop ; and prepare for next

; reception.

* init - initialize port pins for sci operation and for driving LEDs; *

* called by main *

* *

* input cond. - none *

* output cond. - TXD = output initialize to 1, RXD = input, noise LED = *

* off, frame LED = off. *

* stack used - 0 bytes *

* variables used - none *

* ROM used - 15 bytes *

******************************************************************************bset txd,serial_port ; init txd = 1

bset txd,serial_port+4 ; txd = output

bclr rxd,serial_port+4 ; rxd = input

bset noise,status_port ; noise LED = off

bset noise,status_port+4 ; noise = output

bset frame,status_port ; frame LED = off

bset frame,status_port+4 ; frame = output

rts ; exit (init)

******************************************************************************

* get_char - receive one byte of data from RXD pin; called by main *

* *

* input cond. - RXD pin defined as an input pin * output cond. - char contains received data; X,ACC undefined; *

* half carry = 1 (frame occured) or 0 (no frame error); *

* carry = 1 (noise and/or frame error occured) or 0 *

*