Вывод
|
Название
|
Назначение
|
9
|
VDD
|
Напряжение
питания
|
10
|
VSS
|
Напряжение
0В
|
20
|
|
Сброс
|
19
|
|
Управление
запросом на аппаратное прерывание
|
3-8
|
PB5-PB0
|
Шестибитный
параллельный порт
|
11-18
|
PA7-PA0
|
Восьмибитный
параллельный порт ввода-вывода.
|
1,
2
|
OSC1,
OSC2
|
Р32
- защита от перегрузок по току
|
3.2 Микросхема МС145407
кремниевая, КМОП - микросхема (КМОП -
комплементарная логика на транзисторах металл-оксид-полупроводник). В
технологии КМОП используются полевые транзисторы с изолированным затвором с
каналами разной проводимости. Отличительной особенностью схем КМОП по сравнению
с биполярными технологиями является очень малое энергопотребление в статическом
режиме (в большинстве случаев можно считать, что энергия потребляется только во
время переключения состояний).- интерфейсный приемопередатчик последовательных
данных стандартов EIA/TIA-232E и CCITT V.28 с напряжением питания +5В.
Микросхема содержит 3 передатчика и 3 приемника последовательных данных
стандарта RS-232.
При разработке интерфейсных микросхем основными
критериями являлось минимальное энергопотребление и максимальная экономия места
на печатной плате. Поэтому практически сразу же пришлось отказаться от
стандартных микросхем приемопередатчиков RS-232, требующих использования трех
различных источников питания +5 В и ±12 В.
На первом этапе для питания микросхем стал
использоваться один источник питания +5 В. А поскольку для соответствия
стандарту RS-232 необходимо обеспечить размах выходного сигнала порядка ±7 В,
то в состав микросхемы вошли удвоитель напряжения и инвертор на переключаемых
конденсаторах. Теперь для питания микросхемы стало достаточно подвести только
+5 В и установить 4 конденсатора номиналом по 1 мкФ.обеспечивает высокую
производительность и низкое энергопотребление. На рисунках 3.2, 3.3 и 3.4
изображены схемы основных элементов MC145407. На рисунке 3.5. представлено
назначение контактов микросхемы.
Рисунок 3.2. Схема преобразования напряжения
питания
Рисунок 3.3. Схема приемника (*Схема защиты)
Рисунок 3.4. Схема передатчика
Рисунок 3.5. Назначение контактов микросхемы
MC145407
.3 Микросхема MC34064
Запоминающие устройства (ОЗУ) с аварийным батарейным
питанием;
Средства защиты от неправильного
функционирования микропроцессорной системы при включениях/выключениях питания;
Средства защиты от неправильного
функционирования микропроцессорной системы в результате случайных перебоев
подачи питания.
Как компонент средств установки в исходное
состояние микропроцессорного оборудования: персональных компьютеров, принтеров,
видеомагнитофонов, автомобильных контролеров и др.
На рисунке 3.6 представлена блок-схема MC34064.
Микросхема имеет 3 вывода: 1 - сброс; 2 - вход (подключается к источнику
питания); 3 - земля.
Рисунок 3.6. Блок-схема MC34064
Особенности микросхемы:
Компаратор с температурно-компенсированным
порогом и гистерезисом, для предотвращения неустойчивости в пороговой зоне;
Порог срабатывания компаратора 4.6+/-0.1В
гарантируется в полном рабочем диапазоне температур;
Напряжение гистерезиса 20 мВ;
Нагрузочная способность выхода Reset на
втекающий ток не менее 10 мА;
Гарантия правильной работы сигнала Reset при входном
напряжении начиная с 1 В;
Внутренний защитный диод для разряда
конденсатора задержки;
Низкий ток потребления в режиме ожидания.
4. Анализ работы устройства
.1 Структурная схема устройства
Структурная схема контроллера управления
последовательным портом приведена на рисунке 4.1. Она состоит из 5 основных
блоков.
Рисунок 4.1. Структурная схема контроллера
Центральным элементом схемы управления
последовательным портом является однократно программируемый контроллер
MC68HC705J1A (Motorola). Напрямую контроллер подключать к com-порту, конечно
же, нельзя. Для сопряжения используют микросхему MC145407, представляющую собой
интерфейсный приемопередатчик последовательных данных стандартов EIA/TIA-232E и
CCITT V.28. Сигнальные линии соединяются крест-накрест, то есть RxD МК на TxD
ИС, а RxD ИС на TxD МК. Шлейф (Flat Ribbon Cable) соединяет MC145407 с
последовательным портом.
Детектор понижения напряжения MC34064 был
использован, чтобы показать самую надежную схему сброса. ИС формирует сигнал
Reset при понижении напряжения питания до 4.5-4.7В. Это обеспечивает защиту от
медленного линейного изменения питания. Когда напряжение питание опускается
ниже этого уровня, CPU может начать выполнять некоторые инструкции неправильно.
В результате могут происходить не запланированные процессы во внутренней памяти
и на линиях управления. Это может привести к повреждению информации в регистрах
CPU, I/O регистрах и в памяти данных. Детектор обеспечивает защиту от провалов
напряжения ("Brown-Outs" - когда напряжение питания ниже допустимого
уровня, или "Black-Outs" - когда на какое-то время оно полностью
пропадает).
Кварцевый генератор с частотой 4 МГц тактирует
микроконтроллер.
Если присутствует шум или произошла ошибка кадра
во время приема символа, горят соответствующие светодиоды (LED1 и LED2),
сигнализируя об ошибке.
.2 Описание программного обеспечения
Блок-схема управления приведена в приложении В,
а фактический ассемблерный код - в приложении Г.
Программное обеспечение SCI состоит из двух
основных подпрограмм, которые вызываются главной программой. Процедура приема
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Г
|
2
|
VT1
|
КТ361Г
|
3
|
|
Микросхемы
|
|
U1,
|
PIC16F84
|
1
|
U1,
|
74247
|
1
|
U1,
|
7401
|
1
|
|
Диод
|
|
VD1,
VD2, VD3, VD4
|
КД522
|
4
|
Приложение В
На рисунках В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 LED's.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 ; don't check for noise
--
; it's 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
* 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 *
* (no noise). *
* stack used - 2 bytes *
* variables used - char: storage for
received data (1 byte) *
* count: temporary storage (1 byte)
*
* ROM used - 63 bytes *_char lda #8
;[2] receiving 8 data bits
sta count ;[4] store value into RAM
clrx ;[3] used to store noise data_start_bit
brclr rxd,serial_port,* ;[5] wait until rxd=1
brset rxd,serial_port,* ;[5] wait
for start bit
lda #BAUD_SEL-3 ;[2] prepare for 1/2
bit delay
bsr delay_13a ;[13a+12] execute
delay routine
bsr get_bit ;[39] sample start bit
lsra ;[3] noise bit -> carry;
; acc=filtered start bit
bne get_start_bit ;[3] if false
start, start over
tsta ;[3] for timing purposes only
tsta ;[3] for timing purposes only
lda #2*(BAUD_SEL-2) ;[2] prepare for
1 bit delay
bsr delay_13a ;[13a+12] execute delay
routine_data_bits bsr get_bit ;[39] sample data bit
rora ;[3] noise bit -> carry
rorx ;[3] carry -> noise data reg
rora ;[3] filtered data bit ->
carry
ror char ;[5] carry -> char
lda #2*(BAUD_SEL-3) ;[2] prepare for
1 bit delay
bsr delay_13a ;[13a+12] execute
delay routine
tsta ;[3] for timing purposes only
dec count ;[5] bit received, dec
count
bne get_data_bits ;[3] loop if more
bits to get_stop_bit bsr get_bit ;[39] sample stop bit
lsra ;[3] noise bit -> carry
; acc=filtered stop bit
sta count ;[4] store stop bit in
count
bcc yes_noise ;[3] if noise, then
branch
txa ;[2] noise data -> acc
eor char ;[3] XOR noise with char,
beq no_noise ;[3] and if result=0,
; then no noise in data
; reception_noise lda #$08 ;[2] set
noise bit (half carry)
add #$08 ;[2] by adding $8 to
$8_noise lda count ;[3] retrieve stop data bit,
coma ;[3] complement it,
lsra ;[3] and shift it into carry
; for frame error bit
rts ;[6] exit (get_char)
*****************************************************************************
******************************************************************************
* get_bit - receive one bit of
filtered data and noise info; called by *
* get_char *
* *
* input cond. - RXD pin defined as
an input pin *
* stack used - 0 bytes *
* variables used - none *
* ROM used - 17 bytes *
******************************************************************************_bit
clra ;[3] used to add sampled bits
brset rxd,serial_port,samp_1 ;[5]
sample 1st bit into carry_1 adc #0 ;[3] add it to acc
brset rxd,serial_port,samp_2 ;[5]
sample 2nd bit into carry_2 adc #0 ;[3] add it to acc
brset rxd,serial_port,samp_3 ;[5]
sample 3rd bit into carry_3 adc #0 ;[3] add it to acc
rts ;[6] exit (get_bit)
* put_char - transmit data byte in
char out onto TXD pin; called by main *
* *
* input cond. - TXD pin defined as
an output pin and TXD = 1; *
* char contains byte to be
tranmitted. *
* output cond. - X,ACC,char =
undefined; *
* stack used - 2 bytes *
* variables used - char: storage for
transmitted data (1 byte) *
* ROM used - 31 bytes (35 if sending
two stop bits) *
*****************************************************************************_char
ldx #9 ;[2] be sending 8 data bits
clc ;[2] clear carry for start
bit_data_bits bcc send_0 ;[3] if carry<>0, then
bset txd,serial_port ;[5] send out a
1
bra jmp_bit ;[3] finished sending a
1_0 bclr txd,serial_port ;[5] else send a 0
bra jmp_bit ;[3] finished sending a
0_bit lda #2*(BAUD_SEL-1)-1 ;[2] prepare for a 1 bit delay
bsr delay_13a ;[13a+12] execute
delay routine
tsta ;[3] for timing purposes only
ror char ;[5] get next data bit to
send
decx ;[3] one bit sent, so dec count
bne put_data_bits ;[3] loop if more
bits to send_stop_bit nop ;[2] for timing purposes only
bset txd,serial_port ;[5] send out a
one
lda #2*(BAUD_SEL-1) ;[2] prepare for
a 1 bit delay
bsr delay_13a ;[13a+12] execute
delay routine
* add the next two lines to
guarantee sending two stop bits:
* lda #2*(BAUD_SEL-1)+1 ;[2] prepare
for a 1 bit delay
* bsr delay_13a ;[13a+12] execute
delay routine
rts ;[6] exit (put_char)
* delay_13a - delay for 13*ACC + 12
cycles; called by get_char and put_char *
* *
* input cond. - ACC set to
appropriate value (13*ACC + 12 cycles) *
* output cond. - ACC = 0 *
* stack used - 0 bytes *
* variables used - none *
* ROM used - 7 bytes *
******************************************************************************_13a
nop ;[2] this is a 13-cycle loop
nop ;[2]
tsta ;[3]
deca ;[3] decrement loop count
bne delay_13a ;[3] loop if count not
zero
rts ;[6] exit (delay_13a)
******************************************************************************
* *
* Interrupt and Reset vectors for
Main Routine *
* *
******************************************************************************
org RESET
fdb main