新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機控制DAC0832輸出正弦波三角波匯編程序

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

        作者: 時間:2012-08-13 來源:網(wǎng)絡(luò) 收藏
        org 0000h
        LJMP MAIN
        ORG 0003H
        LJMP L0
        MAIN:MOV R2,#0aH ;調(diào)幅倍數(shù)
        MOV R4,#01H ;增減選擇
        MOV R5,#01H
        pp: SETB EA
        SETB EX0 ;延時計數(shù)個數(shù)
        MOV A,#0FFH ;讀取波形狀態(tài)
        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 ;讀取數(shù)據(jù)首地址
        MOVC A,@A+DPTR ;去表格數(shù)據(jù)
        MOV B,R2
        MUL AB ;幅度大小
        INC R1
        XCH A,R1
        CLR C
        SUBB A,#0AH ;是否已采樣半個周期
        JNC LK1 ;C=0跳轉(zhuǎn),即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轉(zhuǎn)換入口地址
        MOVX @DPTR,A
        MOV A,R5
        KD:DEC R5 ;調(diào)用延時
        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 ;讀取方波數(shù)據(jù)首地址
        MOVC A,@A+DPTR ;去表格數(shù)據(jù)
        MOV B,R2
        MUL AB ;幅度大小
        INC R1
        XCH A,R1
        CLR C
        SUBB A,#0AH ;是否已采樣半個周期
        JNC LK3 ;C=0跳轉(zhuǎn),即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轉(zhuǎn)換入口地址
        MOVX @DPTR,A
        MOV A,R5
        KD0:DEC R5 ;調(diào)用延時
        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 ;讀取波數(shù)據(jù)首地址
        MOVC A,@A+DPTR ;去表格數(shù)據(jù)
        MOV B,R2
        MUL AB ;幅度大小
        INC R1
        XCH A,R1
        CLR C
        SUBB A,#0DH ;是否已采樣半個周期
        JNC LK5 ;C=0跳轉(zhuǎn),即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轉(zhuǎn)換入口地址
        MOVX @DPTR,A
        KD1:MOV A,R5
        DEC R5 ;調(diào)用延時
        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


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 柏乡县| 麻阳| 沂源县| 泊头市| 玉田县| 洛川县| 洮南市| 临漳县| 黑河市| 泉州市| 山东省| 卢湾区| 陆川县| 巴东县| 郓城县| 汝阳县| 拜泉县| 庆元县| 巴彦淖尔市| 惠安县| 舒兰市| 乐亭县| 惠水县| 宝丰县| 长子县| 萨迦县| 西峡县| 安国市| 无棣县| 保德县| 合山市| 阿合奇县| 九寨沟县| 侯马市| 内乡县| 娄底市| 那曲县| 乳源| 宣化县| 湘乡市| 米脂县|