做一个方波发生器源程序 DOS下运行有错
我在下面上传了两个附件 其中那个方波发生器源程序运行有错 是自dos下运行了 不过电机那个没错。哪个仁兄帮忙改改六. 详细设计
a) 相关芯片介绍及初始化
DAC0832:DAC0832是一个8位的D/A转换器,由8位输入寄存器,8位DAC寄存器,8位D/A转换器及逻辑控制单元等功能电路构成。
各端口介绍: DO~D7:数字信号输入端
ILE:输入寄存器允许,高电平有效
CS:片选信号,低电平有效
WR1:写信号1,低电平有效
WR":写信号2,低电平有效
OUT1,IOUT2:DAC电流输出端
RFB:反馈电阻是集成在片内的外接运放的反馈
VREF基准电压(-10~+10)V
Vcc:电源电压(+5~+15)V
AGND:模拟地,DGND是数字地两者可接在一起使用
8255A初始化程序:
8255A控制口地址:FF2BH
A口:FF28H
B口:FF29H
C口:FF2AH
程序开始即对8255A进行初始化,并且读入PC口的数值(通过开关键进行输入),然后将读到的数值存入BL寄存器。同时判断将要输出的波形,再确认要输出的波形后,又选择该波形的频率,同时期间不断的读取PC口的数值(通过调用键扫子程序)一旦出现PC口数值变化(既有键按下)则跳到程序的开始部分重新选择波形,如此反复。
b) 子程序设计
(1).方波子程序。在该子程序里,通过控制CX寄存器的值来改变频率(周期),通过用DAC0832的数模转换功能对AL和AL的取反值的输出来实现方波的输出。
(2).锯齿波子程序。在该子程序里,通过对AL数值的增加来实现锯齿波的输出,通过数值增加的大小来改变频率。
(3). 三角波子程序。在该子程序里,通过判断AL是否小于0FCH来实现三角波上沿和下沿的输出。通过对AL值增加的大小来改变波形的频率。
(4).键扫子程序。在该子程序里,通过从PC口读入的值和之前读入的值(在BL中)的比较来判断是否有键按下。
c) 源程序设计
CODE SEGMENT
ASSUME CS:CODE
ORG 10A0H
DAPORT EQU 0020H
F DW 00H ;初始化
J DB 00H
S DB 01H
ORG 10A0H
START: ;init 8255A
MOV DX,0FF2BH
MOV AL,10000001B;方式命令字,PC0~PC3输入
OUT DX,AL ;control pc
BEGIN: MOV DX,0FF2AH
IN AL,DX ;读PC口值
MOV BL,AL ;存入BL
CMP BL,02H ;"跳跃表",选择波形
JB FWAVE ;方波00~01,锯齿波02~03,三角波,04~05
CMP BL,04H
JB JWAVE
CMP BL,06H
JB SWAVE
JMP BEGIN ;FWAVE
F01: MOV F,0300H ;改变频率
JMP FDACON1
FWAVE: MOV AL,0FFH
CMP BL,01H ;选择频率
JE F01
MOV F,0400H
FDACON1:
CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
MOV CX,F
FDACO2:
LOOP FDACO2
NOT AL
JMP FDACON1 ;JWAVE
JUMP1: JMP BEGIN ;充当键扫子程序 RDPC 的跳板。*.*
J01: MOV J,02H ;改变频率
JMP JDACON1
JWAVE: MOV AL,0H
CMP BL,03H ;选择频率
JE J01
MOV J,01H
JDACON1:
CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
ADD AL,J
JMP JDACON1
;SWAVE
S01: MOV AL,0H ;恢复AL为0
MOV S,02H ;改变频率
JMP L1
SWAVE: MOV AL,0H
CMP BL,05H ;选择频率
JE S01
MOV S,01H
L1: CALL RDPC ;调用键扫子程序
MOV DX,DAPORT
OUT DX,AL
ADD AL,S
CMP AL,0FCH ;若AL=0FEH则置AL=0FFH,下坡
JNA L1
MOV AL,0FFH
L2: CALL RDPC ;键扫
OUT DX,AL
SUB AL,S
CMP AL,02H ;若AL<02H,则上坡
JNB L2
JMP L1
RDPC PROC NEAR ;键扫子程序
PUSH AX
PUSH DX
MOV DX,0FF2AH ;键扫
IN AL,DX
CMP BL,AL ;有没键按下
JNE JUMP1
POP DX
POP AX
RET
RDPC ENDP
CODE ENDS
END START
[ 本帖最后由 jnwangcan 于 2010-7-13 14:20 编辑 ]