单片机控制DAC0832输出正弦波三角波汇编程序
org OOOOh
LJMP MAIN
ORG 0003H
LJMP L0
MAIN:MOV R2,#0aH
MOV R4,#01H
MOV R5,#01H pp: SETB EA
SETB EX0
MOV A,#0FFH
MOV P1,A
MOV A,P1
JNB ACCQZXB
JNB ACC.1,SJB
JNB ACC.2,FB
AJMP PP
ZXB:MOV R1,#00H
LOOP1:MOV A,R1
;调幅倍数
;增减选择
;延时计数个数
;读取波形状态
;P1.0=0则选择正弦波
;P1.1=0则选择三角波
;P1.2=0则选择方波
MOV DPTR,#TABLE1;读取正弦波数据首地址
MOVC A,@A+DPTR;去表格数据
MOV B,R2
MUL AB;幅度大小
INC R1
XCH A,R1
CLR C
SUBB A,#0AH;是否已采样半个周期
JNC LK1 ;C=0跳转,即R1大于OA,以采样半个
周期以上
ADD A,#0AH
XCH A,R1 还原 R1
ADD A,#80H ;8OH为零点,取得正的幅度值
AJMP LK0
LK1:ADD A,#0AH
XCH A,R1
MOV R3,A
MOV A,#80H
CLR C
SUBB A,R3 ;80H为零点,取得负的幅度值
LK0:MOV DPTR,#8000H;送 DA 转换入口地址
MOVX @DPTR,A
MOV A,R5
KD:DEC R5;调用延时
CALL DELAY
CJNE R5,#00H,KD
MOV R5,A
CJNE R1,#12 ML OOP1
LJMP PP
FB:MOV R1,#00H
LOOP2:MOV A,R1
MOV DPTR,#TABLE2;读取方波数据首地址
MOVC A,@A+DPTR;去表格数据
MOV B,R2
MUL AB ;幅度大小
INC R1
XCH A,R1
CLR C
SUBB A,#0AH;是否已采样半个周期
JNC LK3 ;C=0跳转,即R1大于0A,以采样半个
周期以上
ADD A,#0AH
XCH A,R1 还原 R1
ADD A,#80H ;8OH为零点,取得正的幅度值
AJMP LK2
LK3:ADD A,#0AH
XCH A,R1
MOV R3,A
MOV A,#80H
CLR C
SUBB A,R3 ;80H为零点,取得负的幅度值
LK2:MOV DPTR,#8000H;送 DA 转换入口地址
MOVX @DPTR,A
MOV A,R5
KD0:DEC R5;调用延时
CALL DELAY
CJNE R5,#00H,KD0
MOV R5,A
CJNE R1,#12 ML OOP2
LJMP PP
SJB:MOV R1,#00H
LOOP3:MOV A,R1
MOV DPTR,#TABLE3;读取三角波波数据首地址
MOVC A,@A+DPTR;去表格数据
MOV B,R2
MUL AB;幅度大小
INC R1
XCH A,R1
CLR C
SUBB A,#0DH;是否已采样半个周期
JNC LK5 ;C=0跳转,即R1大于D,以采样半个 周期以上
ADD A,#0DH
XCH A,R1 还原 R1
ADD A,#80H ;8OH为零点,取得正的幅度值
AJMP LK4
LK5:ADD A,#0DH
XCH A,R1
MOV R3,A
MOV A,#80H
CLR C
SUBB A,R3 ;80H为零点,取得负的幅度值
LK4:MOV DPTR,#8000H;送 DA 转换入口地址
MOVX @DPTR,A
KD1:M0V A,R5
DEC R5;调用延时
CALL DELAY
CJNE R5,#00H,KD1
MOV R5,A
CJNE R1,#18 ML OOP3
LJMP PP
DELAY:NOP
RET
L0:CLR EA
PUSH A
PUSH PSW
JB P1.3,L1;中断子程序
CJNE R4,#00H,KL0
INC R4
SJMP LD0
KL0:MOV R4,#00H
LD0:JNB P1.3,LD0;判断键是否松开
LJMP LEND
L1:JB P1.4,L2
MOV A,R4
JNZ KL1 ;判断幅度是增还是减
CJNE R2,#0AH,KK0;判断幅度是否达到最大
SJMP LD1
KKO:INC R2;幅度增加 0.5V
SJMP LD1
KL1:CJNE R2,#00H,KK1
SJMP LD1
KK1:DEC R2;幅度减小 0.5V
LD1:JNB P1.4,LD1
LJMP LEND
L2:JB P1.5 丄 END
MOV A,R4