汇编语言程序设计实验三 8255LED灯简单设计

题目一  8255简单编程实现LED灯开关

要求:采用并行接口8255A编写一个用开关量控制LED灯的程序,在微机原理实验仪上调试,运行后可以看到LED灯在对应开关量控制下点亮或熄灭

将实验台8255接口A0、A1孔对应连接实验仪器上地址总线的A0、A1孔,8255A的CS孔连接地址端口的320H孔(则8255A的端口地址分别为A口地址320H, B口地址321H,C口地址322H,控口地址323H)。8255A的PA0~PA7孔对应接开关量发生器0~7孔,PB0~PB7孔对应接LED灯0~7孔。

在实验仪器上,当开关向上拨动时产生低电平,向下拨动时产生高电平。当LED灯接收低电平时点亮,接收高电平时熄灭。

分析


  • A口地址320H, B口地址321H,C口地址322H,控口地址323H,故控制字需要写入323H
  • A口输入,B口输出,工作方式0,由此可得控制字为:10010000=90H
1 0 0 1 0 0 0 0
  • 把控制字放入AL寄存器中(MOV AL,90H),把323H放入DX寄存器中(MOV DX,323H),OUT DX,AL;把AL中的寄存器输出到控口中
  • 要从A口输入:MOV DX,320H, IN AL,DX;因为320H>0FFH,所以需要放入DX寄存器中再与AL进行操作
  • 要从B口输出:MOV DX,321H, OUT DX,AL
  • 因为要实时监测开关的状态,所以设置一个死循环,不停执行以便于实时监测开关的输入信号是开还是关,开关拨动的次数与循环的次数无关,不管拨不拨动开关循环都会一刻不停的执行;当然也可以加入延时操作让其自动停止

代码

死循环 

CODE  SEGMENT
ASSUME  CS: CODE
START: MOV AL, 90H ; 方式0,A口输入,B口输出
		 MOV DX, 323H
		 OUT DX, AL		
AGAIN: MOV DX, 320H
		 IN AL, DX
		 MOV DX, 321H
OUT DX, AL
		 JMP AGAIN		
CODE  ENDS
		END  START

加入延时操作自动退出

CODE  SEGMENT
ASSUME  CS: CODE
        SSS=325
START: MOV AL, 82H ; 方式0,B口输入,C口输出
       MOV DX, 343H;设置控制端口地址
       OUT DX, AL
AGAIN: MOV DX, 320H
       IN AL, DX
       MOV DX, 321H
       OUT DX, AL
       ;设置延时5s
       MOV AL,5
       ;调用子程序
       CALL DELAY
       
       MOV AH,4CH
       INT 21H
       
       ;延时5s子程序
       DELAY PROC
          D0: MOV CX,1000
          D1: MOV BX,SSS
          D2:DEC BX
          JNZ D2
          DEC CX
          JNZ D1
          DEC AL
          JNZ D0
          
          RET
       DELAY ENDP
       
CODE  ENDS
END  START

题目二  8255简单编程实现开关向下拨动LED灯亮

题目:假设端口起始地址为340H,连线并编写程序实现通过B口输入开关状态,并通过C口输出到LED灯,使得开关向上拨动时LED灯熄灭

你可能感兴趣的:(微机原理与接口技术,硬件工程)