×
单片机 > 单片机程序设计 > 详情

单片机控制DAC0832输出正弦波三角波汇编程序

发布时间:2020-05-26 发布时间:
|
org 0000h
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 ACC.0,ZXB        ;P1.0=0 则选择正弦波
      JNB ACC.1,SJB       ;P1.1=0 则选择三角波
      JNB ACC.2,FB        ;P1.2=0 则选择方 波
      AJMP PP
ZXB:MOV R1,#00H
LOOP1:MOV A,R1
      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大于0A,以采样半个周期以上
      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,#12H,LOOP1
      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,#12H,LOOP2
      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:MOV A,R5
      DEC R5                         ;调用延时
      CALL DELAY
      CJNE R5,#00H,KD1
      MOV R5,A
      CJNE R1,#18H,LOOP3
      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
KK0: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 ,LEND
      MOV A,R4
      JNZ KL2                        ;判断频率的增减
      MOV A,#05H                     ;每次周期变化20微秒
      CLR C
      ADD A,R5
      JC LD2
      MOV R5,A
      LJMP LD2
KL2:MOV A,R5
      CLR C
      SUBB A,#05H
      JC LD2
      MOV R5,A
LD2:JNB P1.5,LD2
LEND:POP PSW
      POP A
      SETB EA
      RETI
TABLE1:DB 00H,04H,08H,0bH,0cH,0cH,0bH,08H,04H,00H,04H,08H,0bH,0cH,0cH,0bH,08H ,04H
TABLE2:DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,0CH,0CH,0CH,0CH,0CH,0CH,0CH,0CH ,0CH
TABLE3:DB 00H,02H,04H,06H,08H,0AH,0CH,0AH,08H,06H,04H,02H,00H,02H,04H,06H,08H,0AH,0CH,0AH
关键字:单片机  DAC0832  正弦波  三角波  汇编程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会