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

发布者:chinalisa最新更新时间:2016-01-20 来源: eefocus关键字:PIC单片机  AD转换  实验程序 手机看文章 扫描二维码
随时随地手机看文章
实验目的:熟悉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

关键字:PIC单片机  AD转换  实验程序 引用地址:PIC单片机A\D转换实验程序代码

上一篇:PIC单片机“跑马灯”实验程序代码
下一篇:PIC 8位单片机汇编语言常用指令识读

推荐阅读最新更新时间:2024-03-16 14:44

使用PIC单片机制的简单拍手开关
  拍手开关对于初学者来说是一个很有趣的单片机方案。它以拍手的声音打开和关闭电器。在本文中,单片机开发工程师们将使用PIC单片机制作一个简单的拍手开关,当它连续检测到两个拍手声音时,该开关便会运行。在这个方案中,使用驻极体麦克风作为换能器,将拍手声转换为电信号。麦克风的输出由晶体管放大,然后发送到PIC12F683单片机,当检测到有效拍手时,PIC12F683单片机执行ON/OFF切换动作。   声控拍手开关的原理   拍手开关的输入端需要一个换能器,以将拍手的声音振动转换为电能。为此使用驻极体麦克风或简单的麦克风(OBO-04FN-0B)。麦克风的输出中的声音信号电流很低,因此我们需要一个放大器电路来增强检测到的声音信号。以
[单片机]
使用<font color='red'>PIC单片机</font>制的简单拍手开关
基于PIC单片机的LED点阵手写屏设计
概述 本文采用PIC 16F877A单片机为主要核心控制元件,设计了一个32×32 LED点阵模块的书写显示屏。它主要由光笔模块和点阵显示模块组成,光笔模块利用光敏电阻的光电特性,实现微亮检测功能。光笔反馈信号经放大器LM324比较后,送给单片机处理。32×32点阵显示模块、驱动模块由74HC595外设驱动阵列和8位串行输入/输出移位寄存器ULN2803A组成。光笔通过显示屏微亮扫描寻找坐标值,按键和LED指示灯可实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。 系统系统总体构成   本系统设计包括三大部分:PIC 16F877A单片机主控器、光笔控制器、点阵显示屏。系统的结构如图1所示
[安防电子]
基于<font color='red'>PIC单片机</font>的LED点阵手写屏设计
基于PIC单片机实现电子血压计设计方案
  本血压计设计以PIC18F85J90为控制核心辅以气压传感器BP01和用作传感器与MCU之间模拟信号处理的Intersil ISL28413/ISL28196模拟电路以及LCD驱动芯片ZJM12864BSBD、语音提示ISD2560。家用电子血压计是典型的家庭医疗检测设备之一,电子式血压计使用简易,可一人独自操作,测量值便于记录,体积轻巧便于携带,越来越受到普通家庭的欢迎。   电子血压计工作原理   系统框图如图1所示。系统由压力传感器(BP01型压力传感器),恒流源(ISL28413×1),差分放大(ISL28413×3),0.8 Hz二阶高通滤波(ISL28413×1),200倍放大(ISL28413×2),38Hz
[单片机]
基于<font color='red'>PIC单片机</font>实现电子血压计设计方案
怎样解决pic单片机读修改写问题
关于这类似的问题你可以自己先做块板子动手试下,相信应该也不是很难用IO口模拟I2C通信,实现方式是端口外接上拉电阻,输出寄存器设置为零,然后改变方向寄存器实现0和1的转换,设置为输出则为0,输出设置为1,在上拉电阻作用下将端口拉高,端口其他IO口做控制用,在做I2C通信时候发现I2C总线输出0时结果输出总是为高,用示波器观察最后发现问题是,输出寄存器设置成0后,在写端口其它IO口的时候,是将整个端口值都会来,然后修改写的一位,整个端口写一遍,由于I2C的IO口有上拉电阻,每次读回来的值都是1,写整个端口的时候就把输出寄存器的值改写成1了,导致输出不能为零的问题。解决办法是,设置端口的影子寄存器,每次要修改端口任意IO口值时,都是先
[单片机]
PIC单片机存储器拓展
生活中感应水龙头越发的常见了,公共场所使用也更加的频繁,感应水龙头,顾名思义,就是通过红外线感应出水。那么感应水龙头的功能是通过什么实现的呢? 感应水龙头,是通过红外线反射原理,当人体的手放在水龙头的红外线区域内,红外线发射管发出的红外线由于人体手的摭挡反射到红外线接收管,通过集成线路内的微电脑处理后的信号发送给脉冲电磁阀,电磁阀接受信号后按指定的指令打开阀芯来控制水龙头出水;当人体的手离开红外线感应范围,电磁阀没有接受到信号,电磁阀阀芯则通过内部的弹簧进行复位来控制水龙头的关水。 感应水龙头供电检测的功能实现主要通过英锐恩开发芯片PIC16F684。就是通过芯片程序检测感应水龙头供电情况。当芯片检测电池没有正常供电时,芯
[单片机]
PIC单片机模拟异步串行通讯UART
用TMR0实现定时查询。任何带中断的PIC上都可以实现。可用此法扩展多个串口。 ;|--------------------------------------------------------------| ;| Implement duplex USART base on normal I/O pin | ;| Using TIMER0 interrupt for bit timing | ;| Tested on PIC16F83 running at 4MHz | ;| Written by Paul Zhang, Microchip Tech Inc
[单片机]
关于PIC单片机18系列超低功耗软件编程的关键点
最近做了个PIC超低功耗的项目,对功耗要求非常高。之前也看到网上一些文章,写得很好,但实现测试下来还是不行的。 这里总结一下,给同行分享一下,软件编程上要注意以下几点, 1,不用的模块要关闭 这里的模块,不光是enable位,而是PMD 2,不用的IO口要置成输出 这里和网上其它文章说的输入不一样,实测下来我这边是输出待机电流更低 3,内部稳压一定要关闭 这里千万要注意:一定要选择通过 controlled by REGSLP bit ,否则单片机SLEEP后就死了,再也不能烧写了,这点不能让人理解,但实际测试确实如此 具体做法: (1) (2) WDTCONbits.REGSLP = 1;
[单片机]
PIC单片机引脚中断程序的设计技巧
1 简 述 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7"RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved