8251串行通信

2004-12-08 12:50:31 School Views(4942)

;8251串行通信 用8251 8253 clk0接1M
;宏定义必须放在end main 以外 必须放在程序开头 在end main后不行
;用equ定义8251 8253 地址
;操作 键盘键入要发送的键值 屏幕显示其值和接收回来加三后的值 判ESC退出         
delay    MACRO             ;调用时直接用宏名 delay
           LOCAL d0
           MOV CX,0ffffh            ;初值越大越好 0ffffh
     d0: LOOP d0
           ENDM
ioport       EQU 0dc00h-280h
proc_53 EQU ioport+283h
pro0_53 EQU ioport+280h
proc_51 EQU ioport+2B9h
prod_51 EQU ioport+2B8h
  data SEGMENT
  mes   DB   13,10,"Start Keyboard:",13,10,"$"
  data ENDS
  code SEGMENT
  ASSUME CS:code
  main: MOV DX,proc_53      ;283为8253控制口地址
           MOV AL,00011111b   ;通道0 方式3(方波)
           OUT DX,AL
           MOV DX,pro0_53      ;280为通道0口地址
           MOV AL,52h            ;波特率1200 异步*16
           OUT DX,AL             ;n=1M/1200*16=1M/19200=52 OUT0=1M/52=20kH
           MOV DX,proc_51      ;2b9为8251控制口地址
           MOV AL,00h            
           OUT DX,AL             ;输出第一个0
           delay
           OUT DX,AL             ;输出第二个0
           delay
           OUT DX,AL             ;输出第三个0
           delay
           MOV AL,40h            ;命令字 IR=1 内部复位
           OUT DX,AL
           delay
           MOV AL,01111010b   ;方式字 一个停止符 偶校验 7位字符
           OUT DX,AL             ;异步方式*16
           delay
           MOV AL,00010101b   ;命令字 使错误标志复位 允许发送和接收
           OUT DX,AL

           MOV AX,data
           MOV DS,AX
           MOV DX,OFFSET mes
           MOV AH,09h            ;显示字符串
           INT 21h
  send: MOV DX,proc_51      ;控制口读入
           IN AL,DX
           TEST AL,01h          ;发送是否准备好
           JZ send                ;未准备好 继续读

           MOV AH,07h            ;dos中断 键盘输入输出一个字符 输入后只存al 比较时不能用扫描码
           INT 21h                ;无回显
           CMP AL,1bh            ;或 27
           JE exit

           MOV AH,0eh            ;BIOS中断 显示一个字符
           INT 10h
           ADD AL,3               ;加3后发送
           MOV DX,prod_51      ;2b8为8251数据口地址
           OUT DX,AL             ;加3后从数据口发送
   recv:MOV DX,proc_51      ;控制口读入
           IN AL,DX
           TEST AL,02h          ;接收是否准备好
           JZ recv                ;未准备好 继续读
           MOV DX,prod_51      ;从8251数据口读入加3后发送的数据
           IN AL,DX
           MOV AH,0eh            ;BIOS中断 显示一个字符
           INT 10h
           JMP send
  exit: MOV AH,4ch
           INT 21h
code    ENDS
           END main

Tags:   8251  Serial  Communication

Comments

抱赖皮的宝宝

你好,麻烦你能帮我写个程序吗?我们课程设计的题目,我不太会呀,要小命了~
你先看看吧。
利用8251实现两台PC之间的异步串行通信
一 设计要求:
1、用8251可编程接口电路设计该电路。
2、异步通讯的波特率是9600,数据位是7位,偶检验,1位停止位。双方使用双工通信方式。
3、设计电路并编写有关程序。
谢谢了!

2006-12-29 12:16:04
rui

to 抱赖皮的宝宝:自己动手、丰衣足食

2007-01-02 01:35:20
抱赖皮的宝宝

我哭~~~

2007-01-03 09:24:58
鸣人君

晕,我也想请教.估计你要我自己动手了55555555555

2007-01-04 10:31:32
hao

INIT

2008-01-04 13:53:10

Leave a Comment

Name
Content
Verification Type the characters you see in the picture below