Московский государственный институт электроники и математики
Кафедра ИКТ
Курсовая работа
по дисциплине “Микропроцессорные системы”
(Вариант 8)
Выполнили: студенты группы С-84
Овсиенко А.Ю.
Бобылева А.А.
Проверил:
Гудков Ю. И.
Москва 2008
Аннотация В курсовой работе разрабатывается драйвер для джостика.
Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.
Оглавление
Аннотация 3
1. Техническое задание 5
2.Анализ технического задания 5
3. Алгоритм основной программы 5
4. Алгоритмы обработчиков прерываний 6
4.1 Алгоритм обработчика прерываний от таймера T2 6
5. Алгоритм размещения символа в буфере для вывода 6
6. Исходный код 6
1. Техническое задание Реализовать с помощью системы прерываний: Ввод: изменение положения джостика. 8 состояний Вывод:Иммитация циферблата часов, пассивное состояние «OFF». 2.Анализ технического задания В соответствии с техническим заданием устройство должно выполнять: - прием сигнала с джостика - вывод времени соответсвующего положению на циферблате Прием сигнала с джостика реализуется с помощью прерываний от таймера T2 и определения положения в обработчике данных прерываний. Вывод времени реализуется с помощью прерываний от com порта (бит TI). Основная программа инициализирует прерывания от com порта и таймера T2, после чего ожидает любого из перечисленных прерываний. Соответствие битов порта P1 и контактов джостика: -
12:00
| 3:00
| P1.0
| 9:00
| 6:00
| P1.5
| P1.1
| P1.4
|
| Остальные положения являются одновременным замыканием 2-х контактов. 3. Алгоритм основной программы  4. Алгоритмы обработчиков прерываний 4.1 Алгоритм обработчика прерываний от таймера T2  gif">
5. Алгоритм размещения символа в буфере для вывода

6. Исходный код org 8000h
ljmp MAIN org 8023h
ljmp COM_PORT_HANDLER org 8033h; P1.0
ljmp HNDL_P1 org 803Bh; P1.1
ljmp HNDL_P1 org 8043h; P1.2
ljmp HNDL_P1 org 804Bh; P1.3
ljmp HNDL_P1 MAIN:
clr TI
clr RI
TM2IR equ 0C8h;interrupt flag register IEN1 equ 0E8h;T2 interrupt enable register;
TM2CON equ 0EAh;T2 config register;
IP1 equ 0F8h ;interrupt priority
CTCON equ 0EBh; capture control
mov IEN1, #0Fh
mov CTCON, #10101010b ;falling 0-3 bits in P1 if interupt occured
mov TM2CON, #00000011b; Timer T2 mode select ;;;;;?
mov IP1, #00h
mov P1, #0Fh
setb IE.7 ;enable interrupt
setb IE.4 ;enable interrupt from COM - por ptr_buf equ 60H ;buf for OUT_FUNCput
buf_size equ 59H ;sizeof(buf)
symbol equ 58H ; symbol for OUT_FUNCput
var_curr_ind equ 57H; current index in buf
var_next_ind equ 56H; index for shift
mov buf_size, #0h ;init buf_size
mov symbol, #0h ;init symbol(no symbol for OUT_FUNC) LOOP:
nop
jmp LOOP
ret
SHIFT_BUF:; shift buf ptr_buf+1; *ptr_buf=symbol
mov A, buf_size
jz RETURN_SHIFT
;mov var_next_ind, buf_size
mov R3, buf_size ;for
LOOP_SHIFT:
mov var_next_ind, R3
mov A, var_next_ind
dec A
mov var_curr_ind, A
mov A, #ptr_buf
add A, var_next_ind
mov var_next_ind, A ;valid shift addr
mov A, #ptr_buf
add A, var_curr_ind
mov var_curr_ind, A ;valid current addr
mov R0, var_curr_ind
mov A, @R0 ;mov to A value from current addr
mov R0, var_next_ind
mov @R0, A
djnz R3, LOOP_SHIFT
RETURN_SHIFT:
ret PUT_SYMBOL_IN_BUF:
call SHIFT_BUF
inc buf_size
mov ptr_buf, symbol
;mov symbol, #0h
ret OUT_FUNC:
mov A, symbol
jz FUNC_PROCESS
call PUT_SYMBOL_IN_BUF
FUNC_PROCESS:
mov A, buf_size
jz RETURN_OUT; if(!buf_size){return;}
dec A
mov var_next_ind, #ptr_buf
add A, var_next_ind
mov R0, A ;last addr in R0
mov A, @R0
dec buf_size
clr TI
mov SBUF, A
mov symbol, #0h ;no symbol for OUT_FUNC
RETURN_OUT:
ret
DELAY_PRESS:
mov r7,#0fh
DEL_1:
mov r6, #0FFh
DEL_2:
nop
djnz r6, DEL_2
djnz r7, DEL_1
ret HNDL_P1:
mov TM2IR, #00h
begin_1:
k2: mov P1, #0DFh
jnb P1.0, check1
jnb P1.1, check1
jnb P1.4, check1
k1: mov P1, #0FEh
jnb P1.1, check
jnb P1.4, check
jnb P1.5, check
jmp begin_1
logic: mov A, P1
cjne A, #0FCh, b1
call n0
b1: cjne A, #0ECh, b2
call ne0
b2: cjne A, #0EEh, b3
call e0
b3: cjne A, #0CEh, b4
call se0
b4: cjne A, #0CFh, b5
call s0
b5: cjne A, #0CDh, b6
call sw0
b6: cjne A, #0DDh, b7
call w0
b7: cjne A, #0DCh, begin_1
call nw0 check:
call SLEEP
jnb P1.1, logic
jnb P1.4, logic
jnb P1.5, logic
jmp begin_1 check1:
call SLEEP
jnb P1.0, logic
jnb P1.1, logic
jnb P1.4, logic
t2: nop
jmp begin_1 fgh: mov A, #0DFh
cjne A, P1, fgk
call off
fgk: mov A, #0FEh
cjne A, P1, t2
call off
jmp t2 off: mov symbol, #'O'
call OUT_FUNC
mov symbol, #'F'
call OUT_FUNC
mov symbol, #'F'
call OUT_FUNC
call crlf
ret crlf: mov symbol, #20h
call OUT_FUNC
mov symbol, #0ah
call OUT_FUNC
ret n0: mov symbol, #'1'
call OUT_FUNC
n1: mov symbol, #'2'
call OUT_FUNC
n2: mov symbol, #':'
call OUT_FUNC
n3: mov symbol, #'0'
call OUT_FUNC
n4: mov symbol, #'0'
call OUT_FUNC
call crlf
n6: jnb P1.1, n5
call fgh
n5: jnb P1.4, t2
jmp n8
n8: jnb P1.5, t2
jmp n6 nw0: mov symbol, #'1'
call OUT_FUNC
nw1: mov symbol, #'0'
call OUT_FUNC
nw2: mov symbol, #':'
call OUT_FUNC
nw3: mov symbol, #'3'
call OUT_FUNC
nw4: mov symbol, #'0'
call OUT_FUNC
call crlf
nw6: jnb P1.0, nw5
call fgh
nw5: jnb P1.5, nw7
call fgh
nw7: jnb P1.1, nw6
call fgh t3: nop
jmp t2 ne0: mov symbol, #'0'
call OUT_FUNC
ne1: mov symbol, #'1'
call OUT_FUNC
ne2: mov symbol, #':'
call OUT_FUNC
ne3: mov symbol, #'3'
call OUT_FUNC
ne4: mov symbol, #'0'
call OUT_FUNC
call crlf
ne6: jnb P1.0, ne5
call fgh
ne5: jnb P1.1, ne7
call fgh
ne7: jnb P1.4, ne6
call fgh s0: mov symbol, #'0'
call OUT_FUNC
s1: mov symbol, #'6'
call OUT_FUNC
s2: mov symbol, #':'
call OUT_FUNC
s3: mov symbol, #'0'
call OUT_FUNC
s4: mov symbol, #'0'
call OUT_FUNC
call crlf
s6: jnb P1.4, s5
call fgh
s5: jnb P1.5, s7
call fgh
s7: jnb P1.1, t3
jmp s8
s8: jnb P1.0, t3
jmp s6 sw0: mov symbol, #'0'
call OUT_FUNC
sw1: mov symbol, #'7'
call OUT_FUNC
sw2: mov symbol, #':'
call OUT_FUNC
sw3: mov symbol, #'3'
call OUT_FUNC
sw4: mov symbol, #'0'
call OUT_FUNC
call crlf
sw6: jnb P1.1, sw5
call fgh
sw5: jnb P1.5, sw7
call fgh
sw7: jnb P1.4, sw6
call fgh se0: mov symbol, #'0'
call OUT_FUNC
se1: mov symbol, #'4'
call OUT_FUNC
se2: mov symbol, #':'
call OUT_FUNC
se3: mov symbol, #'3'
call OUT_FUNC
se4: mov symbol, #'0'
call OUT_FUNC
call crlf
se6: jnb P1.0, se5
call fgh
se5: jnb P1.5, se7
call fgh
se7: jnb P1.4, se6
call fgh t4: nop
jmp t3 e0: mov symbol, #'0'
call OUT_FUNC
e1: mov symbol, #'3'
call OUT_FUNC
e2: mov symbol, #':'
call OUT_FUNC
e3: mov symbol, #'0'
call OUT_FUNC
e4: mov symbol, #'0'
call OUT_FUNC
call crlf
e6: jnb P1.0, e5
call fgh
e5: jnb P1.4, e7
call fgh
e7: jnb P1.1, t4
jmp e8
e8: jnb P1.5, t4
jmp e6 w0: mov symbol, #'0'
call OUT_FUNC
w1: mov symbol, #'9'
call OUT_FUNC
w2: mov symbol, #':'
call OUT_FUNC
w3: mov symbol, #'0'
call OUT_FUNC
w4: mov symbol, #'0'
call OUT_FUNC
call crlf
w6: jnb P1.1, w5
call fgh
w5: jnb P1.5, w7
call fgh
w7: jnb P1.0, t4
jmp w8
w8: jnb P1.4, t4
jmp w6
mov P1, #0Fh
reti
COM_PORT_HANDLER:
mov A, buf_size
jnz OUT_COM
clr TI
OUT_COM:
call OUT_FUNC
reti
SLEEP: mov R5, #200
SLEEP1: nop
djnz R5, SLEEP1
ret end
7. Выводы
В курсовой работе запрограммирован микроконтроллер 51 серии на вывод времени, соответсвующего положению джостика. Использованы прерывания от com порта и таймера T2.
8. Список литературы:
Конспект лекций и семинаров по дисциплине “Микропроцессорные системы”.
Описание команд 8051.
|