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

📄 3.txt

📁 通过8255A和0832
💻 TXT
字号:
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:        ;三角波处理
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:       ;正弦函数处理
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 + -