序列通訊程序

2023-01-24 21:57:02 字數 4791 閱讀 1836

1、 從鍵盤上讀入一串字元並在本機上顯示:

data segment

msg1 db 13,10,'please input a char : ', 13,10,13,10,'$'

ddd1 db 13,10,13,10

ddd2 db 81 dup

data ends

code segment

assume cs:code, ds:data

start: mov ax, data

mov ds, ax

key: mov dx, 3fbh通訊線路控制暫存器位址

mov al, 80h允許訪問波特率因子暫存器

out dx, al

mov dx, 3f8h通訊線路控制暫存器位址

mov al, 12

out dx,al寫入對應波特率為9600的波特因子的低8位

inc dx

mov al, 0

out dx, al寫入波特因子的高8位

mov al, 0bh

mov dx, 3fbh

out dx, al設定序列通訊資料傳送格式為:8位字元,1位停

;止位,奇校驗

mov al, 03h

mov dx, 3fchmodem暫存器位址

out dx, al資料準備就緒,請求傳送

check: mov dx,3fdh

in al,dx讀線路狀態暫存器

test al,1h查接收緩衝器是否滿,若滿,則轉接收子程式

jnz rev

test al,20h查傳送緩衝器是否空,不空,轉check

jz check

mov dx, offset msg1

mov ah, 99號功能呼叫,顯示提示.

int 21h顯示.

mov di, offset ddd2

lop:

mov ah, 1輸入字元.

int 21h

cmp al, 13

jz exit回車'結束.

mov [di], al

inc di

cmp di, offset ddd2 + 80

jz exit輸入80個字元了,也結束.

jmp lop繼續輸入.

exit:

mov dx, offset ddd1

mov ah, 99號功能呼叫.

int 21h顯示輸入的字元.

2、傳送程式(查詢方式)

data segment

disp db 'transmission start:',0ah,0dh,'$'

data ends

stack segment para stack 'stack'

db 200 dup(0)

stack ends

code segment

assume cs: code, ds: data, ss: stack

start: mov ax, data

mov ds, ax

mov ax, stack

mov ss, ax

mov dx,3fbh

mov al, 80h

outdx, al允許訪問波特率因子暫存器

mov dx,3f8h置波特率因子暫存器

mov al,12h波特率因子低位元組

out dx, al

mov dx, 2f9h

mov al, 0h波特率因子高位元組

out dx, al

mov dx,3fbh置線路控制暫存器

mov al,0bh資料位7位、停止位1位、奇校驗

out dx, al

mov al, 03h

mov dx, 3fchmodem暫存器位址

out dx, al資料準備就緒,請求傳送

mov dx,offset disp ;顯示傳送提示資訊

mov ah,9

int 21h

lop: mov dx,3fdh讀線路狀態暫存器

in al, dx

test al,20h測試傳送保持暫存器空?

jz lop不空,則迴圈測試

mov ah,1讀取按鍵字元,並顯示

int 21h

mov dx,3f8h傳送該字元

out dx, al

cmp al,13h判斷按下回車嗎?

jz over是,則結束

jmp lop不是,繼續迴圈

over: mov ah,4ch返回dos

int 21h

code ends

end start

2.接收程式(查詢方式):

data segment

rbuf db 30 dup(0)

disp db 'receive start:',0ah,0dh,'$'

error db 'receive error!',0ah,0dh,'$'

data ends

stack segment para stack 'stack'

db 200 dup(0)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

lea si,rbuf置接收緩衝區位址指標

mov dx,3fbh置dlab=1

mov al,80h

out dx,al

mov dx,3f8h置波特率因子暫存器

mov al,12h波特率因子低位元組

out dx,al

mov dx,3f9h

mov al,0波特率因子高位元組

out dx,al

mov dx,3fbh置通訊線路控制暫存器

mov al,0bh資料位7位、停止位1 位、奇校驗

out dx,al

mov dx,3fch置modem控制暫存器

mov al,02h禁止中斷

out dx,al

mov dx,3f9h置中斷允許暫存器

mov al,0遮蔽所有中斷

out dx, al

mov dx, offset disp ;顯示接收提示資訊

mov ah, 9

int 21h

mov dx,3f8h讀接收緩衝器內容,不處理

in al, dx

lop: mov dx,3fdh讀線路狀態暫存器

inal, dx

test al,1eh測試接收錯誤?

jnz er有錯誤,轉錯誤顯示

test al,01h無錯誤,則測試接收資料準備好?

jzlop未準備好則迴圈測試

mov dx,2f8h準備好則接收字元

in al,dx

and al,7fh

cmp al,'p判斷接收結束嗎?

jz over結束轉over

movsi],al未結束則存入緩衝區

inc si

mov dl,al顯示該字元

mov ah,02

int 21h

jmp lop

er: movdx,2f8h清標誌位

in al,dx

mov dx,offset error ;顯示錯誤資訊

mov ah,9

int 21h

jmp lop

over: mov dl,al

mov ah,2

int 21h

mov ah,4ch返回dos

int 21h

code ends

end start

並行通訊和序列通訊簡介

目前電梯訊號的傳送方式歸納起來有採用了資料傳輸中的並行通訊和序列通訊2種技術。下面就這2種通訊方式在電梯上的應用作一分析。1.並行通訊所謂並行通訊指的是資料以成組的方式在多個並行通道上進行傳輸。每乙個訊號源泉點到訊號接收埠幾乎都獨佔1根資料通訊線路。目前國內中 低檔次電梯控制系統大多採用了點對點的形...

其它程序通訊方法

一般的檔案訪問函式 close,read,write 等可用於fifo.當開啟fifo時,非阻塞標誌 o nonblock 沒有使用o nonblock訪問要求無法滿足時程序將阻塞 如果試圖讀取空的fifo,將導致程序阻塞。使用o nonblock,訪問要求無法滿足時不阻塞,立刻出錯返回,errno...

程序間通訊 linux

程序間通訊 1,使用共享記憶體 共享記憶體允許兩個或更多程序共享一給定的儲存區。因為資料不需要在各個程序之間複製,所以這是最快的一種程序間通訊方式。通過mmap 可以將檔案對映到不同的程序空間中,將他們作為多個程序共享的記憶體實現程序間通訊。利用mmap 進行程序間的資訊互動是無格式的,可以自己定義...