微机原理课程设计波形发生器 - 图文 下载本文

五 附录

5.1 源程序及说明

;****************根据查看端口资源修改下列符号值******************* IOY0 EQU 3000H ;片选IOY0对应的端口始地址

MY8259_ICW1 EQU IOY0+00H ;实验系统中8259的ICW1端口地址 MY8259_ICW2 EQU IOY0+04H ;实验系统中8259的ICW2端口地址 MY8259_ICW3 EQU IOY0+04H ;实验系统中8259的ICW3端口地址 MY8259_ICW4 EQU IOY0+04H ;实验系统中8259的ICW4端口地址 MY8259_OCW1 EQU IOY0+04H ;实验系统中8259的OCW1端口地址 MY8259_OCW2 EQU IOY0+00H ;实验系统中8259的OCW2端口地址 MY8259_OCW3 EQU IOY0+00H ;实验系统中8259的OCW3端口地址 ;*************************************************************** IOY1 EQU 3040H ;片选IOY1对应的端口始地址 MY8254_COUNT0 EQU IOY1+00H*4 ;8254计数器0端口地址 MY8254_COUNT1 EQU IOY1+01H*4 ;8254计数器1端口地址 MY8254_COUNT2 EQU IOY1+02H*4 ;8254计数器2端口地址 MY8254_MODE EQU IOY1+03H*4 ;8254控制寄存器端口地址 ;*************************************************************** IOY2 EQU 3080H ;片选IOY2对应的端口始地址 MY8255_A EQU IOY2+00H*4 ;8255的A口地址 MY8255_B EQU IOY2+01H*4 ;8255的B口地址 MY8255_C EQU IOY2+02H*4 ;8255的C口地址

MY8255_MODE EQU IOY2+03H*4 ;8255的控制寄存器地址 ;*************************************************************** IOY3 EQU 30C0H ;片选IOY3对应的端口始地址

DA0832 EQU IOY3+00H*4 ;DA0832的端口地址 ;***************************************************************

STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS

DATA1 SEGMENT

SINBUF DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H ;SINBUF正弦波64点采样值 DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH DB 25H,1DH,15H,0FH,09H,05H,02H,00H DB 00H,02H,05H,09H,0FH,15H,1DH,25H DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH

SANBUF DB 00H,08H,10H,18H,20H,28H,30H,38H ;SANBUF三角波64点采样值

第12页

DB 40H,48H,50H,58H,60H,68H,70H,78H

DB 80H,88H,90H,98H,0A0H,0A8H,0B0H,0B8H

DB 0C0H,0C8H,0D0H,0D8H,0E0H,0E8H,0F0H,0F8H DB 0F8H,0F0H,0E8H,0E0H,0D8H,0D0H,0C8H,0C0H DB 0B8H,0B0H,0A8H,0A0H,98H,90H,88H,80H DB 78H,70H,68H,60H,58H,50H,48H,40H DB 38H,30H,28H,20H,18H,10H,08H,00H

FANBUF DB 32 DUP(0),32 DUP(0FFH) ;FANBUF方波64点采样值

LEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;共阴极数码管0-F对应输入码值 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' ;提示语任意按键退出DOS 系统 MESS1 DB 0DH,0AH,'SQUARE-------------1',0DH,0AH ;功能键提示语 DB 'TRIANGLE-----------2',0DH,0AH DB 'SINE---------------3',0DH,0AH

DB 'CHANGE THE FREQZ--4',0DH,0AH DB 'EXIT---------------5',0DH,0AH,'$'

MESS2 DB 0DH,0AH,'INPUT THE FREQZ:',0Ah,0DH,'$' ;提示输入六位频率

FLAG4 DB 0H ;判断是否初次执行显示频率 FLAG5 DB 0H ;判断是否初次执行输入频率 CHOOSE DB 0H ;保存输入的功能键

JISHU DW 0H ;保存波形已经输出的频率 FREQZ DW ? ;保存输入的频率

COUNT DW ? ;保存根据输入频率所计算得的计数初值 COUNT1 DB ? ;计数初值低八位 COUNT2 DB ? ;计数初值高八位

SHUJU DB 10 DUP(0) ;保存输入频率每位的真实值 DATA1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA1

START: MOV AX,DATA1 ;将DATA1放入数据段 MOV DS,AX P1: CALL INPUT

MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,34H ;计数器0,方式2 OUT DX,AL

MOV DX,MY8254_COUNT0 ;装入计数初值

MOV AL,COUNT1 ;装入计数初值低字节 OUT DX,AL

MOV AL,COUNT2 ;装入计数初值高字节 OUT DX,AL

CMP FLAG5,1 ;判断是否初次执行输入频率 JZ AA ;不是则跳转到等待输入功能键

第13页

CALL DISPLY ;调用数码管显示输入频率程序 KL: CMP FLAG4,1 ;判断是否初次执行显示频率 JZ AA ;不是则跳转到等待输入功能键 LEA DX,MESS1 ;显示输入频率的提示语 MOV AH,09H INT 21H

QUERY1:MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4 OUT DX,AL

MOV DX,MY8259_ICW2 MOV AL,08H OUT DX,AL

MOV DX,MY8259_ICW4 MOV AL,01H OUT DX,AL

MOV DX,MY8259_OCW1 MOV AL,0FCH QUERY: MOV AH,1 INT 16H

JNZ AA MOV DX,MY8259_OCW3 MOV AL,0CH OUT DX,AL

IN AL,DX TEST AL,80H JZ QUERY AND AL,03H CMP AL,00H

JE IR0ISR JMP QUERY

QUIT: MOV AX,4C00H INT 21H

AA: MOV FLAG4,0H MOV FLAG5,0H MOV AH,01H INT 21H

MOV CHOOSE,AL JMP QUERY1

DISPLY PROC NEAR MOV DX,MY8255_MODE MOV AX,10000000B

;初始化实验系统中8259的ICW2 ;初始化实验系统中8259的ICW4 ;非自动结束EOI ;初始化实验系统中8259的OCW1 ;打开IR0和IR1的屏蔽位 ;判断是否有按键按下 ;有按键则退出

;向8259的OCW3发送查询命令 ;读出查询字

;判断中断是否已响应

;没有响应则继续查询 ;若为IR0请求,跳到IR0处理程序 ;若不是则跳回继续等待 ;结束程序退出 ;将标志位清零以便下次判断 ;将标志位清零以便下次判断 ;输入功能键 ;将功能键保存 ;跳转到等待程序 ;数码管显示程序 ;给8255写入控制字 ;方式0,A口B口输出

第14页

OUT DX,AL

AA0: MOV AH,1 ;判断是否有按键按下 INT 16H

JNZ KL ;有按键则返回

MOV SI,OFFSET SHUJU ;将保存频率的内存地址给SI MOV AH,0FEH ;位选初值 MOV CX,0006H ;位选次数 AA1: MOV AL,AH ;AL保存位选 MOV DX , MY8255_A ;端口地址位操作 OUT DX,AL

ROL AL,01H MOV AH,AL MOV AL, [SI] MOV BX ,OFFSET LEDTAB XLAT MOV DX , MY8255_B OUT DX,AL

CALL DELAY INC SI LOOP AA1 JMP AA0 DISPLY ENDP

IR0ISR: MOV AL,CHOOSE CMP AL,'1' JZ SQUARE

CMP AL,'2' JZ TRIANGLE CMP AL,'3' JZ SINE CMP AL,'4' JZ X5

CMP AL,5' JZ QUIT

X5: MOV FLAG5,1 JMP P1

SQUARE: MOV SI,JISHU MOV AL,[FANBUF+SI] MOV DX,DA0832 OUT DX,AL

;下一个位地址 ;AH保存位选

;[地址]取待显示内容 ;将数字换成显示的七段码 ;数码管输入的端口地址 ;执行延时 ;指向下一个内存单元 ;循环点亮下一个LED ;中断服务程序

;将输入的功能键取出至AL ;若为1输出方波 ;若为2输出三角波

;若为3输出正弦波

;若为4则跳到X5 ;若为5则退出 ;标志位置1 ;方波产生程序 ;将计数值放入SI

;将输出的数值放入AL ;将输出值写入0832 第15页