zaeto.ru

Курсовая работа по дисциплине "Микропроцессорные системы"

Другое
Экономика
Финансы
Маркетинг
Астрономия
География
Туризм
Биология
История
Информатика
Культура
Математика
Физика
Философия
Химия
Банк
Право
Военное дело
Бухгалтерия
Журналистика
Спорт
Психология
Литература
Музыка
Медицина
добавить свой файл
 

 
страница 1




Московский государственный институт электроники и математики

Кафедра ИКТ


Курсовая работа

по дисциплине “Микропроцессорные системы”

(Вариант 8)


Выполнили: студенты группы С-84

Овсиенко А.Ю.

Бобылева А.А.

Проверил:

Гудков Ю. И.

Москва 2008

Аннотация


В курсовой работе разрабатывается драйвер для джостика.

Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.




Оглавление

Аннотация 3

1. Техническое задание 5

2.Анализ технического задания 5

3. Алгоритм основной программы 5

4. Алгоритм размещения символа в буфере для вывода 7

5. Исходный код 7





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. Алгоритм размещения символа в буфере для вывода



5. Исходный код


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


6. Выводы

В курсовой работе запрограммирован микроконтроллер 51 серии на вывод времени, соответсвующего положению джостика. Использованы прерывания от com порта и таймера T2.



7. Список литературы:

  1. Конспект лекций и семинаров по дисциплине “Микропроцессорные системы”.

  2. Описание команд 8051.


страница 1


Смотрите также:





     

скачать файл




 



 

 
 

 

 
   E-mail:
   © zaeto.ru, 2019