计算机与接口通信期末作业(国软)

代码和文档链接如下:

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

你可能感兴趣的:(嵌入式)