Page 24 - The Journal of the Royal Society of Thailand
P. 24
วารสารราชบััณฑิิตยสภา
ปีที� ๔๙ ฉบับที� ๑ มกราคม-เมษายน ๒๕๖๗
14 การต่่อประสานแผงวงจรไมโครคอนโทรลเลอร์เพื่่�อการเรียนร้�กับหน่วยความจำอีอีพื่ร็อมแบบอนุกรมต่ามเกณฑ์์วิธีี I2C
call delay0 ;short extension of clock pulse (optional)
and al,01h ;clear bit PC1=SCL
out ppi_port2c,al ;finish clock pulse: PC1=SCL=1->0
jmp $+2 ;I/O delay
th
loop lop2 ;repeat until finishing 8 bit
th
;receive ACK/NACK (9 ) bit from ser EEPROM
mov al,01h ;let PC1=SCL=0, release PC0=SDA line
out ppi_port2c,al ;prepare to receive 1-bit ACK/NACK
jmp $+2 ;I/O delay
mov al,03h ;al=03h=00000011b
out ppi_port2c,al ;let PC1=SCL=0->1, while PC0=SDA line floats
jmp $+2 ;I/O delay
call delay0 ;short extension of clock pulse (optional)
in al,ppi_port2c ;get ACK/NACK bit at C4=SDA
jmp $+2 ;I/O delay
and al,10h ;get only bit PC4=SDA in to al
jz gtzro ;bit PC4=SDA=0 => make al=00h
mov al,01h ;bit PC4=SDA=1 => make al=01h for return
gtzro:
mov ah,al ;put al in ah for return byte
mov al,01h ;set al=01h=00000001b
out ppi_port2c,al ;let PC1=SCL=1->0: finish clock pulse
jmp $+2 ;I/O delay
pop cx ;retrieve cx from stack
pop bx ;retrieve bx from stack
ret ;return with ah.0=ACK/NACK
i2c_wr endp
หมาย์เหตุ : คำสั�ง call delay0 ที�ป็รากฏอย้่ ๒ แห่งในกระบวนคำสั�งขี�างบนนี�อาจต่ัดทิ�งได�ถ�าพื่ิส้จน์
ด�วยการทดลองในทางป็ฏิบัต่ิพื่บว่า อีอีพื่ร็อมสามารถต่อบสนองได�เร็วพื่อและไม่ทำให�เกิดขี�อผิดพื่ลาดในการ
ถ่ายโอนบิต่ขี�อม้ล