微机 信号发生器汇编.docx
《微机 信号发生器汇编.docx》由会员分享,可在线阅读,更多相关《微机 信号发生器汇编.docx(23页珍藏版)》请在冰豆网上搜索。
![微机 信号发生器汇编.docx](https://file1.bdocx.com/fileroot1/2022-11/16/c1c92d44-9910-499b-bf3e-c503ce08ebd8/c1c92d44-9910-499b-bf3e-c503ce08ebd81.gif)
微机信号发生器汇编
程序清单和程序注释
;***************根据CHECK配置信息修改下列符号值*******************
IOY0EQU0E400H;片选IOY0对应的端口始地址
IOY1EQU0E440H;片选IOY0对应的端口始地址
;*****************************************************************
MY8255_AEQUIOY0+00H*4;8255的A口地址
MY8255_BEQUIOY0+01H*4;8255的B口地址
MY8255_CEQUIOY0+02H*4;8255的C口地址
MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址
DA0832EQUIOY1+00H*4;DA0832的端口地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
SINTABDB19H,1EH,22H,27H,2BH,2EH,31H,32H;正弦函数表
DB33H,32H,31H,2EH,2BH,27H,22H,1EH
DB19H,14H,0FH,0BH,07H,04H,02H,01H
DB00H,01H,02H,04H,07H,0BH,0FH,14H
STR1DB'press1tooutputwave',0AH,0DH
DB'press2toquit',0AH,0DH,0AH,0DH,0AH,0DH,'$'
SQRTABDB00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H
DB13H,13H,13H,13H,13H,13H,13H,13H
DB13H,13H,13H,13H,13H,13H,13H,13H
STR2DB'press1tosinwave',0AH,0DH
DB'press2torecangle',0AH,0DH
DB'press3tosquare',0AH,0DH
DB'press4totriangle',0AH,0DH
DB'press5toreturn0',0AH,0DH,0AH,0DH,0AH,0DH,'$'
STR3DB'press1toreducefecency',0AH,0DH
DB'press2toincreasefecency',0AH,0DH
DB'press3toreduceamplitude',0AH,0DH
DB'press4toincreaseamplitude',0AH,0DH
DB'press5toreturn0',0AH,0DH,0AH,0DH,0AH,0DH,'$'
SQUDB'outputsqurewavenow.......',0AH,0DH,0AH,0DH,'$'
TRIDB'outputtrianglewavenow.......',0AH,0DH,0AH,0DH,'$'
RECDB'outputrecanglewavenow.......',0AH,0DH,0AH,0DH,'$'
SINDB'outputsinwavenow.......',0AH,0DH,0AH,0DH,'$'
AMPLDB3
FENCDB3
TIAOFUDB?
TIAOPINDB?
SQUAREDB?
KEYASSDB?
DATAENDS;键值表,0~F对应的7段数码管的段位值
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,3000H;建立缓冲区,存放要显示的键值
MOVAL,00H;先初始化键值为0
MOV[SI],AL
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOVDI,3003H
MOVDX,MY8255_MODE;初始化8255工作方式
MOVAL,81H;方式0,A口、B口输出,C口低4位输入
OUTDX,AL
PREBEGIN:
MOVAH,09H;显示第一个菜单
MOVDX,OFFSETSTR1
INT21H
MOVSI,3000H;把数码管清0
MOVAL,00H;先初始化键值为0
MOV[SI],AL
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOVDI,3003H
BEGIN:
CALLDIS;显示刷新
CALLGETKEY1;在第一菜单下,等待按键的按下
MOVSI,OFFSETKEYASS
MOVAL,[SI]
CMPAL,1;按下第二个键就退出
JZQUIT
CMPAL,0;按下第一个键进入第二个菜单
JZLBEGIN
JMPBEGIN;不是按下第一或二键就继续等待输入
LBEGIN:
MOVAH,09H;显示第二个标题
MOVDX,OFFSETSTR2
INT21H
LBEGIN4:
CALLGETKEY1;第二个菜单等待输入
MOVSI,OFFSETKEYASS
MOVAL,[SI]
CMPAL,4;第5个键退出
JZLBEGIN1
CMPAL,0;第一个键到sin(正弦)函数
JZLBEGIN6
CMPAL,1;第二个键到rec(锯齿)函数
JZLBEGIN7
CMPAL,2;第三个键到squ(方波)函数
JZLBEGIN2
CMPAL,3;第四个键到tri(三角波)函数
JZLBEGIN5
JMPLBEGIN3;其他键则跳到继续等待输入
LBEGIN2:
CALLSQUREW
JMPPREBEGIN
LBEGIN5:
CALLTRIANW
JMPPREBEGIN
LBEGIN6:
CALLSINW
JMPPREBEGIN
LBEGIN7:
CALLRECW
JMPPREBEGIN;执行完输出波形之后回到第一个菜单
LBEGIN3:
JMPLBEGIN4
LBEGIN1:
MOVAH,1;判断PC键盘是否有按键按下
INT16H
JZPREBEGIN
QUIT:
MOVAX,4C00H;返回到DOS
INT21H
;上面是主程序
TRIANWPROCNEAR;三角波的子程序
MOVAH,09H
MOVDX,OFFSETTRI
INT21H
MOVAH,09H
MOVDX,OFFSETSTR3
INT21H;..............
MOVAL,FENC;初始化显示管的值为3
MOVSI,3000H
MOV[SI],AL
MOVAL,AMPL
MOVSI,3001H
MOV[SI],AL
TRIAN1:
CALLAMPLFENC
MOVSI,OFFSETKEYASS
MOVAL,4
CMP[SI],AL
JZTRIAN4
CALLDIS
TRILOOP11:
;输出三角波
MOVSI,3000H;幅值
MOVBL,[SI]
MOVSI,OFFSETTIAOFU
MOV[SI],BL
MOVSI,3001H
MOVBL,[SI]
MOVSI,OFFSETTIAOPIN
MOV[SI],BL
TRILOOP:
MOVAL,00H;D/A转换起始值
TRIUP:
PUSHAX
MOVBL,TIAOFU
MULBL
MOVDX,DA0832;启动D/A转换
OUTDX,AL
POPAX
MOVCL,TIAOPIN
MOVCH,00H
DALLYTRI1:
CALLDALLY
CALLDIS
CALLCCSCAN
JNZTRIAN1
LOOPDALLYTRI1
INCAL
CMPAL,33H
JNETRIUP
TRIDOWN:
PUSHAX
MOVBL,TIAOFU
MULBL
MOVDX,DA0832
OUTDX,AL
POPAX
MOVCL,TIAOPIN
MOVCH,00H
DALLYTRI2:
CALLDALLY
CALLDIS
CALLCCSCAN
JNZTRIAN1
LOOPDALLYTRI2
DECAL
CMPAL,00H
JNETRIDOWN
JZTRILOOP;无按键则跳回继续循环,有则退出
TRIAN4:
RET
TRIANWENDP
RECWPROCNEAR;锯齿波的子程序
MOVAH,09H
MOVDX,OFFSETREC
INT21H
MOVAH,09H
MOVDX,OFFSETSTR3
INT21H
MOVDI,OFFSETFENC;初始化显示管的值为5
MOVAL,[DI]
MOVSI,3000H
MOV[SI],AL
MOVDI,OFFSETAMPL
MOVAL,[DI]
MOVSI,3001H
MOV[SI],AL
REC1:
CALLAMPLFENC
MOVSI,OFFSETKEYASS
MOVAL,4
CMP[SI],AL
JZREC4
CALLDIS
MOVSI,3000H;幅值
MOVBL,[SI]
MOVSI,OFFSETTIAOFU
MOV[SI],BL
MOVSI,3001H
MOVBL,[SI]
MOVSI,OFFSETTIAOPIN
MOV[SI],BL
RECLOOP11:
MOVAL,00H;D/A转换起始值
RECUP:
PUSHAX
MOVBL,TIAOFU
MULBL
MOVDX,DA0832;启动D/A转换
OUTDX,AL
POPAX
MOVSI,OFFSETTIAOPIN
MOVCL,[SI]
MOVCH,00H
DALLYREC1:
CALLDALLY
CALLDIS
CALLCCSCAN
JNZ