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
| ;此案例中8255的四个端口地址依次为 280H 281H 282H 283H ; 8254的依次为 298H 299H 29AH 29BH ;8255接Y0 8254接Y3 ;此程序实现目标,通过开关D0来启动或终止跑马灯,每个灯亮延时2s ;这里是用8255的A口来输入8254处理过的脉冲信号,B口输出,C口输入开关状态 CODE SEGMENT ASSUME CS:CODE
START: MOV DX,283H MOV AL,10011001B OUT DX,AL ;向8255写入控制字 -- 初始化8254 使其达到一个2s的延时效果---这里使用了一个级联的方式,使用了1号通道和2号通道级联; MOV AL,01110101B ;写入8254 1号通道的控制字 MOV DX,29BH OUT DX,AL MOV AL,00H MOV DX,299H OUT DX,AL MOV AL,10H OUT DX,AL MOV AL,10110111B ;写入8254 2号通道的控制字 MOV DX,29BH OUT DX,AL MOV AL,00H MOV DX,29AH OUT DX,AL MOV AL,40H OUT DX,AL ;初始化结束
MOV BL,04H ;设定初值,暂存于BL中 ;读入开关状态,是否是D0接入 T1: MOV DX,282H IN AL,DX TEST AL,01H ;00000001B JZ T1 ;读8254输出电平的状态,若为低电平则继续循环,等待高电平到来 T2: MOV DX,280H IN AL,DX TEST AL,01H JZ T2 ;前面都准备就绪,开始让第三个灯亮 MOV DX,281H MOV AL,BL OUT DX,AL T4: ;测试此时是否为高电平, MOV DX,280H IN AL,DX TEST AL,01H JNZ T4 ;当此刻为高电平,则完成了延时过程,实现了延时2s ;循环左移一位 ROL BL,1 JMP T1
CODE ENDS END START
|