Микропроцессорная техника: практический курс : учебное пособие для студентов Физико-технологического института, обучающихся по направлениям подготовки "Ядерная физика и технологии", "Биомедицинская инженерия"


Download 0.63 Mb.
Pdf ko'rish
bet45/74
Sana29.03.2023
Hajmi0.63 Mb.
#1306393
1   ...   41   42   43   44   45   46   47   48   ...   74
Bog'liq
978-5-321-02171-21 2012 (1)

ReceiveBlock – позволяет получить блок данных от ведомого (slave)
I
2
C-устройства с 8-битным внутренним адресным пространством. Блок
данных при получении размещается в резидентной памяти данных
(idata). Спецификация входных параметров в регистрах микрокон-
троллера:
79


3. Лабораторный практикум
A
– I
2
C-адрес устройства;
B
– длина блока данных, т.е. количество получаемых байтов;
R0 – адрес начала блока-источника во внутреннем адресном про-
странстве I
2
C-устройства;
R1 – адрес области в idata, где будет размещен принятый блок.
При успешном завершении процедуры приема блока данных флаг F0
сброшен. При любой ошибке во время приема F0 = 1. По значению
флага F0 возможна организация обработчика ошибки. Если обработ-
ка ошибки не планируется, то анализ состояния флага можно исклю-
чить.
SendBlock – позволяет передать блок данных в ведомое (slave) I
2
C-
устройство с 8-битным внутренним адресным пространством. Блок
данных для отправки должен быть размещен в резидентной памяти
данных (idata). Спецификация входных параметров в регистрах мик-
роконтроллера:
A
– I
2
C-адрес устройства;
B
– длина блока данных, т.е. количество байтов для передачи;
R0 – адрес начала блока-приемника во внутреннем адресном про-
странстве I
2
C-устройства;
R1 – адрес области в idata, где размещен блок данных для пере-
сылки.
При успешном завершении процедуры приема блока данных флаг F0
сброшен. При любой ошибке во время приема F0 = 1.
Приведем примеры программ, осуществляющих чтение и установ-
ку времени в часах. Директива EXTRN декларирует, что программы
(code) с именами «receiveblock», «sendblock», «getack» содержатся в
другом файле. В данном случае они содержатся в объектной библио-
теке I2C.LIB. Директивы SEGMENT и RSEG служат для оформления
сегмента с именем PROG, в котором будет размещена приведенная ни-
же программа. Подробное описание данных директив приведено в [1].
Отметим, что подобное декларирование структуры программы требу-
ется редактору связей для сборки загрузочного модуля из нескольких
объектных модулей: в данном случае для объединения приведенной
ниже программы и библиотеки I2C.LIB.
В подпрограммах GetTime (получение времени) и PutTime (уста-
новка времени) использованы описанные выше процедуры доступа к
I
2
C-устройствам. Программы выдают содержимое регистров в «сы-
ром» виде без какого-либо преобразования или форматирования.
80


3.6. Периферийные устройства, доступные через I
2
C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ðÒÉÍÅÒ ÐÒÏÇÒÁÍÍÙ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ×ÒÅÍÅÎÉ
; (4-ÂÁÊÔÁ) ÉÚ ÞÁÓÏ× ÐÏ ÛÉÎÅ I2C (ÉÌÉ ÄÌÑ ÕÓÔÁÎÏ×ËÉ
; ×ÒÅÍÅÎÉ × ÞÁÓÁÈ ÏÔÐÒÁ×ËÏÊ 4 ÂÁÊÔÏ× ÐÏ ÛÉÎÅ I2C)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; æ-ÉÉ ÉÚ ÂÉÂÌÉÏÔÅËÉ I2C.LIB
extrn
code (receiveblock,sendblock,getack)
prog
segment code
; äÅËÌÁÒÁÃÉÑ ÓÅÇÍÅÎÔÁ ÐÒÏÇ.
rseg
prog
; ÷ÙÂÏÒ ÔÅËÕÝÅÇÏ ÓÅÇÍÅÎÔÁ
org
2050h
; õÓÔÁÎÏ×ËÁ ÁÄÒÅÓÁ ÓÅÇÍÅÎÔÁ
Begin: mov
r1,#40h
call
gettime
; ðÏÌÕÞÉÔØ 4 ÂÁÊÔÁ ÉÚ ÞÁÓÏ×
call
puttime
; ïÔÐÒÁ×ÉÔØ 4 ÂÁÊÔÁ × ÞÁÓÙ
jnb
F0,done
; F0=0, ÎÅÔ ÏÛÉÂËÉ
; úÄÅÓØ ÍÏÖÎÏ ÒÁÚÍÅÓÔÉÔØ ÏÂÒÁÂÏÔÞÉË ÏÛÉÂËÉ ÐÒÉ F0=1
done:
sjmp
$
; ëÏÎÅàÏÓÎÏ×ÎÏÊ ÐÒÏÇÒÁÍÍÙ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ðÏÄÐÒÏÇÒÁÍÍÁ GetTime
; ðÏÌÕÞÅÎÉÅ ×ÒÅÍÅÎÉ × ×ÉÄÅ 4 ÂÁÊÔÏ× ääë ÉÚ ÞÁÓÏ×
; r1 -- ÁÄÒÅÓ × idata ÄÌÑ ÒÁÚÍÅÝÅÎÉÑ 4 ÂÁÊÔÏ×
; òÅÚÕÌØÔÁÔ × F0:
; 0 -- ÕÓÐÅÛÎÏ ÐÏÌÕÞÅÎÏ; 1 - ÞÁÓÙ ÎÅ ÏÔËÌÉËÁÀÔÓÑ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
gettime:
push
acc
;
push
b
;
; ÷ÙÂÏÒ ÂÁÎËÁ 0, F0=0
anl
psw,#01100011b
push
0h
; óÏÈÒÁÎÅÎÉÅ r0
mov
a,#0a0h
; I2C-ÁÄÒÅÓ ÞÁÓÏ×
call
getack
; F0=1 -- ÞÁÓÙ ÇÏÔÏ×Ù
cpl
F0
; éÎÁÞÅ -- ÎÅ ÇÏÔÏ×Ù
jb
F0,time_err
mov
b,#4
; äÌÉÎÁ ÂÌÏËÁ ÂÁÊÔÏ×
mov
r0,#1h
; áÄÒÅÓ ÒÅÇ. × ÞÁÓÁÈ
call
receiveblock
time_err:
pop
0h
;
pop
b
;
pop
acc
;
ret
;
;ëÏÎÅàÐÏÄÐÒÏÇÒÁÍÍÙ GetTime
81


3. Лабораторный практикум
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ðÏÄÐÒÏÇÒÁÍÍÁ PutTime
; õÓÔÁÎÏ×ËÁ ×ÒÅÍÅÎÉ × ×ÉÄÅ 4 ÂÁÊÔÏ× ääë ËÏÄÁ
; r1 -- ÁÄÒÅÓ ÏÂÌÁÓÔÉ × idata ÉÓÈÏÄÎÙÈ 4 ÂÁÊÔÏ×
; òÅÚÕÌØÔÁÔ × F0:
; 0 -- ÕÓÐÅÛÎÏ ÕÓÔÁÎÏ×ÌÅÎ; 1 -- ÞÁÓÙ ÎÅ ÏÔËÌÉËÁÀÔÓÑ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
puttime:
push acc
;
push b
;
anl
psw,#01100011b
; ×ÙÂÏÒ ÂÁÎËÁ 0, F0=0
push 0h
; ÓÏÈÒÁÎÅÎÉÅ r0
mov
a,#0a0h
; I2C-ÁÄÒÅÓ ÞÁÓÏ×
call getack
; F0=1 -- ÞÁÓÙ ÇÏÔÏ×Ù
cpl
F0
; ÉÎÁÞÅ -- ÎÅ ÇÏÔÏ×Ù
jb
F0,put_err_
; ÏÂÒÁÂÏÔËÁ ÏÛÉÂËÉ
mov
b,#4
; ÄÌÉÎÁ ÂÌÏËÁ ÂÁÊÔÏ×
mov
r0,#1h
; ÁÄÒÅÓ ÒÅÇ. × ÞÁÓÁÈ
call sendblock
; ÐÅÒÅÄÁÔØ × ÞÁÓÙ
put_err_:
pop
0h
;
pop
b
;
pop
acc
;
ret
;
end
;
;ëÏÎÅàÐÏÄÐÒÏÇÒÁÍÍÙ PutTime

Download 0.63 Mb.

Do'stlaringiz bilan baham:
1   ...   41   42   43   44   45   46   47   48   ...   74




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling