(玩電子) 電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機控制DAC0832輸出正弦波三角波匯編程序

作者:佚名   來源:本站原創   點擊數:x  更新時間:2012年01月02日   【字體:
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,08H,06H,04H,02H
發表評論】【告訴好友】【收藏此文】【關閉窗口

文章評論

相關文章

街机奔驰宝马电玩城 股市行情大盘分析 江西多乐彩开奖公告 李逵捕鱼 002529股票行情 至尊棋牌房卡版 怎么网上兼职赚钱 麻将一共多少张 35选7开奖基本走势图 温州麻将16张技巧 上期平码算特7码公式 私募基金配资业务 天天彩选4怎么算中奖 决策主力股票论坛 闲来广东麻将精华版 992998论坛 股票大盘走势今日大盘