代码和文档链接如下:
http://download.csdn.net/detail/shaellancelot/8450423
第一题:
主片初始化:
MOV AL,11H ; ICW1特征位为1,边沿触发(LTIM=0),多篇级联(SNGL=0),16位机需要写入ICW4(IC4=1),故ICW1为00010001B = 11H
OUT 20H,AL ; 写ICW1
MOV AL,08H ; 主片中断类型号为08H~0FH,故ICW2为08H
OUT 21H,AL ; 写ICW2(ICW1必须写入偶地址端口,ICW2~ICW4必须写入奇地址端口)
MOV AL,24H ; 主片的IR2与IR5有从片,故ICW3为00100100B = 24H
OUT 21H,AL ; 写ICW3(ICW1~ICW4的设置次序不能颠倒)
MOV AL,01H ; 主片为16位机系统(μPM=1),非缓冲(BUF=M/S=0),完全嵌套(SFNM=0),故ICW4为00000001B=01H
OUT 21H,AL ; 写ICW4
从片1初始化:
MOV AL,11H ; ICW1特征位为1,边沿触发(LTIM=0),多篇级联(SNGL=0),16位机需要写入ICW4(IC4=1),故ICW1为00010001B = 11H
OUT 0A0H,AL; 写ICW1
MOV AL,70H ; 从片中断类型号为70H~77H,故ICW2为70H
OUT 0A1H,AL; 写ICW2
MOV AL,02H ; 从片连入主片的IR2,故ICW3为02H
OUT 0A1H,AL; 写ICW3
MOV AL,01H ; 主片为16位机系统(μPM=1), 非缓冲(BUF=M/S=0),完全嵌套(SFNM=0),故ICW4为00000001B=01H
OUT 0A1H,AL; 写ICW4
从片2初始化:
MOV AL,11H ; ICW1特征位为1,边沿触发(LTIM=0),多篇级联(SNGL=0),16位机需要写入ICW4(IC4=1),故ICW1为00010001B = 11H
OUT 0C0H,AL; 写ICW1
MOV AL,90H ; 从片中断类型号为90H~97H,故ICW2为90H
OUT 0C1H,AL; 写ICW2
MOV AL,05H ; 从片连入主片的IR5,故ICW3为05H
OUT 0C1H,AL; 写ICW3
MOV AL,01H ; 主片为16位机系统(μPM=1),非缓冲(BUF=M/S=0),完全嵌套(SFNM=0),故ICW4为00000001B=01H
OUT 0C1H,AL; 写ICW4
第二题:
甲方:
MOV DX,303H;--初始化,8255A命令口地址,写控制字
MOV AL,81H ;方式字的特征位为1,使用A口且方式为0(D6D5=00),PA为输出(D4=0),PC4~7为输出(D3=0),PC0~3为输入(D0=1),故方式
;字为10000001B=81H
OUT DX,AL ;设置方式字
MOV AL,0FH ;甲为方式0,在方式0下,PC上为输出,输出高电平有效(置位D0=1),PC下为输入
OUT DX,AL ;设置C口,置STB无效
LEA SI,SRC ;将内存地址写入SI
MOV CX,1024 ;CX存放数据个数
L: MOV DX,302H;--数据传输
IN AL,DX ;设置端口C的地址
AND AL,04H ;由PC2读取对方IBF
JNZ L ;查看IBF对否为0,如果不是说明乙方接口被占用,则跳转到L
MOV DX,300H;A口地址
MOV AL,[SI]
OUT DX,AL ;发送地址SI的数据
MOV DX,303H
MOV AL,0EH ;对C口进行复位
OUT DX,AL ;设置C口
NOP
;STB输出信号告知对方已写入完毕
NOP
MOV AL,0FH ;对C口进行置位
OUT DX,AL ;设置C口
INC SI
LOOP L
END
;结束
第三题:
T0初始化:
MOV DX,43H;进入8253实验台端口
MOV AL,35H ;T0控制字(SC1SC0=00),其设置为:先低后高读/写俩个字节
;(RL1RL2=11),方式2分频脉冲发生器(M2M1M0=010),计数码制为
;BCD(BCD=1),故方式字为00110101B=35H
OUT DX,AL
;设置方式字
MOV DX,40H ;读T0,值为8000(T0与T1值得乘积因为40000000)
MOV AL,00H
;低字节
OUT DX,AL
;读低字节
MOV AL,80H
;高字节
OUT DX,AL
;读高字节
T1初始化:
MOV DX,43H
MOV AL,77H ;T1控制字(SC1SC0=01),其设置为:先低后高读/写俩个字节
;(RL1RL2=11),方式3分频脉冲发生器(M2M1M0=011),计数码制为
;BCD(BCD=1),故方式字为01110111B=77H
OUT DX,AL
;设置方式字
MOV DX,41H;加载T1(向T1写入初值)
MOV AL,00H
;低字节,值为5000
OUT DX,AL
;写入低字节
MOV AL,50H
;高字节
OUT DX,AL
;写入高字节
第四题:
MOV
AL,40H ;8251复位命令
OUT
52H,AL
MOV
AL,0FAH
;方式命令字,传输采用异步方式:2停止位(D7D6=11),偶校验(D5D4=11),七位数据(D3D2=10),波特率因子16(D1D0=10),故方式字为 ;11111010B=0FAH
OUT
52H,AL ;设置方式字
MOV
AL,37H
;工作命令字:请求发送(RTS=1),清状态寄存器出错(ER=1),
;允许接收(RxE=1),DTR = 1,,允许发送(TxE=1),故命令字为00110111B=37H
OUT
52H,AL ;设置命令字
MOV
SI,SRC ;SI保存SRC的地址
MOV
CX,80 ;CX保存要传输的字符数
B: IN
AL,52H ;状态寄存器
TEST AL,02H ;RxRDY=1,已收到一字符
JZ
B ;如果TxRDY = 0则等待
MOV
52H,50H
MOV
AL,[SI]
;如果TxRDY = 1则输出
OUT
52H,AL
INC
SI
LOOP B