⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h0832-4.asm

📁 案例2产生随机数并运算的程序 微机原理课程设计
💻 ASM
字号:
CODE 	SEGMENT
	ASSUME 		CS:CODE
	DAPORT		EQU 	0070H	;DAC0832端口	
	CONTPORT 	EQU 	00DFH	;8279控制口
	DATAPORT 	EQU 	00DEH	;8279数据口

IOCONPT EQU 0063H	;8255A的控制口
IOCPT	EQU 0062H	;8255A的PC口(输入)
IOBPT	EQU 0061H	;8255A的PB口(输出)

	DATA		EQU 	0500H	;显示RAM偏移地址,8位段码存放在CS:[500H]~CS:[507H]
	JUMP		EQU	0600H	;判断转移偏移量
	VAL		EQU	0604H	;数据量
START:	JMP 	DACONTORL
;----------
SIN	DB	0, 2, 4, 7, 9, 11, 13, 16, 18, 20		;0-9
	DB	22,24,27,29,31,33,35,37,39,42			;10-19
	DB	44,46,48,50,52,54,56,58,60,62			;20-29
	DB	64,66,68,69,71,73,75,77,78,80			;30-39
	DB	82,84,85,87,89,90,92,93,95,96			;40-49
	DB	98,99,100,102,103,104,106,107,108,109		;50-59
	DB	110,112,113,114,115,116,116,117,118,119		;60-69
	DB	120,121,121,122,123,123,124,124,125,125		;70-79
	DB	126,126,126,127,127,127,127,127,127,127,127,127	; 80-89+90
DACONTORL:CALL 	FORMAT
	CALL 	LEDDISP
	CALL	INIT
LOOPk:
MOV DX,IOCPT
	IN AL,DX
AND	AL,03H
MOV	DS:[0600H],AL
	MOV DX,IOBPT
	NOT	AL
	OUT DX,AL
MOV	DX,DAPORT
MOV	AL, DS:[0600H]
	CMP	AL,0
	JE	L0
	CMP	AL,1
	JE	L1
	CMP	AL,2
	JE	L2
	CMP	AL,3;SIN处理=3
	JE	L3

	JMP	LOOPk
L0:	;
;方波处理
	MOV BYTE PTR DS:[0500H],3FH
	CALL	LEDDISP
	CALL	SQUARE;方波处理
	JMP	LOOPk
L1:	;锯齿波处理
	MOV BYTE PTR DS:[0500H],06H
	CALL	LEDDISP
	CALL 	hackle;;锯齿波处理
	JMP	LOOPk
L2:	
		MOV BYTE PTR DS:[0500H],5BH
	CALL	LEDDISP
	CALL	trigonal;三角波处理	
	JMP	LOOPk
L3:     		MOV BYTE PTR DS:[0500H],4FH
	CALL	LEDDISP
	CALL	sinusoid;正弦函数处理
	JMP	LOOPk

ERROR:	MOV BYTE PTR DS:[VAL],0
	JMP	SQUARE1	
SQUARE:;方波处理
	MOV	AL,DS:[VAL]
	CMP	AL,0
	JNE	CHECK
	JMP	SQUARE1
CHECK:	CMP	AL,0FFH
	JNE	ERROR
	;
SQUARE1:MOV	CX,DS:[0602H]	;取度数	
	CMP	CX,180
	JAE	SQUARE2
		;SQUARE0
	MOV	AL,DS:[VAL]
	OUT	DX,AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
	
SQUARE2:MOV	WORD PTR DS:[0602H],0
	MOV	AL,DS:[VAL]
	NOT	AL
	MOV	DS:[VAL],AL
	RET

hackle:;;锯齿波处理
	MOV	AL,DS:[VAL]
	OUT	DX,AL
	INC	AL
	MOV	DS:[VAL],AL
	RET	

;-----trigonal---------------------
;功能:根据当前计数X,计算采用增量/减量的方式计算D/A数值(0-255增量;256-512减量);保存得到的D/A数值,将得到的值送D/A转换,计数+1
;入口参数:无
;出口参数:无 
;说明:DS:[0602H]存放当前计数,CX用于暂存度数;DS:[VAL]存放当前D/A数值。
trigonal:;三角波处理
	MOV	CX,DS:[0602H]	;取度数	0-255*2
	CMP	CX,256
	JAE	trigonal1
		;0-255  +++
	MOV	AL,DS:[VAL]
	OUT	DX,AL
	INC	AL
	MOV	DS:[VAL],AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
trigonal1:CMP	CX,512
	JAE	trigonal2
		;255-512  ---
	MOV	AL,DS:[VAL]
	DEC	AL
	OUT	DX,AL

	MOV	DS:[VAL],AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
trigonal2:MOV	BYTE PTR DS:[VAL],0
	MOV	WORD PTR DS:[0602H],0
	RET

;-----sinusoid----------------------
;功能:根据当前度数X,查表得到增量127.5*SIN(X),根据度数所在象限,确定127.5加或者减查表得到的增量;将得到的值送D/A转换,度数+1
;入口参数:DI:SIN函数表头
;出口参数:无
;说明:DS:[0602H]存放当前度数,CX用于暂存度数;SI指向当前度数增量的绝对值在表中的位置。
sinusoid:;正弦函数处理
	MOV	CX,DS:[0602H]	;取度数
	CMP	CX,90
	JA	quadrant2
		;quadrant1
	MOV	SI,DI
	ADD	SI,CX
	MOV	AL,[SI]
	ADD	AL,127
	OUT	DX,AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
quadrant2:
	MOV	CX,DS:[0602H]	;取度数
	CMP	CX,180
	JA	quadrant3
	MOV	SI,DI
		;quadrant2
	ADD	SI,180
	SUB	SI,CX
	MOV	AL,[SI]
	ADD	AL,127
	OUT	DX,AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
quadrant3:	
	MOV	CX,DS:[0602H]	;取度数
	CMP	CX,270
	JA	quadrant4
	MOV	SI,DI
		;quadrant3
	ADD	SI,CX
	SUB	SI,180
	MOV	BL,[SI]
MOV	AL,127
	SUB	AL,BL
	OUT	DX,AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
quadrant4:	
	MOV	CX,DS:[0602H]	;取度数
	CMP	CX,360
	JAE	quadrant5
	MOV	SI,DI
		;quadrant3
	ADD	SI,360
	SUB	SI,CX
	MOV	BL,[SI]
MOV	AL,127
	SUB	AL,BL
	OUT	DX,AL
	INC	CX
	MOV	DS:[0602H],CX
	RET
quadrant5:MOV	WORD PTR DS:[0602H],0
	RET
;------INIT----------------
;功能:
;入口参数:
;出口参数:
INIT:	;
	MOV AL,89H
	MOV DX,IOCONPT
	OUT DX,AL
	MOV	BYTE PTR DS:[JUMP],3;SIN
	MOV	BYTE PTR DS:[VAL],0
	MOV	WORD PTR DS:[0602H],0
	MOV	SI,OFFSET  SIN
        ADD  	SI,1000H
	MOV	DI,SI
;	MOV 	DX,DAPORT	
	RET

;-----------DELE----------------
;功能:软件延时
;入口参数:
;出口参数:
DELE:	PUSH	CX
	MOV 	CX,02H
DACON2: LOOP 	DACON2
	POP	CX
	RET
;===========================
;
;-----LEDDISP-----------------------
;功能:将DS:[0500H]开始的8个显示段码送8279显示
;入口参数:无
;出口参数:无
;说明:程序中BX用于计数(0~7),向8279控制口写90H控制字的含义为:8279显示RAM自动+1
LEDDISP:PUSH	DX
	PUSH	AX
	PUSH	BX		;现场保护
	MOV 	AL,90H
	MOV 	DX,CONTPORT
	OUT 	DX,AL
; 8279 显示RAM地址自动增1
	MOV	BX,0
LED1:	CMP	BX,7
	JA	LED2
	MOV	AL,DS:[BX+DATA]
	MOV	DX,DATAPORT
	OUT	DX,AL
	INC	BX
	JMP	LED1
LED2:	POP	BX
	POP	AX
	POP	DX		;现场恢复
	RET	
;===========================================
;
;-----FORMAT-----------------------
;功能:将0832--01八个段码送DS:[0500H]开始的连续8个单元,供LEDDISP过程调用
;入口参数:无
;出口参数:无
;说明:程序中3F为0的段码;7FH为8的段码;4F为3的段码;5BH为2的段码;40H为-的段码06H为1的段码
;DP,G,F,E,D,C,B,A八段中DP段为D7,A段为D0(数据低位)
FORMAT: MOV BX,0
	MOV WORD PTR DS:[BX+0500H],3F06H	;
	ADD BX,2
	MOV WORD PTR DS:[BX+0500H],4040H	;
	ADD BX,2
	MOV WORD PTR DS:[BX+0500H],4F5BH	;
	ADD BX,2
	MOV WORD PTR DS:[BX+0500H],3F7FH	;
	ADD BX,2
	RET

CODE 	ENDS
END 	START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -