天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

用三位數碼管顯示八位AD數值

更新時間: 2019-03-26
閱讀量:2344

;************************************
      LIST   P=16F877              ;列表偽指令
      INCLUDE "P16F877.INC"        ;把包含文件含入源程序
;************************************
RTCC  EQU  01H
W_TEMP  EQU  20H
STATUS_TEMP EQU  21H
FLAGS  EQU  22H
TABADD  EQU  23H
DISPBUF_L EQU  24H
DISPBUF_H EQU  25H
DISP1BUF_L EQU  26H
DISP1BUF_H EQU  27H
SOU   EQU  28H
SOUH  EQU  29H
TEMP1  EQU  30H
TEMP2  EQU  31H
CNT   EQU  32H

 

;************************************
        ORG        0000H

 GOTO    START
        ORG        0008H
;-------------------------------------------------
CONVERT   
        MOVWF      PCL              ;W寄存器內的7段顯示碼地址放入PC
TABLE                              ;PC執行新地址指令, 跳到相對的地址執行?               
     RETLW      0C0H           ;0  ;RETLW指令,將七段顯示碼存入W后返回
     RETLW      0F9H       ;1                                
     RETLW      0A4H       ;2
     RETLW      0B0H       ;3
     RETLW      099H       ;4
     RETLW      092H       ;5
     RETLW      082H        ;6
        RETLW      0F8H           ;7
     RETLW      080H       ;8
     RETLW      090H       ;9
;----- -----------------------------------------------

START
        BANKSEL    PORTC            ;選擇同PORTC寄存器相同的體
       CLRF       PORTC            ;PORTC
      MOVLW      B'10000001'     ;選擇:時鐘時鐘源為FOSC/8,允許ADC工作
      MOVWF      ADCON0           ;通道AN0,暫時不啟動轉換過程

 

       BANKSEL    OPTION_REG       ;選擇寄存器OPTION_REG的體為當前體
      CLRF       TRISC            ;PORTC所有管腳設為輸出(LED)
       MOVLW      B'00001110'      ;轉換結果左對齊,只選1A/D通道RA0/AN0
       MOVWF      ADCON1           ;選擇VDDVSS作參考源
        MOVLW    01H    ;設置RA0為輸入,其它為輸出
     MOVWF    TRISA
        BANKSEL    PORTC            ;選中同寄存器PORTC的體為當前體
;---------------------------------
MAIN    BSF     ADCON0,GO           ;開啟A/D轉換過程
  CALL  DELAY
WAIT
        BTFSS   PIR1,ADIF           ;等待A/D轉換過程結束,檢測ADC中斷標志位

GOTO   WAIT                ;如果沒有轉換結束,則返回循環檢測
       MOVF   ADRESH,W            ;如果轉換完畢,則把A/D結果讀到W
     MOVWF  SOU
     CALL    SBTBCD2
        SWAPF  SOU,W               ;顯示值高低位交換,先處理高位
       ANDLW  0FH              ;屏蔽掉高位
        MOVWF   DISPBUF_H          ;存入寄存器
        MOVFW  SOU              ;顯示值低位處理
        ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISPBUF_L        ;存入寄存器        
       SWAPF  SOUH,W              ;顯示值高低位交換,先處理高位
       ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISP1BUF_H          ;存入寄存器
        MOVFW  SOUH              ;顯示值低位處理
        ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISP1BUF_L          ;存入寄存器
     CALL  DISPLAY       
        GOTO  MAIN                ;循環進行A/D轉換
;***************************************************
DISPLAY

    MOVLW       0FFH
        MOVWF       PORTC             ;先熄滅所有數碼管以免閃爍
       MOVLW  03EH
  MOVWF  PORTA   
        MOVLW       TABLE
        MOVWF       TABADD           ;將轉換表的首地址存入TABADD  
        MOVFW       DISPBUF_L        ;計數值(W)與轉換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,4
  CALL  DELAY
  BSF   PORTA,4
  MOVFW       DISPBUF_H        ;計數值(W)與轉換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,5
  CALL  DELAY
  BSF   PORTA,5
  MOVFW       DISP1BUF_L        ;計數值(W)與轉換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,2
  CALL  DELAY
  BSF   PORTA,2
  RETURN                
;********************SBTBCD2********************

;本程序實現單字節二進制數轉化為2字節壓縮BCD碼。
;入口參數:原二進制數在SOU中。
;出口參數:結果在SOUH:SOU中。
;占用資源:W,STATUS,023H,024H,025H,028H,029H,兩重堆棧。

 

           IFNDEF       SBTBCD21
            #DEFINE     SBTBCD21
                        
SBTBCD2     MOVF        SOU,W
            MOVWF       TEMP2
            CLRF        SOU
            CLRF        SOUH
            BCF         STATUS,C
            MOVLW       8
            MOVWF       CNT
LOOPC       RLF         TEMP2,F
            RLF         SOU,F

   RLF         SOUH,F
            DECFSZ      CNT,F
            GOTO        ADJDEC         
            RETURN                  ;整個子程序結束
ADJDEC      MOVLW       SOU
            MOVWF       FSR
            CALL        ADJBCD      ;調整SOU
            MOVLW       SOUH
            MOVWF       FSR
            CALL        ADJBCD      ;調整SOUH
            GOTO        LOOPC
;********************調整BCD********************
ADJBCD      MOVLW       03H
            ADDWF       INDF,W      ;低四位加3
            MOVWF       TEMP1       ;暫存
            BTFSC       TEMP1,3     ;結果大于7,
            MOVWF       INDF        ;則存起來
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       TEMP1              
            BTFSC       TEMP1,7     ;結果大于7,
            MOVWF       INDF        ;則存起來
            RETLW       0
           ENDIF
;**********************************************
DELAY    MOVLW  0FFH
   MOVWF  034H
LP0   NOP
   NOP

 NOP
   NOP
   NOP
   DECFSZ  034H
   GOTO  LP0
   RETURN
;---------------------------------
      END                         ;源程序結束


联系我们: 柳林县| 宿松县| 遂溪县| 嘉善县| 江门市| 汤原县| 林芝县| 建德市| 玉溪市| 全州县| 望城县| 象州县| 甘德县| 阳东县| 冕宁县| 滨州市| 弋阳县| 怀化市| 锦州市| 赤壁市| 万宁市| 昌平区| 南江县| 昌都县| 射阳县| 古丈县| 牙克石市| 长春市| 玛沁县| 新乐市| 铅山县| 淮安市| 栖霞市| 威信县| 福建省| 瑞安市| 隆德县| 田东县| 莱芜市| 福海县| 莱阳市|