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

    EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機AD轉換匯編程序

    PIC單片機AD轉換匯編程序

    作者: 時間:2012-12-11 來源:網絡 收藏

    ;*********軟件延時子程序****************
    DELAY
    MOVLW 0XFF
    MOVWF DEYH
    AGAIN1 MOVLW 0XFF
    MOVWF DEYL
    AGAIN2 NOP
    DECFSZ DEYL
    GOTO AGAIN2
    DECFSZ DEYH
    GOTO AGAIN1
    RETURN

    ;*************** A/D中斷服務子程序*****************
    INTSERVE
    BCF PIR1,ADIF ;清除A/D轉換標志
    MOVF ADRESH,W
    MOVWF INDF0 ;讀取并存儲A/D轉換結果的高兩位
    INCF FSR0L
    MOVF ADRESL,W
    MOVWF INDF0
    INCF FSR0L ;讀取并存儲A/D轉換結果的低8位
    DECF TIMES,1 ;A/D轉換次數減1
    MOVLW 0X02
    MOVWF DEY
    LOOP13 DECFSZ DEY,1
    GOTO LOOP13 ;給予一定的延時,保證兩次A/D轉換期間
    ;2Tad的間隔時間和電容的采樣時間
    BSF ADCON0,2 ;啟動下一次A/D轉換
    RETFIE ;中斷返回

    ;********** LED閃爍報警子程序*************
    ALARM
    MOVLW 0X01
    XORWF FLAG,1
    BTFSS FLAG,0
    CALL DISPLAY0 ;調用顯“0”子程序
    NOP
    BTFSC FLAG,0
    CALL DISPDARK ;調用顯“DARK”子程序
    RETURN

    ;**********顯全0子程序*************
    DISPLAY0
    TRANSMIT ;SPI發送顯示子模塊
    CLRF PORTA ;LACK送低電平,為鎖存做準備
    MOVLW 0X08
    MOVWF TIMES
    LOOP80 MOVLW 0XC0 ;顯示值為0,C0H為0的段碼
    MOVWF SSPBUF ;啟動發送
    WAIT
    BTFSS PIR1,SSPIF
    GOTO WAIT ;等待發送結束
    BCF PIR1,SSPIF ;清除中斷標志
    DECFSZ TIMES
    GOTO LOOP80 ;一次要發送完8個數據
    BSF PORTA,5 ;最后給一個鎖存信號,代表一次顯示任務完成
    RETURN

    ;**********顯示全DARK子程序*************
    DISPDARK
    TRANSMIT1 ;SPI發送顯示子模塊
    CLRF PORTA ;LACK送低電平,為鎖存做準備
    MOVLW 0X08
    MOVWF TIMES
    LOOP8D MOVLW 0XFF ;顯示值為0,FFH為DARK的段碼
    MOVWF SSPBUF ;啟動發送
    WAIT1
    BTFSS PIR1,SSPIF
    GOTO WAIT1 ;等待發送結束
    BCF PIR1,SSPIF ;清除中斷標志
    DECFSZ TIMES
    GOTO LOOP8D ;一次要發送完8個數據
    BSF PORTA,5 ;最后給一個鎖存信號,代表一次顯示任務完成
    RETURN

    ;*********A/D轉換主程序************
    ;轉載請保留文章原始出處http://www.51hei.com 單片機網
    MAIN NOP
    CALL INITIAL ;初始化
    LOOP
    MOVLW 0X80 ;轉換結果右移,及ADRESH寄存器的高6位為"0"
    ;且把RA2口設置為模擬量輸入式(注意后面要把
    ; RA5改成數據I/O方式,以輸出顯示瑣存信號)
    MOVWF ADCON1
    MOVLW BEGFSR
    MOVWF FSR0L ;給出間接尋址時FSR的初值
    MOVLW 0X0A
    MOVWF TIMES ;每一輪A/D連續采樣10次
    BSF INTCON,GIE ;總中斷打開,及可以進行A/D轉換中斷
    BSF ADCON0,2 ;啟動A/D轉換
    LOOP1 MOVF TIMES,W
    BTFSS STATUS,Z
    GOTO LOOP1 ;等待A/D轉換中斷
    BCF INTCON,GIE ;A/D轉換次數到10次,關閉中斷
    NOP
    CLRF ACCBHI
    CLRF ACCBLO ;雙精度加法的結果寄存器清0,為后面準備
    MOVLW 0X0A
    MOVWF TIMES
    MOVLW BEGFSR
    MOVWF FSR0L
    LOOP15 MOVF INDF0,W
    MOVWF ACCAHI
    INCF FSR0L
    MOVF INDF0,W
    MOVWF ACCALO
    INCF FSR0L
    CALL D_ADD
    DECFSZ TIMES
    GOTO LOOP15
    NOP ;計算得到10次A/D轉換的和
    MOVLW 0X84
    MOVWF ADCON1 ;把RA5設成數字I/O,以輸出顯示鎖存信號
    MOVLW 0X14
    MOVWF ACCAHI
    CLRF ACCALO
    CALL D_SUB ;通過雙精度減判斷模擬量是否達到報警限
    ;度(1400H=200H*0AH,200H與2.5V對應)
    BTFSS ACCBHI,7
    CALL ALARM ;若ACCBHI的最高位為1,則證明減法結
    ;果為負,即直流電壓值超過2.5V,則報警
    NOP
    BTFSC ACCBHI,7
    CALL DISPLAY0 ;若沒有超過2.5V,則不報警,8個LED
    ;同時顯示0
    CALL DELAY ;軟件延時,使電壓檢測不要過于頻繁
    GOTO LOOP ;重復檢測輸入的直流電壓值
    END

    單片機相關文章:單片機教程


    單片機相關文章:單片機視頻教程


    單片機相關文章:單片機工作原理



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 阿勒泰市| 马尔康县| 乐安县| 景泰县| 临泉县| 瑞金市| 朔州市| 新乡市| 洛川县| 新疆| 皋兰县| 红桥区| 繁峙县| 忻城县| 绵竹市| 逊克县| 读书| 株洲县| 长子县| 桃源县| 思茅市| 陵水| 云林县| 晋城| 霸州市| 玉环县| 浮梁县| 烟台市| 苏尼特右旗| 临澧县| 北碚区| 安远县| 敦化市| 察哈| 广德县| 资兴市| 孟连| 阿拉善盟| 四会市| 新津县| 安仁县|