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 ที�ป็รากฏอย้่ ๒ แห่งในกระบวนคำสั�งขี�างบนนี�อาจต่ัดทิ�งได�ถ�าพื่ิส้จน์
             ด�วยการทดลองในทางป็ฏิบัต่ิพื่บว่า อีอีพื่ร็อมสามารถต่อบสนองได�เร็วพื่อและไม่ทำให�เกิดขี�อผิดพื่ลาดในการ

             ถ่ายโอนบิต่ขี�อม้ล
   19   20   21   22   23   24   25   26   27   28   29