Реферат по предмету "Информатика, программирование"


Счетчик обратного отсчета

/>/>Кафедраэлектронно-вычислительной аппаратуры
Курсоваяработа по дисциплине
«Микропроцессорныесистемы»Тема “Счетчик обратного отсчета”
Москва – 2007
Оглавление
Техническоезадание
Описаниеработы программы
Текст программы
Техническоезадание
Разработать программу наязыке Assembler, отсчитывающую время от заданногозначения до 0. Значение может быть от 0001 до 9999.
2 режима работы:
1) режим установкизначения
2) режим отсчета
Ввод необходимоосуществлять с помощью стандартной шестнадцатикнопочной терминальнойклавиатуры. Переход в режим установки времени необходимо осуществлять нажатиемклавиши.Выход из режима установки времени должен происходить автоматически по окончанииввода значений всех регистров.Описаниеработы программы Логикапостроения программы
Исходя из ТЗ сформируемследующую блок-схему работы основной программы:
/>
Устройства ввода
Для ввода данныхиспользуется стандартная шестнадцатикнопочная клавиатура, подключаемая кпараллельному порту (P1).Она имеет следующий вид:
/>
Чтобы определить, нажатаили нет какая-либо клавиша-ключ, сначала нужно выставить на линиирегистра-защёлки P1, которыесоединяет клавиша, разные логические значения. Затем необходимо считать из регистразначения этих линий: если оба бита стали равными «0», то значит, проверяемаяклавиша была нажата.
Для сокращения процедурыопроса клавиатуры будем делать опрос по «строкам»:
Клавиша
Слово, выставленное на P1
Ожидаемое на P1 слово 7 6 5 4 3 2 1 7 6 5 4 3 2 1
‘1’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘2’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘3’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘4’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘5’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘6’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘7’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘8’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘9’ 1 1 1 1 1 1 1 1 1 1 1 1 1
‘0’ 1 1 1 1 1 1 1 1 1 1 1 1 1
Чтобы простозафиксировать факт нажатия любой из цифровых клавиш, достаточно выставить врегистр P1 слово #00001111b и ожидать на P1 значение #0000x1xxb, где xÎ{0;1}.
Особенностью даннойклавиатуры, которую надо учитывать при программировании, является наличиепереходного процесса (дребезга) с длительностью /> внесколько раз большей, чем время машинного цикла ОМЭВМ МК8051:
/>Текстпрограммы
ORG 8000h;
jmp lbMain
ORG 800Bh;
jmp intTF0
lbMain:
;конфигурируем таймер T0:
anl TMOD,#0F0h; обнуляем младшую тетраду
orl TMOD, #01h;младшую тетраду приводим к виду «0001»
clr TR0; остановка таймера T0 (таймер — не считает)
; загружаем старший имладший байты регистра таймера T0нулями:
mov TH0, #0
mov TL0, #0
; настраиваем системупрерываний:
mov IP, #0; все прерывания (пока) — с одинаковым низким уровнемприоритета
mov IE, #10000010b; IEN0: выставили биты EA(7),ES(4),ET0(1)
;mov 0E8h, #00001011b; IEN1: выставилибиты 0,1,3
mov P1,#00001111b
mov0EBh,#0FFh;
;;;; ОПИСАНИЕ ПЕРЕМЕННЫХ:;;;;
; регистр R0 — единицы
; регистр R1 — десятки
; регистр R2 — сотни
; регистр R3 — тысячи
; регистры R4, R5, R6 — для разных промежуточных значений
; регистр R7 — буфер для хранения значениянажатой клавиши [#0..#9] или
; значения #FFh, если клавиша не нажата
CR equ 0Dh;«возврат каретки»
LF equ 0Ah;«перевод строки»
ESC equ 1Bh; «конецсообщения»
Buf_R0 equ 20h
Buf_R1 equ 21h
Buf_R2 equ 22h
Buf_R3 equ 23h
;;;; ТЕЛО ПРОГРАММЫ: ;;;;
; задаём начальное время:
mov R0, #0;
mov R1, #2;
mov R2, #1;
mov R3, #0;
mov Buf_R0, R0
mov Buf_R1, R1
mov Buf_R2, R2
mov Buf_R3, R3
mov DPTR, #msgShowTime_Mode
callprShowMessage; вывод сообщения msgShowTime_Mode
setb TR0
mov R4, #13
lbMainLoop:
nop
clr A
add A, R0
add A, R1
add A, R2
add A, R3
jz lbFinal
callprIs_SetTime_Mode;
jmp lbMainLoop
;call prDelay;
;callprDisplay;
;callprIs_SetTime_Mode;
intTF0:
clr TF0
djnz R4,lbTF0_End;
; реализация обратногоотсчёта:
dec R0
cjne R0, #0FFh, lbTF0_Next1;
mov R0, #9
dec R1
cjne R1,#0FFh, lbTF0_Next1;
mov R1, #9
dec R2
cjne R2,#0FFh, lbTF0_Next1;
mov R2, #9
dec R3
cjne R3,#0FFh, lbTF0_Next1;
lbTF0_Next1:mov R4, #13
lbTF0_End: callprDisplay
reti
lbFinal:
clr TR0
mov DPTR,#msgFinal
callprShowMessage
;callprIs_SetTime_Mode;
jmp $
;;;; ОПИСАНИЕ ПРОЦЕДУР:;;;;
;; процедура prDelay:
; lb5: mov R5, #1;
;
; lb3: djnzR6, lb3
; djnz R4, lb3
; djnz R5, lb3
;
; ret
;
; prDelay:
; mov R6, #0
; mov R4, #0
; mov R5, #6
; call lb3
;
; mov R4,#244; (!!!)
; call lb5
;
; mov R4, #1
; mov R6,#118; (!!!) Это следуетменять для подстройки задержки!!!
; call lb5
;
; ret
;; процедура prSmartDelay:
;; небольшая задержка, завремя которой на клавиатуре успевает
;; завершиться«переходный процесс»
prSmartDelay:
mov R6, #0
mov R5, #0
lbSmartDelay_Loop:
djnz R5, $
djnz R6,lbSmartDelay_Loop
ret
;; процедураprDisplay:
;; [2 на вызов]+[2 навозврат]+[7]+[1]+[1432]=[1444]
;; переводим значения R0, R1, R2 вкодировку ACSII:
lbDrawElement:
add A, #30h
callprWaitFor_TI
mov SBUF, A
ret
prDisplay:
call prWaitFor_TI
mov SBUF, #CR;переводим курсор в начало строки:
mov A, R3
calllbDrawElement
mov A, R2
calllbDrawElement
mov A, R1
calllbDrawElement
mov A, R0
calllbDrawElement
call prWaitFor_TI; для выравнивания подождём передачи последнего символа
setb TI; [1] иначе — программа «зависнет»
ret; [2]
;; процедура prWaitFor_TI:
;; ожидание«готовности передачи» по последовательному порту
prWaitFor_TI:
jnb TI, $; зациклить, пока TI=0
clr TI; устанавливаем «неготовность пердачи»
ret
;; процедураprIs_SetTime_Mode:
;; [2 навызов]+[2+1+2+2]=[9]
;; проверяет, нажата ликлавиша входа в режим установки времени;
;; такойклавишей явл. '0'
prIs_SetTime_Mode:
mov P1, #00BFh
mov A, P1
cjne A,#00BEh, lbNot_SetTime_Mode
call prSetTime; переход в режим установки таймера
lbNot_SetTime_Mode:
cjne A,#00B7h, lbNotAnyMode
mov R0, Buf_R0
mov R1, Buf_R1
mov R2, Buf_R2
mov R3, Buf_R3
lbNotAnyMode:ret
;; процедура prExam_NumKeys:
;; опрос цифровых клавиш
prExam_NumKeys:
mov R7, #0FFh;допустим, что ничего не будет нажато
; опрос первого столбцаклавиш:
lbKey_1:
mov P1, #00DFh
mov A, P1
cjne A,#00DDh, lbKey_2
mov R7, #1
ret
lbKey_2:
cjne A,#00DEh, lbKey_3
mov R7, #2
ret
lbKey_3:
cjne A,#00D7h, lbKey_4
mov R7, #3
ret
; опрос второго столбцаклавиш:
lbKey_4:
mov P1, #00EFh
mov A, P1
cjne A,#00EDh, lbKey_5
mov R7, #4
ret
lbKey_5:
cjne A,#00EEh, lbKey_6
mov R7, #5
ret
lbKey_6:
cjne A,#00E7h, lbKey_7
mov R7, #6
ret
; опрос третьего столбцаклавиш:
lbKey_7:
mov P1, #007Fh
mov A, P1
cjne A,#007Dh, lbKey_8
mov R7, #7
ret
lbKey_8:
cjne A,#007Eh, lbKey_9
mov R7, #8
ret
lbKey_9:
cjne A,#0077h, lbKey_0
mov R7, #9
ret
; опрос четвёртого столбцаклавиш:
lbKey_0:
mov P1, #00BFh
mov A, P1
cjne A,#00BDh, lbEnd_Exam_NumKeys
mov R7, #0
lbEnd_Exam_NumKeys:ret
;; процедура prWaitFor_NextKey_Pressed:
;; ждёт СЛЕДУЮЩЕГОНАЖАТИЯ, чтобы долгое нажатие не «флудило»
prWaitFor_NextKey_Pressed:
lbPrevKey_Pressed: call prSmartDelay; чтобизбежать «дребезга» клавиатуры
callprExam_NumKeys;
cjne R7,#0FFh, lbPrevKey_Pressed;
callprSmartDelay; чтоб избежать «дребезга» клавиатуры
lbNo_NextKey_Pressed:call prExam_NumKeys
cjne R7,#0FFh, lbNextKey_Pressed
jmplbNo_NextKey_Pressed
lbNextKey_Pressed:ret
;; процедураprSetTime:
;; режим установки таймера:
prSetTime:
clr EA
mov DPTR,#msgSetTime_Mode
callprShowMessage; вывод сообщения msgSetTime_Mode
call prDisplay
; регистр R3:
callprWaitFor_NextKey_Pressed;
mov R3, 07
call prDisplay
; регистр R2:
callprWaitFor_NextKey_Pressed
mov R2, 07
call prDisplay
; регистр R1:
callprWaitFor_NextKey_Pressed
mov R1, 07
call prDisplay
; регистр R0:
callprWaitFor_NextKey_Pressed
mov R0, 07
call prDisplay
mov Buf_R0, R0
mov Buf_R1, R1
mov Buf_R2, R2
mov Buf_R3, R3
mov DPTR,#msgShowTime_Mode
callprShowMessage; вывод сообщения msgShowTime_Mode
setb EA
ret
;; процедурыprIs_R0_more_59, prIs_R1_more_59, prIs_R2_more_23:
;; проверяютсоответствующие регистры на корректность значений в них;
;; большие значенияуменьшаются до ближайших верных
prCorrect_R0:
cjne R0, #59,lbR0_not_59
ret
lbR0_not_59:jnc lbR0_more_59
ret
lbR0_more_59:mov R0, #59
ret
prCorrect_R1:
cjne R1, #59,lbR1_not_59
ret
lbR1_not_59:jnc lbR1_more_59
ret
lbR1_more_59:mov R1, #59
ret
prCorrect_R2:
cjne R2, #23,lbR2_not_23
ret
lbR2_not_23:jnc lbR2_more_23
ret
lbR2_more_23:mov R2, #23
ret
;; процедура prShowMessage:
;; выводит на экрантекстовое сообщение; символ ESC — признак конца сообщения
prShowMessage:
clr A
movc A, @A +DPTR
lbNextSymbol:call prWaitFor_TI
mov SBUF, A
inc DPTR
clr A
movc A, @A +DPTR
cjne A, #ESC, lbNextSymbol
ret
;;;; ОПИСАНИЕ ТЕКСТОВЫХСООБЩЕНИЙ: ;;;;
msgSetTime_Mode:db LF,CR, '[Regim ustanovki taymera:]', CR, LF, ESC
msgShowTime_Mode:db LF,CR, 'OBRATNYI OTSCHET...', CR, LF, ESC
msgFinal: dbCR, '!!!OBRATNYI OTSCHET ZAKONCHEN!!!:', CR, LF, ESC
END;;;; КОНЕЦПРОГРАММЫ


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Мировой рынок золота 2
Реферат II. Николай Романов личность в истории
Реферат Феодализм, феодальная раздробленность Руси_3
Реферат «Об итогах работы налоговых органов республики за 1 квартал 2011 года по поступлению доходов, администрируемых фнс россии, и основные задачи на 2011 год»
Реферат Денежное обращение и эмиссия на северном Кавказе в 1917-1920 гг
Реферат 1. Постмодерн як світовідчуттєва І стильова домінанта кінця ХХ ст
Реферат Основы психотерапии и психологической коррекции в работе клинического психолога
Реферат Подъем национально-освободительного и демократического движения в Иране
Реферат Особенности зрительного восприятия
Реферат Untitled Essay Research Paper Many people
Реферат Использование земли и ее оценка
Реферат The Peruvian Society Essay Research Paper THE
Реферат Видатні майстри педагогічної праці А Макаренко В Сухомлинський
Реферат Mother To Son Essay Research Paper Hughess
Реферат Дворцовый переворот