文档库 最新最全的文档下载
当前位置:文档库 › 上海交通大学嵌入式系统原理与实验8086实验二晶体管循环显示实验源代码

上海交通大学嵌入式系统原理与实验8086实验二晶体管循环显示实验源代码

;-----------------------------------------------------------
;
; Build this with the "Source" menu using
; "Build All" option
;
;-----------------------------------------------------------
;
; 实验二示例程序

;-----------------------------------------------------------
; |
; |
; 功能:控制7段数码管的显示 |
; 编写:《嵌入式系统原理与实验》课程组 |
;-----------------------------------------------------------
DOSSEG
.MODEL SMALL ; 设定8086汇编程序使用Small model
.8086 ; 设定采用8086汇编指令集
;-----------------------------------------------------------
; 符号定义 |
;-----------------------------------------------------------
;
; 8255芯片端口地址 (Port number)分配:
PortA EQU 90H ; Port A's port number in I/O space
PortB EQU 92H ; Port B's port number in I/O space
PortC EQU 94H ; Port C's port number in I/O space
CtrlPT EQU 96H ; 8255 Control Register's port number in I/O space
;
Patch_Protues EQU IN AL, 0 ; Simulation Patch for Proteus, please ignore this line


;-----------------------------------------------------------
; 定义数据段 |
;-----------------------------------------------------------
.data ; 定义数据段;

DelayShort dw 40 ; 短延时参量
DelayLong dw 40000 ; 长延时参量

; 显示数字
DISCHAR DB 01,02,03,04

; SEGTAB是显示字符0-F,其中有部分数据的段码有错误,请自行修正
SEGTAB DB 3FH ; 7-Segment Tube, 共阴极类型的7段数码管示意图
DB 06H ;
DB 5BH ; a a a
DB 4FH ; f b
DB 66H ; f b
DB 6DH ; f b
DB 7DH ; g g g
DB 07H ; e c
DB 7FH ; e c
DB 6FH ; e c
DB 77H ; d d d h h h
DB 7CH ; ----------------------------------
DB 39H ; b7 b6 b5 b4 b3 b2 b1 b0
DB 5EH ; DP g f e d c b a
DB 79H ;
DB 71H ;


;-----------------------------------------------------------
; 定义代码段 |
;-----------------------------------------------------------
.code ; Code segment definition
.startup ; 定义汇编程序执行入口点
;------------------------------------------------------------------------
Patch_Protues ; Simulation Patch for Proteus,
; Please ignore the above code line.
;------------------------------------------------------------------------


; Init 8255 in Mode 0
; PortA Output, PortB Output
;
MOV AL,10000000B
OUT CtrlPT,AL ;
;
; 把数字1、2、3

、4显示在数码管上
;

L1: MOV CX,100
M1:
CALL State1
LOOP M1
MOV CX,100
M2:
CALL State2
LOOP M2
MOV CX,100
M3:
CALL State3
LOOP M3
MOV CX,100
M4:
CALL State4
LOOP M4
JMP L1

RET

;--------------------------------------------
; |
; Delay system running for a while |
; CX : contains time para. |
; |
;--------------------------------------------
State1 PROC
MOV AL, 0FEh
OUT PortA,AL
MOV AL,SEGTAB
OUT PortB,AL
CALL DELAY ; ??? 此处为何需要调研DELAY子程序?

MOV AL, 0FDh
OUT PortA,AL
MOV AL,SEGTAB + 1
OUT PortB,AL
CALL DELAY ; ???Delay程序的延时对演示时的什么方面会产生影响?

MOV AL, 0FBh
OUT PortA,AL
MOV AL,SEGTAB + 2
OUT PortB,AL
CALL DELAY

MOV AL, 0F7h
OUT PortA,AL
MOV AL,SEGTAB + 3
OUT PortB,AL
CALL DELAY

RET
State1 ENDP
State2 PROC
MOV AL, 0FEh;晶体管0亮
OUT PortA,AL
MOV AL,SEGTAB+3
OUT PortB,AL
CALL DELAY ; ??? 此处为何需要调研DELAY子程序?

MOV AL, 0FDh
OUT PortA,AL
MOV AL,SEGTAB + 0
OUT PortB,AL
CALL DELAY ; ???Delay程序的延时对演示时的什么方面会产生影响?

MOV AL, 0FBh
OUT PortA,AL
MOV AL,SEGTAB + 1
OUT PortB,AL
CALL DELAY

MOV AL, 0F7h
OUT PortA,AL
MOV AL,SEGTAB +2
OUT PortB,AL
CALL DELAY
RET
State2 ENDP
State3 PROC
MOV AL, 0FEh;晶体管0亮
OUT PortA,AL
MOV AL,SEGTAB+2
OUT PortB,AL
CALL DELAY ; ??? 此处为何需要调研DELAY子程序?

MOV AL, 0FDh
OUT PortA,AL
MOV AL,SEGTAB + 3
OUT PortB,AL
CALL DELAY ; ???Delay程序的延时对演示时的什么方面会产生影响?

MOV AL, 0FBh
OUT PortA,AL
MOV AL,SEGTAB
OUT PortB,AL
CALL DELAY

MOV AL, 0F7h
OUT PortA,AL
MOV AL,SEGTAB +1
OUT PortB,AL
CALL DELAY
RET
State3 ENDP
State4 PROC
MOV AL, 0FEh;晶体管0亮
OUT PortA,AL
MOV AL,SEGTAB+1
OUT PortB,AL
CALL DELAY ; ??? 此处为何需要调研DELAY子程序?

MOV AL, 0FDh
OUT PortA,AL
MOV AL,SEGTAB +2
OUT PortB,AL
CALL DELAY ; ???Delay程序的延时对演示时的什么方面会产生影响?

MOV AL, 0FBh
OUT PortA,AL
MOV AL,SEGTAB +3
OUT PortB,AL
CALL DELAY

MOV AL, 0F7h
OUT PortA,AL
MOV AL,SEGTAB
OUT PortB,AL
CALL DELAY
RET
State4 ENDP

DELAY1 PROC
PUSH CX
MOV CX,DelayLong ;
D0: LOOP D0
POP CX
RET
DELAY1 ENDP


;--------------------------------------------
; |
; Delay system running for a while |
; |
;--------------------------------------------

DELAY PROC
PUSH CX
MOV CX,DelayShort
D1: LOOP D1
POP CX

RET
DELAY ENDP


;-----------------------------------------------------------
; 定义堆栈段 |
;-----------------------------------------------------------
.stack 100h ; 定义256字节容量的堆栈


END ;指示汇编程序结束编译

相关文档
相关文档 最新文档