1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| COM_ADD EQU 0273H PA_ADD EQU 0270H PB_ADD EQU 0271H PC_ADD EQU 0272H _STACK SEGMENT STACK DW 100 DUP(?) _STACK ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CODE SEGMENT START PROC NEAR ASSUME CS:CODE, DS:_DATA, SS:_STACK MOV AX,_DATA ; 将数据段地址加载到AX寄存器 MOV DS,AX ; 将数据段地址传送给数据段寄存器DS NOP MOV DX,COM_ADD ; 将串口地址传送给DX寄存器 MOV AL,82H ; 设置AL寄存器的值为82H OUT DX,AL INPUT: ; 清零操作 MOV AX, 0FFFFH MOV DX, PA_ADD OUT DX, AX MOV DX, PC_ADD OUT DX, AX ; 输入操作 MOV DX, PB_ADD IN al, DX mov ah, 0 ; 判断 CMP al, 0D0H JZ mid cmp al, 0FH JZ lar1 cmp al, 0F0H JZ ral1 CMP al, 0FFH ;全1, JZ low1 CMP al, 0 ;全0 JZ high1 MOV DX, PA_ADD OUT DX, al JMP INPUT ; 处理输入值为0-7的情况 mid: shl al,4 shr al,4 shr ah,4 add al,ah mov ah,0 mov dx, PA_ADD ;00001101 out dx,ax jmp INPUT
; 处理输入值为0-7的情况 ral1: MOV al, 7FH ; 设置AL寄存器的值为7FH MOV DX, PA_ADD ; 将并口PA地址传送给DX寄存器 ral2: ROR al, 1 ; 将AL寄存器的值左循环移位1位 OUT DX, al CALL Delay CMP al, 7FH JNE low2 MOV AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF OUT DX, AX ; 处理输入值为8-15的情况 ral3: MOV al, 7FH MOV DX, PC_ADD ral4: ROL al, 1 OUT DX, al CALL Delay CMP al, 7FH JNE low4 JMP INPUT
; 处理输入值为0-7的情况 lar1: MOV al, 7FH ; 设置AL寄存器的值为7FH MOV DX, PA_ADD ; 将并口PA地址传送给DX寄存器 lar2: ROL al, 1 ; 将AL寄存器的值左循环移位1位 OUT DX, al CALL Delay CMP al, 7FH JNE low2 MOV AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF OUT DX, AX ; 处理输入值为8-15的情况 lar3: MOV al, 7FH MOV DX, PC_ADD lar4: ROR al, 1 OUT DX, al CALL Delay CMP al, 7FH JNE low4 JMP INPUT
; 处理输入值为0-7的情况 low1: MOV al, 7FH ; 设置AL寄存器的值为7FH MOV DX, PA_ADD ; 将并口PA地址传送给DX寄存器 low2: ROL al, 1 ; 将AL寄存器的值左循环移位1位 OUT DX, al CALL Delay CMP al, 7FH JNE low2 MOV AX, 0FFFFH ; 将AX寄存器的值设为0xFFFF OUT DX, AX ; 处理输入值为8-15的情况 low3: MOV al, 7FH MOV DX, PC_ADD low4: ROL al, 1 OUT DX, al CALL Delay CMP al, 7FH JNE low4 JMP INPUT
; 处理输入值为15-8的情况 high1: MOV al, 0FEH MOV DX, PC_ADD high2: ROR al, 1 OUT DX, al CALL Delay CMP al, 0FEH JNE high2 MOV AX, 0FFFFH OUT DX, AX ; 处理输入值为7-0的情况 high3: MOV al, 0FEH MOV DX, PA_ADD high4: ROR al, 1 OUT DX, al CALL Delay CMP al, 0FEH JNE high4 JMP INPUT
Delay PROC NEAR Delay1: XOR CX,CX LOOP $ RET Delay ENDP
START ENDP CODE ENDS END START
|