汇编课程设计实现电子时钟

利用8259,8254,8255实现以秒为单位的计时。(第一次写博客,有什么不懂就留言吧!)

TIMER0 EQU 0600H
TIMER1 EQU 0602H
TIMER2 EQU 0604H
TIMERM EQU 0606H
P8255A EQU 0640H
P8255B EQU 0642H
P8255C EQU 0644H
P8255M EQU 0646H
DATA SEGMENT
DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0–7的显示代码
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8–F的显示代码
INDEX DB 6,5,4,3,2,1,0CCH,0CCH
DYNBUFF DB 06H,5BH,4FH,66H,6DH,7DH,00H,00H ;动态显示缓冲
LEDCODE DB 00H,00H,00H,00H,00H,00H,00H,00H ;动态显示位置控制
HOUR DB 12 ;小时
MINUTE DB 34 ;分钟
SECOND DB 26 ;秒

COUNT DB 00
STATUS DB 01H
DATA ENDS

SSTACK SEGMENT PARA STACK ‘STACK’
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSTACK
START: MOV AX,DATA
MOV DS,AX
;--------------------------------------------------------------- 8255初始化
INITA: MOV DX, 0646H
MOV AL, 10000000B
OUT DX, AL

;--------------------------------------------------------------- 中断芯片
INITB: PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET MIR7
MOV SI,003CH
MOV [SI],AX
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
MOV AX,OFFSET MIR6
MOV SI,0038H
MOV [SI],AX
MOV AX,CS
MOV SI,003AH
MOV [SI],AX
MOV AX, OFFSET SIR1
MOV SI, 00C4H
MOV [SI], AX
MOV AX, CS
MOV SI, 00C6H
MOV [SI], AX
CLI
POP DS
;--------------------------------------------------------------- 主
MOV AL,11H
OUT 20H,AL ;ICW1
MOV AL,08H
OUT 21H,AL ;ICW2
MOV AL,04H
OUT 21H,AL ;ICW3
MOV AL,01H
OUT 21H,AL ;ICW4
;-------------------------------------------------------------初始化从片8259
MOV AL, 11H
OUT 0A0H, AL ;ICW1
MOV AL, 30H
OUT 0A1H, AL ;ICW2
MOV AL, 02H
OUT 0A1H, AL ;ICW3
MOV AL, 01H
OUT 0A1H, AL ;ICW4
;---------------------------------------------------------------
MOV AL, 0FDH ;OCW1 = 1111 1101B
OUT 0A1H,AL
MOV AL,2BH ;OCW1 = 00101011B
OUT 21H,AL
STI
;AA1: NOP
; JMP AA1
;--------------------------------------------------------------- 定时器芯片
INITC:MOV DX, TIMERM
MOV AL,36H ;0011 0110
OUT DX,AL
MOV DX, TIMER0 ;计数器0
MOV AX,5000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX, TIMERM
MOV AL,76H ;0111 0110
OUT DX,AL
MOV DX, TIMER1 ;计数器1
MOV AX,18432
OUT DX,AL
MOV AL,AH
OUT DX,AL

;---------------------------------------------------------------
BEGIN:;CALL DISPLY7

AA2:	JMP			AA2

;---------------------------------------------------------------
MIR7 PROC NEAR
PUSH AX
PUSH DX
MOV AX,0137H
INT 10H

		CALL CONVERT1
		CALL CONVERT2
        CALL DISPLY7
		


		MOV		AL,20H
		OUT		20H,AL
		POP			DX
		POP			AX	
				
		IRET

MIR7 ENDP
;---------------------------------------------------------------
MIR6 PROC NEAR
PUSH AX
PUSH DX
MOV AX,0136H
INT 10H

		CALL TIME
       
		MOV		AL,20H
		OUT		20H,AL
		
		
		POP			DX
		POP			AX			
		IRET
MIR6	ENDP	

SIR1 PROC NEAR
PUSH AX
PUSH DX
MOV AL, 20H
OUT 0A0H, AL
OUT 20H, AL
POP DX
POP AX
IRET
SIR1 ENDP

TIME PROC NEAR ;
PUSH AX
PUSH DX

	MOV AL,SECOND;
	INC AL
	MOV SECOND,AL
	CMP AL,60		
	JB RESULT
	MOV SECOND,0
	
	MOV AL,	MINUTE
	INC AL
	MOV MINUTE,AL
	CMP AL,60
	JB RESULT
	MOV MINUTE,0
	
	MOV AL,	HOUR
	INC AL
	MOV HOUR,AL
	CMP AL,24
	JB RESULT
	MOV HOUR,0
	
	RESULT:NOP
	POP	DX
POP	AX
RET

TIME ENDP

DISPLY1 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11111110B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF
OUT DX,AL
POP DX
POP AX
RET
DISPLY1 ENDP

DISPLY2 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11111101B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF+1
OUT DX,AL
POP DX
POP AX
RET
DISPLY2 ENDP

DISPLY3 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11111011B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF+2
OUT DX,AL
POP DX
POP AX
RET
DISPLY3 ENDP

DISPLY4 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11110111B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF+3
OUT DX,AL
POP DX
POP AX
RET
DISPLY4 ENDP

DISPLY5 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11101111B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF+4
OUT DX,AL
POP DX
POP AX
RET
DISPLY5 ENDP

DISPLY6 PROC NEAR ;
PUSH AX
PUSH DX
MOV DX,P8255A
MOV AL,11011111B
OUT DX,AL
MOV DX,P8255B
MOV AL,DYNBUFF+5
OUT DX,AL
POP DX
POP AX
RET
DISPLY6 ENDP

DISPLY7 PROC NEAR ;
PUSH AX
PUSH DX
MOV AL,STATUS
ROL AL,01H
MOV STATUS,AL

	TEST AL,00000001B
	JNZ DIS	
		
	TEST AL,00000010B
	JNZ DIS1	

	TEST AL,00000100B
	JNZ DIS2	
	TEST AL,00001000B
	JNZ DIS3	
		
	TEST AL,00010000B
	JNZ DIS4	

	TEST AL,00100000B
	JNZ DIS5	

DIS:CALL DISPLY1
	JMP DOWN
DIS1:CALL DISPLY2
	JMP DOWN
DIS2:CALL DISPLY3
	JMP DOWN
DIS3:CALL DISPLY4
	JMP DOWN
DIS4:CALL DISPLY5
	JMP DOWN
DIS5:CALL DISPLY6
	JMP DOWN
DOWN :NOP

	POP	DX
	POP	AX
	RET

DISPLY7 ENDP

CONVERT1 PROC NEAR ;
PUSH AX
PUSH BX
XOR AH,AH ;HOUR
MOV AL,HOUR
MOV BL,10
DIV BL

	;	XLAT
		MOV INDEX,AL 
		MOV INDEX+1,AH

        
       	XOR AH,AH       ;MINUTE
        MOV AL,MINUTE
        MOV BL,10
        DIV BL
        
	;	XLAT
		MOV INDEX+2,AL
		MOV INDEX+3,AH

        
       	XOR AH,AH       ;SECOND
        MOV AL,SECOND
        MOV BL,10
        DIV BL
        
	;	XLAT
		MOV INDEX+4,AL
		MOV INDEX+5,AH

	POP	BX
    POP	AX
RET

CONVERT1 ENDP

CONVERT2 PROC NEAR ;
PUSH AX
PUSH BX

	LEA  BX,DISCODE
	MOV AL,INDEX
	XLAT
	MOV DYNBUFF,AL
	
	MOV AL,INDEX+1
	XLAT
	MOV DYNBUFF+1,AL
	
	
	MOV AL,INDEX+2
	XLAT
	MOV DYNBUFF+2,AL
	
	MOV AL,INDEX+3
	XLAT
	MOV DYNBUFF+3,AL
	
	MOV AL,INDEX+4
	XLAT
	MOV DYNBUFF+4,AL
	
	MOV AL,INDEX+5
	XLAT
	MOV DYNBUFF+5,AL

       
        
  
	POP	BX
 POP	AX
RET

CONVERT2 ENDP
CODE ENDS
END START

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值