×
单片机 > 单片机程序设计 > 详情

PIC16f877A AD转换LED显示8位值

发布时间:2020-08-31 发布时间:
|

简介:本文为大家提供一个PIC16f877A AD转换LED显示8位值的代码。

;****************

list  p=16f877A    ; list directive to define processor

#include ; processor specific variable definitions

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

;---------------------

COUNTER    EQU    20H                    ;计数寄存器

COUNT1    EQU    21H

COUNT2    EQU    22H

TABADD    EQU    23H                    ;查表地址寄存器

DISPBUF    EQU    24H                    ;显示值暂存

DISPBUF_H  EQU    25H                    ;显示器高位

DISPBUF_L  EQU    26H                    ;显示器低位

BUFFER    EQU    27H                    ;BCD十进制结果存放

BUFFER1    EQU    28H                    ;BCD转换缓存

SUM        EQU    29H                    ;校正+3缓存

DIGIT      EQU    2AH                    ;数据显示寄存器

HB        EQU    2BH                    ;百位寄存器

;--------------------

            ORG        0000H            

            NOP

            GOTO        MAIN

            ORG        0005H

MAIN

;**********************    初始化程序    *********************************

          

              CLRF        PORTA

              CLRF        PORTC            ;初始化IO口

    

              BSF        STATUS,RP0        ;设置寄存器体1

              MOVLW      0EH              ;转换结果左对齐,只选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        ;恢复寄存器体0  

              MOVLW      0FFH              ;先让数码管全部不显示

              MOVWF      PORTC

          MOVWF      PORTA

              MOVLW      81H              ;选择:时钟时钟源为FOSC/8,允许ADC工作

              MOVWF      ADCON0            ;通道AN0,暂时不启动转换过程

              CLRF        DISPBUF          ;清显示值

                  

;********************************************************************************

              

ADC

                BSF        ADCON0,GO            ;开启A/D转换过程

                BTFSS      PIR1,ADIF            ;等待A/D转换过程结束,检测ADC中断标志位

                GOTO      ADC                  ;如果没有转换结束,则返回循环检测

                MOVF      ADRESH,W              ;仅取高8位,把A/D结果读到W

                MOVWF      DIGIT                ;注入显示寄存器          

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

              

LOOP1      

          

                CALL        DISP            ;调用显示子程序

            MOVLW    8

          MOVWF    COUNTER      ;循环左移计数器置8

            CLRF    BUFFER          ;清除缓冲器

          MOVF    DIGIT,W  

          MOVWF    BUFFER1        

LOOP2    

                RLF        BUFFER1,1      ;二进制数转换成BCD码(以便显示)

            RLF      BUFFER,1

            DECFSZ    COUNTER,1      ;左移8次

          GOTO    ADJUST          ;

          MOVFW    BUFFER

          MOVWF    DISPBUF        ;是否有进位(即已达100),如已计数到100则

          GOTO    ADC

            ;GOTO    MAIN

ADJUST    

                MOVLW    3              ;二进制转BCD的调整

            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是否出现借位

              GOTO      HB200              ; F>199,百位数显示2

              MOVLW      64H                ; F<199,再送99至W

              SUBWF      DIGIT,W            ; F-W

              BTFSC      STATUS,C            ; 检测C是否出现借位      

              GOTO      HB100              ; 199>F>99,百位数显示1

              GOTO      DISP10              ; F<99,百位不显示

HB200        MOVLW      2H

MOVWF HB ;百位显示数移入寄存器


关键字:PIC16f877A  AD转换  LED显示 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址