📄 h0832-4.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 + -