Page 96 - 22-0722 EBOOK
P. 96

wta4hi   endp

            ;save Parity bit and assign Stopbit
                                                     ;**********************************************
                     mov   byte ptr[di],bh ;odd parity

                                                     ;wait for P1A4 (DAT) line to go lo
                     inc   di
                     mov   byte ptr[di],1  ;Stopbit = 1
                                                     wta4lo   proc
                                                              push  ax

                                                     ;release DAT line by making P1B3 hi
                     pop   di
                                                              mov   al,08h
                     pop   cx
                                                              out   ppi_port1_b,al
                     pop   bx
                     pop   ax
                                                              jmp   $+2     ;I/O delay
                     sti           ;allow INTs
                                                     a4hi:    in    al,ppi_port1_a
                     ret
                                                              jmp   $+2     ;I/O delay
            Byt2bit  endp
                                                              and   al,10h  ;check bit 4 of P1A
                                                              cmp   al,10h  ;bit a4=hi ?
            ;**********************************************

                                                              je    a4hi
            ;serially send data in al to PIC16F627A
                                                              pop   ax
            SndHdat  proc
                                                              ret
            ;use this proc after Req2Snd
                                                     wta4lo   endp
                                                     ;**********************************************
                     cli           ;prevent INTs

                     push  ax
                                                     ;wait for P1A7 (CLK) line to go hi
                     push  bx
                     push  cx
                                                     wta7hi   proc
                                                              push  ax
                     push  di
                                                     ;release CLK line by making P1C3 hi
                     push  si
            ;send 8 work data bits + Parity bit + Stopbit
                                                              mov   al,08h
                     mov   si,dat0 ;addr of 1st bit
                                                              out   ppi_port1_c,al
                                                              jmp   $+2     ;I/O delay
                     mov   cx,10
                                                     a7lo:    in    al,ppi_port1_a
                     call  wta7lo  ;wait until CLK=lo
            loop10:
                                                              jmp   $+2     ;I/O delay
                     call  wta7hi  ;wait until CLK=hi
                                                              and   al,80h  ;check bit 7 of P1A
                                                              cmp   al,00h  ;bit a7=lo ?
                     jmp   $+2     ;delay for about 10 us
                                                              je    a7lo
                     jmp   $+2
                                                              pop   ax
                     jmp   $+2
                     mov   al,byte ptr[si] ;current bit
                                                              ret
                     shl   al,1    ;shift bit0 to bit1
                                                     wta7hi   endp
                     shl   al,1    ;to bit2
                                                     ;**********************************************

                     shl   al,1    ;to bit3

                     out   ppi_port1_b,al ;put bit on P1B3
                     jmp   $+2     ;I/O delay


                  ภาพที่ ๘  ซอฟต์แวร์การรับ-ส่งข้อมูลแบบอนุกรมของแผงวงจรไมโครคอนโทรลเลอร์ 8088 (ต่อ)
                                                     ;Page 8/8 of Fig.8
            ;Page 7/8 of Fig.8
                       loop  loop8                              ret

            ;wait for P1A7 (CLK) line to go lo       dly63us  proc           ;time delay about 63 us
            wta7lo   proc                                     push  cx
                     push  ax                                 mov   cx,0010h ;delay value
            ;release CLK line by making P1C3 hi      reptw:   loop  reptw    ;count down CX
                     mov   al,08h                             pop   cx
                     out   ppi_port1_c,al                     ret
                                                     dly63us  endp
                     jmp   $+2     ;I/O delay   วารสารราชบััณฑิิตยสภา
            a7hi:    in    al,ppi_port1_a            ;**********************************************

                     jmp   $+2     ;I/O delay   ปีีที่่� ๔๖ ฉบัับัที่่� ๓  กัันยายน-ธัันวาคม ๒๕๖๔
                     and   al,80h  ;check bit 7 of P1A   dly1ms   proc           ;time delay about 1 ms
           86          cmp   al,80h  ;bit a7=hi ?   การแลกเปล่�ยนข้้อมููลแบบอนุกรมูระหว่่างไมูโครคอนโทรลเลอร์โดยใช้้เกณฑ์์ว่ิธี่ข้องแผงแป้นอักข้ระ
                                                              push  cx
                     je    a7hi                               mov   cx,0100h ;delay value
                     pop   ax                        reptx:   loop  reptx    ;count down CX
                     ret                                      pop   cx
            wta7lo   endp                                     ret
            ;**********************************************   dly1ms   endp
                                                     ;**********************************************
            ;set bit 3 of P1B (release DAT line)
            stb3hi   proc                            dly64    proc           ;time delay about 64 ms
                     push  ax                                 push  cx
                     mov   al,08h  ;make P1B3 line hi            mov   cx,4000h ;delay value
                     out   ppi_port1_b,al            repty:   loop  repty    ;count down CX
                     jmp   $+2     ;I/O delay                 pop   cx
                     pop   ax                                 ret
                     ret                             dly64    endp
            stb3hi   endp                            ;**********************************************
            ;**********************************************
                                                     dly250   proc          ;time delay about 250 ms
            ;clear bit 3 of P1B (put DAT=lo)                  push  cx
            clb3lo   proc                                     mov   cx,0FFFFh ;delay value
                     push  ax                        reptz:   loop  reptz   ;count down CX
                     mov   al,00h  ;make P1B3 line lo            pop   cx
                     out   ppi_port1_b,al                     ret
                     jmp   $+2     ;I/O delay        dly250   endp
                     pop   ax                        ;**********************************************
                     ret
            clb3lo   endp
            ;**********************************************   ;far jump to start at 0000:8000h
                                                              org   0FFF0h
            ;set bit 3 of P1C (release CLK line)              db    0EAh, 0,80h, 0,0
            stc3hi   proc                            end      main
                     push  ax                        ;**********************************************
                     mov   al,08h  ;make P1C3 line hi
                     out   ppi_port1_c,al
                     jmp   $+2     ;I/O delay
                     pop   ax
                     ret
            stc3hi   endp
            ;**********************************************

            ;clear bit 3 of P1C (put CLK=lo)
            clc3lo   proc
                     push  ax
                     mov   al,00h   ;make P1C3 line lo
                     out   ppi_port1_c,al
                     jmp   $+2      ;I/O delay
                     pop   ax
                     ret
            clc3lo   endp
            ;**********************************************

            dly20us  proc           ;time delay about 20 us
                     push  cx
                     mov   cx,0005h ;delay value
            reptv:   loop  reptv    ;count down CX
                     pop   cx         ret
            dly20us  endp
            ;**********************************************



             ภาพท่� ๘  ซอฟตั์แวร์การรับ-ส่งข้้อมูลแบบอนีุ้กรมข้องแผงวงจรไมโครคอนี้โทรลเลอร์ 8088 (ตั่อ)
                  ภาพที่ ๘  ซอฟต์แวร์การรับ-ส่งข้อมูลแบบอนุกรมของแผงวงจรไมโครคอนโทรลเลอร์ 8088 (ต่อ)

                    ซอฟตั์แวร์ภาษาแอสเซมบล้สำาหรับไมโครโพิรเซสเซอร์ 8088 ตัามภาพิท้� ๘ ม้รายละเอ้ยด
           มากกว่าท้�แสดงไว้ในี้ผังงานี้ตัามภาพิท้� ๖  ยกตััวอย่างว่า ก่อนี้ท้�แผงวงจรไมโครคอนี้โทรลเลอร์ 8088
           (แผงวงจรตััวหลัก) จะเริ�มรับข้้อมูลจากแผงวงจรไมโครคอนี้โทรลเลอร์ PIC16F627A (แผงวงจรตััวรอง) นี้ั�นี้
           แผงวงจร 8088 จะแสดงแสงกะพิริบ ๕ ครั�งจากไดโอดเปล่งแสงจำานี้วนี้ ๘ หนี้่วยท้�ตั่ออยู่กับวงจรรวม
   91   92   93   94   95   96   97   98   99   100   101