• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機控制DAC0832輸出正弦波三角波匯編程序

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

    作者: 時間:2012-08-13 來源:網絡 收藏
    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


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 法库县| 涟源市| 富阳市| 竹北市| 自贡市| 华蓥市| 静乐县| 钦州市| 榆中县| 新闻| 木兰县| 濮阳市| 林州市| 临武县| 建昌县| 扬中市| 台北县| 方正县| 威远县| 通海县| 武强县| 沂源县| 泰宁县| 建水县| 炉霍县| 慈利县| 霍邱县| 轮台县| 尼木县| 桂林市| 巨野县| 诏安县| 潮安县| 旌德县| 积石山| 溆浦县| 固原市| 新乡县| 永春县| 漳浦县| 莆田市|