機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
用本站實驗板顯示8位AD值
用本站實驗板顯示8位AD值
 更新時間:2008-7-26 17:09:49  點擊數(shù):4
【字體: 字體顏色

;****************
list  p=16f877A     ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF


;---------------------
COUNTER    EQU    20H                     ;計數(shù)寄存器
COUNT1     EQU    21H
COUNT2     EQU    22H
TABADD     EQU    23H                     ;查表地址寄存器
DISPBUF    EQU    24H                     ;顯示值暫存
DISPBUF_H  EQU    25H                     ;顯示器高位
DISPBUF_L  EQU    26H                     ;顯示器低位
BUFFER     EQU    27H                     ;BCD十進制結(jié)果存放
BUFFER1    EQU    28H                     ;BCD轉(zhuǎn)換緩存
SUM        EQU    29H                     ;校正+3緩存
DIGIT      EQU    2AH                     ;數(shù)據(jù)顯示寄存器
HB         EQU    2BH                     ;百位寄存器
;--------------------
            ORG         0000H            
            NOP
            GOTO        MAIN
            ORG         0005H
MAIN
;**********************    初始化程序    *********************************
          
               CLRF        PORTA
               CLRF        PORTC             ;初始化IO口
    
               BSF         STATUS,RP0        ;設(shè)置寄存器體1
               MOVLW       0EH               ;轉(zhuǎn)換結(jié)果左對齊,只選1個A/D通道RA0/AN0
               MOVWF       ADCON1            ;選擇VDD和VSS作參考源
               MOVLW       01H               ;RA0為模擬輸入
               MOVWF       TRISA             ;RA1~5為輸出
        
               MOVLW       00H               ;RC為LED段輸出
               MOVWF       TRISC  
               BCF         STATUS,RP0        ;恢復(fù)寄存器體0  
               MOVLW       0FFH              ;先讓數(shù)碼管全部不顯示
               MOVWF       PORTC
           MOVWF       PORTA
               MOVLW       81H               ;選擇:時鐘時鐘源為FOSC/8,允許ADC工作
               MOVWF       ADCON0            ;通道AN0,暫時不啟動轉(zhuǎn)換過程
               CLRF        DISPBUF           ;清顯示值
                  

;********************************************************************************
              
ADC
                BSF        ADCON0,GO             ;開啟A/D轉(zhuǎn)換過程
                BTFSS      PIR1,ADIF             ;等待A/D轉(zhuǎn)換過程結(jié)束,檢測ADC中斷標(biāo)志位
                GOTO       ADC                   ;如果沒有轉(zhuǎn)換結(jié)束,則返回循環(huán)檢測
                MOVF       ADRESH,W              ;僅取高8位,把A/D結(jié)果讀到W
                MOVWF      DIGIT                 ;注入顯示寄存器          

;********************************   BCD   ********************************
              

LOOP1      
          
                CALL        DISP            ;調(diào)用顯示子程序
            MOVLW     8
          MOVWF     COUNTER       ;循環(huán)左移計數(shù)器置8
            CLRF     BUFFER          ;清除緩沖器
          MOVF     DIGIT,W  
          MOVWF     BUFFER1        
LOOP2    
                RLF         BUFFER1,1       ;二進制數(shù)轉(zhuǎn)換成BCD碼(以便顯示)
            RLF      BUFFER,1
            DECFSZ    COUNTER,1       ;左移8次
          GOTO     ADJUST          ;
          MOVFW     BUFFER
          MOVWF     DISPBUF         ;是否有進位(即已達(dá)100),如已計數(shù)到100則
          GOTO     ADC
            ;GOTO     MAIN
ADJUST    
                MOVLW     3               ;二進制轉(zhuǎn)BCD的調(diào)整
            ADDWF     BUFFER,W     ;每次移位后都檢查低四位LSD+3是否大于7
            MOVWF     SUM            
          BTFSC     SUM,3
          MOVWF     BUFFER
          MOVLW     30H
          ADDWF     BUFFER,W        ;如果是則再加3,否則不加。
          MOVWF     SUM
          BTFSC     SUM,7
          MOVWF     BUFFER          ;接著再將高四位MSD作相同處理
            GOTO     LOOP2

;********************************   顯示程序   ***************************
DISP
              CLRF       HB
              MOVLW      0C8H                ; 送入199至W,
              SUBWF      DIGIT,W             ; F-W    
              BTFSC      STATUS,C            ; 檢測C是否出現(xiàn)借位
              GOTO       HB200               ; F>199,百位數(shù)顯示2
              MOVLW      64H                 ; F<199,再送99至W
              SUBWF      DIGIT,W             ; F-W
              BTFSC      STATUS,C            ; 檢測C是否出現(xiàn)借位      
              GOTO       HB100               ; 199>F>99,百位數(shù)顯示1
              GOTO       DISP10              ; F<99,百位不顯示

HB200         MOVLW      2H
              MOVWF      HB                  ;百位顯示數(shù)移入寄存器
              GOTO       DISP100

HB100         MOVLW      1H
              MOVWF      HB                  ;百位顯示數(shù)移入寄存器
              
DISP100      MOVLW      0FFH                 ;顯示百位
             MOVWF      PORTC
             BCF        PORTA,2              ;RA2為百位顯示
             BSF        PORTA,5
             BSF        PORTA,4
             MOVLW      TABLE                ;查表
             MOVWF      TABADD
             MOVF       HB,W
             ADDWF      TABADD,W
             CALL       CONVERT
             MOVWF      PORTC                ;顯示內(nèi)容送RC
             CALL       DELAY

DISP10       MOVF       DISPBUF,W         ;顯示值低位處理
             ANDLW      0FH               ;屏蔽掉高位
             MOVWF      DISPBUF_L         ;存入寄存器            
             SWAPF      DISPBUF,W         ;顯示值高低位交換,先處理高位
             ANDLW      0FH               ;屏蔽掉高位
             MOVWF      DISPBUF_H         ;存入寄存器
             MOVF       HB,W
             ADDWF      DISPBUF_H,W       ;如果百位和十位同為零不顯示
             BTFSC      STATUS,Z
             GOTO       DISP01

             MOVLW      0FFH              ;顯示十位
             MOVWF      PORTC             ;先熄滅數(shù)碼管以免閃爍
             BCF        PORTA,5           ;先顯示低位
             BSF        PORTA,2
             BSF        PORTA,4
             MOVLW      TABLE
             MOVWF      TABADD            ;將轉(zhuǎn)換表的首地址存入TABADD  
             MOVFW      DISPBUF_H         ;計數(shù)值(W)與轉(zhuǎn)換表的起始地址相加
             ADDWF      TABADD,W
             CALL       CONVERT           ;存入W后調(diào)用轉(zhuǎn)換表子程序
             MOVWF      PORTC             ;送RB口顯示
             CALL       DELAY             ;廷時4。7MS

DISP01       MOVLW      0FFH              ;同樣方法顯示個位
             MOVWF      PORTC
             BCF        PORTA,4
             BSF        PORTA,2
             BSF        PORTA,5
             MOVLW      TABLE
             MOVWF      TABADD
             MOVFW      DISPBUF_L
             ADDWF      TABADD,W
             CALL       CONVERT
             MOVWF      PORTC
             CALL       DELAY
             RETLW      0          

;******************************  查表顯示   *****************************************

CONVERT  
             MOVWF     PCL             ;將W寄存器內(nèi)的7段顯示碼地址放入PC
TABLE                                   ;PC執(zhí)行新地址指令, 跳到相對的地址執(zhí)行?              
          RETLW     0C0H       ;0    
          RETLW     0F9H       ;1                                
          RETLW     0A4H       ;2
          RETLW     0B0H       ;3
          RETLW     099H       ;4
          RETLW     092H       ;5
          RETLW     082H       ;6
          RETLW     0D8H       ;7
          RETLW     080H       ;8
          RETLW     090H       ;9


;***************************     延時程序    ************************************

DELAY                      ;顯示廷時常數(shù),廷時時間為3*255*6+6us+4us=4.6ms
            MOVLW     06H;6H;
       MOVWF     COUNT1
L2    
            MOVLW     0FFH;0FFH;
      MOVWF     COUNT2
L3    
            DECFSZ    COUNT2,1        
         GOTO     L3
       DECFSZ    COUNT1,1
      GOTO     L2
         RETLW     0    
;***********************************************************************
        
       END

  • 上一篇: PIC選型簡單介紹
  • 下一篇: PIC16C711電壓檢測
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1