Микропроцессорная техника: практический курс : учебное пособие для студентов Физико-технологического института, обучающихся по направлениям подготовки "Ядерная физика и технологии", "Биомедицинская инженерия"
Download 0.63 Mb. Pdf ko'rish
|
978-5-321-02171-21 2012 (1)
- Bu sahifa navigatsiya:
- SEGMENT и RSEG
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling