* Lưu đồ chương trình truyền dữ liệu. BEGIN KHỞI PHÁT: GHI TỪ CHẾ ĐỘ GHI LỆNH : DTR, TxEN ĐỌC TRẠNG THÁI: DSR, TxRDy Kiểm tra sẵn sàng :DSR= TxRDY=1 GHI SỐ LIỆU RA GHI LỆNH PHÁT: RTS END * Lưu đồ chương trình nhận dữ liệu. BEGIN KHỞI PHÁT: GHI TỪ CHẾ ĐỘ GHI L ỆNH : DTR, RxEN,RTS ĐỌC TRẠNG THÁI: DSR, RxRDy Kiểm tra sẵn sàng :DSR= RxRDY=1 ĐỌC SỐ LIỆU TỪ THANH GHI ĐỆM SỐ LIỆU END 3. CHệễNG TRèNH. a. Chửụng trỡnh khụỷi taùo 8251A. MOV DX, 0FFF2h MOV AL,00h OUT DX,AL MOV CX 2h D0 : LOOP D0 OUT DX, AL D1: MOV CX,2h LOOP D1 OUT DX, AL MOV CX,2h D2: LOOP D2 MOV AL, 40h OUT DX, AL MOV CX, 2h D3: LOOP D3 MOV AL, 11001110B OUT DX, AL MOV CX, 2h D4: LOOP D4 MOV CX, 6500h MOV AL,03h OUT 01h Chửụng trỡnh truyen dửừ lieọu. ;chuong trinh truyen du lieu org 70000h mov dx 02h ;dia chi thanh ghi dieu khien mov al,00h out dx,al ;xoa thanh ghi dieu khien call delay out dx,al call delay out dx,al call delay mov al,40h ; goi 40h vao al, gia tri cua bit RI out dx,al ;de xoa thanh ghi noi call delay mov al,0cdh ; ghi loi dieu khien che do vao out dx,al ;thanh ghi dieu khien che do call delay mov cx,6500h ; dia chi dieu khien mov al,03h ; ghi tu che do DTR(D1=1),TxEN(D0=1) out dx,al call delay x1: in al,dx and al,81h ; kiem tra trang thai cmp al,81h jnz x1 mov dx,cx mov al,m mov bl,al ; nap byte dia chi tap vao bl mov dx,00h out dx,al ;gui byte dia chi thap call delay mov al,21h ; ghi tu lenh DTS(D5),TxEN(D0) de truyen mov dx,01h out dx,21h call delay inc cx ;tang dia chi de lay byte ke tiep mov al,03h out dx,al call delay mov dx,01h x2: in al,dx and al,81h cmp al,81h jnz x2 mov dx,00h in al,dx mov dx,cx mov al,m mov bh,al ;nap dia chi cao vao bh out dx,al ;truyen byte dia chi cao call delay mov al,21h mov dx,01h out dx,al ;ra lenh truyen call delay mov dx,01h x3: in al,dx and al,81h cmp al,81h jnz x3 mov dx,cx mov al,m mov dx ooh out dx,al ;gui so byte can truyen mov ah,al x5: mov al,21h out dx,al call delay mov dx,01h x4: in al,dx and al,81h cmp al,81h jnz x4 mov dx,bx ;tuyen du lieu can truyen mov al,m mov dx,00h out dx,al inc bx dec ah mov al,21h mov dx,o1h out dx,al jnz x5 end Chöông trình nhaän döõ lieäu. ;chuong trinh con delay delay: push cx mov cx,03h y0: loop y0 pop cx ret ;chuong trinh nhan du lieu org 70000h mov dx 01h ;dia chi thanh ghi dieu khien mov al,00h out dx,al ;xoa thanh ghi dieu khien call delay out dx,al call delay out dx,al call delay mov al,40h ; goi 40h vao al, gia tri cua bit RI de xoa thanh ghi noi out dx,al call delay mov al,0cdh; ghi loi dieu khien che do vao thanh ghi dieu khien out dx,al call delay mov al,26h ; ghi tu che do RTR(D1=1),RxEN(D0=1) out dx,al call delay y1: in al,dx and al,82h; kiem tra trang thai cmp al,82h jnz y1 mov dx,00h in al,dx mov bl,al; nap byte dia chi tap vao bl mov dx,01h y2: in al,dx and al,82h cmp al,82h jnz y2 mov dx,00h in al,dx mov bh,al mov dx,01h y3: in al,dx and al,82h cmp al,82h jnz y3 mov dx ooh in dx,al ;nhan so byte truyen mov ah,al mov dx,01h ;nhan du lieu y4: in al,dx and al,82h cmp al,82h jnz y4 mov dx,00h in al,dx mov dx,bx mov m,al inc bx jnz x4 end II. CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TREÂN MAÙY TÍNH ; TERMINAL.ASM ; STACK stack segment stack db 300 dup('?') stack ends ; DATA data segment prompt db 'File name:$' filename db 30 dup(0) buffer db 512 dup(0) buffrr db 512 dup(0) handle dw ? openerr db 0dh,0ah,'OPEN ERROR - COPDE' errcode db 30h,'$' ;messages MENU_MS db ' **TERMINAL PROGRAM**',0dh,0ah db '<F1> to redisplay this MENU',0dh,0ah db '<F2> to set communications protocol',0dh,0ah db '<F3> to display protocol installed',0dh,0ah db '<F4> to open file.hex and trasnmit',0dh,0ah db '<F9> to exit the TERMINAL program',0dh,0ah db 'All character typed are transmitter',0dh,0ah db 'All character receiver are display',0dh,0ah db 0dh,0ah,'$' PROT_MS db '* Installed communications protocol',0dh,0ah db 'Baud rate:' Baud% db '2400',0dh,0ah db 'Parity:' Par% db 'Even',0dh,0ah db 'Stop bit:' Stop% db '1',0dh,0ah db 'Word length:' Word% db '8',0dh,0ah,0ah,'$' Baud$$ db '110 150 300 600 1200 2400 4800 9600' Par$$ db 'odd noneven' baud_menu db 0dh,0ah,'**New communication parameter' db 'rs input **',0dh,0ah db 'baud rate:',0dh,0ah db '1 = 110',0dh,0ah db '2 = 150',0dh,0ah db '3 = 300',0dh,0ah db '4 = 600',0dh,0ah db '5 = 1200',0dh,0ah db '6 = 2400',0dh,0ah db '7 = 4800',0dh,0ah db '8 = 9600',0dh,0ah db 'Select: $' par_menu db 0dh,0ah,'Pariry:',0dh,0ah db '1 = odd',0dh,0ah db '2 = none',0dh,0ah db '3 = even',0dh,0ah db 'Select: $' Stop_menu db 0dh,0ah,'Stop bit:',0dh,0ah db '1 = 1 stop bit',0dh,0ah db '2 = 2 stop bit',0dh,0ah db 'Select: $' Word_menu db 0dh,0ah,'Word length:',0dh,0ah db '1 = 7 bit',0dh,0ah db '2 = 8 bit',0dh,0ah db 'Select: $' err1_ms db 0dh,0ah,'*** cannot transmit ***',0dh,0ah card_base dw 02f8h ;address of RS 232 card inT_num db 0ch setup_byte db 0bbh ; ;Origin O_int_seg dw 0000h ;segment O_int_off dw 0000h ;offset ;circular buffer and pointer: circ_buf db 20 dup(00h) dw 0 data_in dw 0 ;input pointer data_out dw 0 ;output pointer data ends ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CODE xxxxxxxxxxxxxxxxxx code segment assume CS:code start: mov ax,data mov ds,ax assume ds:data mov es,ax assume es:data ;display MENU at cursor mov dx,offset menu_ms ;messages call show_message ;hardware type push ds mov dx,0f000h mov ds,dx mov al,ds:[0fffeh] ;code to AL ;get addr of the RS232 card from BIOS data area mov dx,0 mov ds,dx mov cx,ds:0400h pop ds mov card_base,cx ;determine interrupt number: ; 0bh IRQ4 all other cmp al,0fdh jne set_address mov int_num,0bh ;save/install interrupt set_address: mov ah,53 mov al,int_num int 21h mov o_int_seg,es mov o_int_off,bx mov ah,37 mov al,int_num mov dx,offset cs:rs232_int push ds . al,dx mov dx,bx mov m,al inc bx jnz x4 end II. CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TREÂN MAÙY TÍNH ; TERMINAL.ASM ; STACK stack segment stack db 300 dup('?') stack ends ; DATA