单片机
返回首页

PIC单片机A\D转换实验程序代码

2016-01-20 来源:eefocus

实验目的:熟悉A/D转换

;软件思路:选择RAO做为模拟输入通道;
         连续转换4次再求平均值做为转换结果
         最后结构只取低8位
         结果送数码管的低3位显示
;硬件要求:拨码开关S14第2位置ON,第1位置OFF
         拨码开关S6全部置ON,S5第4-6位置ON,第1-3位置OFF
         为不影响结果,其他拨码开关置OFF。
#INCLUDE      ;包含芯片头文件
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
;*********************寄存器定义*********************
TEMP       EQU    20H      ;临时寄存器
BAI        EQU    21H      ;转换结果的百位
SHI        EQU    22H      ;转换结果的十位
GE         EQU    23H      ;转换结果的个位
;****************************************************
  ORG       00H             ;复位入口地址
  NOP                       ;ICD需要的空指令
  GOTO      MAIN            ;跳转到主程序入口
  ORG       04H             ;中断入口地址
  RETFIE                    ;放置一条中断返回指令,防止以外中断发生

;***********************查表程序*********************
;入口参数:W
;出口参数:W
TABLE
  ADDWF       PCL,1         ;指令寄存器加上偏移地址  
  RETLW       0C0H          ;0的编码(公阳极数码管)                            
  RETLW       0F9H          ;1的编码
  RETLW       0A4H          ;2的编码
  RETLW       0B0H          ;3的编码
  RETLW       99H           ;4的编码
  RETLW       92H           ;5的编码
  RETLW       082H          ;6
  RETLW       0F8H          ;7
  RETLW       080H          ;8
  RETLW       090H          ;9

;***********************主程序***********************
MAIN
  MOVLW     30H
  MOVWF     FSR             ;转换结果存放起始地址         
LOOP
  BSF       STATUS,RP0      ;选择体1
  MOVLW     7H              ;A口高3位为输出,低3位输入
  MOVWF     TRISA
  CLRF      TRISD           ;D口设为输出
  MOVLW     8EH
  MOVWF     ADCON1          ;结果右对齐,只选择RA0做ADC口,其余做普通数字口
  BCF       STATUS,RP0      ;回体0
  MOVLW     41H
  MOVWF     ADCON0          ;选择时钟源为fosc/8,允许ADC工作
  CALL      DELAY           ;调用延时程序,保证足够的采样时间
  BSF       ADCON0,GO       ;启动ADC转换
WAIT
  BTFSS     PIR1,ADIF       ;转换是否完成
  GOTO      WAIT            ;等待转换的完成
  BSF       STATUS,RP0
  MOVFW     ADRESL          ;读取转换的结果
  BCF       STATUS,RP0
  MOVWF     INDF            ;保存到临时寄存器里
  INCF      FSR,1
  BTFSS     FSR,2           ;连续转换4次,求平均值
  GOTO      LOOP
  CALL      CHANGE          ;调用结果转换程序
  CALL      DISPLAY         ;调用显示程序
  GOTO      MAIN            ;循环工作

;************************转换程序*********************
;入口参数:30H---33H
;出口参数:BAI,SHI,GE
CHANGE
  CLRF      2AH
  CLRF      BAI
  CLRF      SHI
  CLRF      GE              ;先清除结果寄存器
  MOVFW     31H             ;以下8条指令求4次转换结果的平均值
  ADDWF     30H,1
  BTFSC     STATUS,C
  INCF      2AH
  MOVFW     32H
  ADDWF     30H,1
  BTFSC     STATUS,C
  INCF      2AH,1
  MOVFW     33H
  ADDWF     30H,1
  BTFSC     STATUS,C
  INCF      2AH,1

  RRF       2AH,1
  RRF       30H,1
  RRF       2AH,0
  RRF       30H,0          
  MOVWF     TEMP
  MOVLW     64H             ;减100,结果保留在W中
  SUBWF     TEMP,0
  BTFSS     STATUS,C        ;判断是否大于100
  GOTO      SHI_VAL         ;否,转求十位结果
  MOVWF     TEMP            ;是,差送回TEMP中
  INCF      BAI,1           ;百位加1
  GOTO      $-6             ;返回继续求百位的值
SHI_VAL
  MOVLW     0AH             ;减10,结果保留在W中
  SUBWF     TEMP,0         
  BTFSS     STATUS,C        ;判断是否大于10
  GOTO      GE_VAL          ;否,转去判断个位结果
  MOVWF     TEMP            ;是,差送回TEMP中
  INCF      SHI,1           ;十位值加1
  GOTO      $-6             ;转会继续求十位的值
GE_VAL
  MOVFW     TEMP
  MOVWF     GE              ;个位的值
  RETURN

;**************************显示程序********************
;入口参数:BAI,SHI,GE
;出口参数:无
DISPLAY
  MOVFW    BAI              ;显示百位
  CALL     TABLE
  MOVWF    PORTD
  BCF      PORTA,3
  CALL     DELAY
  CALL     DELAY
  BSF      PORTA,3
  MOVFW    SHI              ;显示十位
  CALL     TABLE
  MOVWF    PORTD
  BCF      PORTA,4
  CALL     DELAY
  CALL     DELAY
  BSF      PORTA,4
  MOVFW    GE               ;显示个位
  CALL     TABLE
  MOVWF    PORTD
  BCF      PORTA,5
  CALL     DELAY
  CALL     DELAY
  BSF      PORTA,5
  RETURN
 
;***************************延时程序***********************
;入口参数:无
;出口参数:无
DELAY
  MOVLW    5FH
  MOVWF    TEMP
  DECFSZ   TEMP,1
  GOTO     $-1

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 非常简单的150W功放电路图

  • 如何使用LED驱动器LM3915制作振动计

  • 一个简单的立体声平衡指示器电路

  • 分享一个电网倾角计电路

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章