Читайте также:
|
|
на тему:
Виконала:
ст. групи ТК-32
Мартинишин Галина
Перевірив:
Думич С. С.
Львів 2013
Мета: Освоїти методи передачі інформачії чарез послідовний канал зв'язку.
Теоретичні відомості.
Мікроконтролери сімейст-
ва 80С51 містять апаратно реалізований УАПП (універсаль-
ний асинхронний приймач передавач). Більшість його режимів роботи сумісна з стандартом RS232. В УАПП “1” передається папругою +5В, а “0” напругою 0В. Тобто рівнями TTL.
В стандарті RS232 “1” передається папругою-2,4...-24В, а “0” напругою +2,4...+24В. Тому в макеті викаристаний перетворювач рівнів ІМС НС232.
Передавати дані можна трьома способами:
1. По одному байту, записавши його у вигляді символа або шіснадцяткового числа, і натиснувши відповідну кнопку: “Відправити байт (CHAR)” або “Відправити (HEX)”.
2. У вигляді послідовності байт записаних у вигляді символів, і натиснувши кнопку “Відправити рядок”. В мікроконтролері їх можна розпізнавати командою cjne a, #’x’, m1
3. Цілий файл, записавши його ім’я у відповідному місці і натиснувши кнопку “Відправити файл” (не рекомендується відправляти дуже великі файли).
Приймати дані можна двома способами:
1. На екран, встановивши “галочку” “Виводити на екран”.
2. Або зберігати поступаючі дані в файл записавши його ім’я у відповідне вікно і натиснувши кнопку “Виводити”. Якщо кнопка при натисканні змінила свою назву на “Завершити вивід”, то програма готова зберігати поступаючі дані.
Код програми:
;------------------------------- Визначання констант -------------------------
bank0 EQU 00000000B; Коди банків пам’яті
bank1 EQU 00001000B
bank2 EQU 00010000B
bank3 EQU 00011000B
exe1 EQU 00h; оголошення констант
exe2 EQU 01h
exe3 EQU 02h
exe4 Equ 03h
randh equ 30h
randl equ 31h
cnt equ r5
;#########################################################
;## Сегмент даних ##
;#########################################################
;------------------------- Резервування пам’яті --------------------------------
DSEG
ORG 20H; Бітовий простір
ORG 30h
ORG 60H; Початок стеку
Stack: DS 20H; Глибина стеку
;##########################################################
;## Сегмент команд ##
;##########################################################
CSEG
ORG 0000H; Починаємо програму з нульового адресу
jmp start; Отсюда стартует программа после включения/сброса
ORG 0003H
reti; Заглушка на вектор зовнішнього переривання INT0
ORG 000BH
reti; Заглушка на вектор переривання від таймера 0
ORG 0013H
reti; Заглушка на вектор зовнішнього переривання INT1
ORG 001BH
reti; Заглушка на вектор переривання від таймера 0
ORG 0023H
reti; Заглушка на вектор переривання від UART
; ----------------------------------- Ініціалізація ---------------------------------
ORG 0030H
Start:
mov sp, #(stack-1); Встановлення вершини стеку
mov p0,#11111111B; встановлення портів
mov p1,#11111111B
mov p2,#11111111B
mov p3,#11111111B
mov TMOD, #00100000b; ініціалізація
mov IE, #00000000b
mov TH0, #0feh; встановлення швидкості (9600)
mov TH1, #0feh
mov A, SBUF
mov SCON, #01010000b
setb TR1
mov cnt,#00
mov DPTR,#0A006h
clr exe1; очистка exe1(початковий стан)
clr exe2
clr exe3
;##########################################################
;## Основний цикл прграми ##
;##########################################################
main:
jnb RI, exec ;якщо не встановлено RI то переходимо на exec
clr RI ;очищаємо RI
mov A, SBUF
cjne A, #'1', next1; перевіряємо чи не введено символ «1»
setb exe1; встановлємо біт в exe1
clr exe2; занулюємо exe2 та exe3
clr exe3
mov A,#05; заносимо 5 в А (дві лампочки)
jmp exec; перехід на exec
next1:
cjne A, #'2', next2; перевіряємо чи не введено «2»
clr exe1; занулюємо exe1 та exe3
setb exe2; встановлємо біт в exe1
clr exe3
mov A, #01; записуємо 1 в А (одна лампочка)
jmp exec; перехід на exec
next2:
cjne A, #'3', next3; перевіряємо чи не введено «3» і в разі не
виконання умови – перехід на мітку next3
clr exe1; занулюємо exe1 та exe2
clr exe2
setb exe3; встановлємо біт в exe1
mov A, #01
jmp exec; перехід на exec
next3:
cjne A,#'4', next4; перевіряємо чи не введено «4»
clr exe1; занулюємо exe1, exe2 та exe3
clr exe2
clr exe3
clr A; очищаємо акумулятор
movx @DPTR, A; заносимо дані з А по адресу @DPTR
jmp main; перехід на main
next4:
mov a,#'?'; якщо не введено символу 1 – 4 то
виводимо «?»
call write; виклик підпрограми write
jmp main; перехід на main
exec:
jnb exe1, enext1; якщо exe1 не встановлено то
переходимо далі на мітку enext1
rr A; зсуваємо вміст А вправо (для імітації
руху лампочок)
movx @DPTR,A; заносимо дані з А по адресу @DPTR call delay; викликаємо підпрограмку затримки
Дата добавления: 2015-09-10; просмотров: 90 | Поможем написать вашу работу | Нарушение авторских прав |