PIC单片机adc转换并显示

发布者:HarmoniousDream最新更新时间:2015-07-15 来源: 51hei关键字:PIC单片机  adc转换 手机看文章 扫描二维码
随时随地手机看文章
 #INCLUDE"P16F877.inc"
  
   W_TEMP  EQU 20H ; 实际上20H、A0H、120H和1A0H
   STATUS_TEMP EQU 21H ;在体0中建立保护单元 
   PCLATH_TEMP EQU 22H ;在体0中建立保护单元
 
   ORG  000H
   GOTO A1
   ORG  004H;定时中断入口地址 
   GOTO ZD01;
   ORG  0CH
;********************************************
;    数据表
;******************************************** 
Q1   ADDWF   PCL,1  
    RETLW     00C0H        ;0
       RETLW     00F9H        ;1
        RETLW     00A4H        ;2
        RETLW     00B0H        ;3
      RETLW     0099H        ;4
      RETLW     0092H        ;5
      RETLW     0082H        ;6
      RETLW     00F8H        ;7
      RETLW     0080H        ;8
      RETLW     0090H        ;9
      RETLW     0088H        ;A
      RETLW     0083H        ;B
      RETLW     00C6H        ;C
      RETLW     00A1H        ;D
      RETLW     0086H        ;E
      RETLW     008EH        ;F
 
A1  
   MOVLW 5;显示位数
   MOVWF 40H;
   MOVLW B'00000001';位码
   MOVWF 41H;
   MOVLW 5AH;
   MOVWF FSR ;间接寻址
   BSF  STATUS,RP0;选择体1
   BCF  STATUS,RP1;
   MOVLW 00H;1:2TMRO比例
   MOVWF OPTION_REG;分频1/2
   BCF  STATUS,RP0;体0
   BCF  STATUS,RP1;
   MOVLW 0FFH;
   MOVFW TMR0;初值
   BCF  INTCON,T0IF;清定时中断标志
   BSF  INTCON,T0IE;开定时中断
   BSF  INTCON,GIE;开总中断
A2    
   CALL ADC1
   CALL CL0;将16进制数调整为5位10进制数
  
   MOVFW  54H
   MOVWF  5AH
   MOVFW  53H
   MOVWF  5BH
   
   MOVFW  52H
   MOVWF  5CH
   MOVFW  51H
   MOVWF  5DH
   MOVFW  50H
   MOVWF  5EH
  
   CALL  M001
  
   GOTO  A2
 
CL0  ; MOVLW  0H ;要显示16进制数低位
  ; MOVWF  50H;
  ; MOVLW  00H;
  ; MOVWF  51H;要显示16进制数高位
   CALL  CL1
   
   MOVLW  B'00001111'
   ANDWF  54H,0
   MOVWF  50H
   MOVLW  B'11110000'
   ANDWF  54H,1
   SWAPF  54H,0
   MOVWF  51H
     
   MOVFW  52H
   MOVWF  54H
   MOVLW  B'00001111'
   ANDWF  53H,0
   MOVWF  52H
   MOVLW  B'11110000'
   ANDWF  53H,1
   SWAPF  53H,1
   RETURN
  
    
CL1  
   MOVLW  0;
   MOVWF  52H;万位
   MOVWF  53H;百千位
   MOVWF  54H;个十位
   MOVWF  55H;进位标志
   MOVLW  10H;
   MOVWF  56H;循环次数
   CLRF  57H;
CL2   BCF   STATUS,C;清C
   RLF   51H,1;循环左移
   RLF   50H,1;循环左移
   BTFSC  STATUS,C;判断C位是否为高
   BSF   55H,0;是置1
   MOVFW  54H;
   ADDWF  55H,0;PIC没有ADDC指令只能判断C来加1
   ADDWF  54H,0;与自身相加
   BTFSC  STATUS,C;判断是否有进位
   BSF   57H,7;有则置标志
   BTFSC  STATUS,DC;判断是否有进位
   BSF   57H,3;有则置标志
   CALL  DA1;调用十进制调整子程序
   MOVWF  54H;存回54H
   CLRF  55H;清进位标志
   BTFSC  STATUS,C;判断C位是否为高
   BSF   55H,0;是置1
   MOVFW  53H;
   ADDWF  55H,0;PIC没有ADDC指令只能判断C来加1
   ADDWF  53H,0;与自身相加
   BTFSC  STATUS,C;
   BSF   57H,6;
   
   BTFSC  STATUS,DC;判断是否有进位
   BSF   57H,2;有则置标志
   
   CALL  DA1;
   MOVWF  53H;
   CLRF  55H ;
   BTFSC  STATUS,C;
   BSF   55H,0;
   MOVFW  52H;
   ADDWF  55H,0;
   ADDWF  52H,0;
   BTFSC  STATUS,C;
   BSF   57H,5;
   BTFSC  STATUS,C;判断是否有进位
   BSF   57H,1;有则置标志
 
   CALL  DA1;
   MOVWF  52H;
   CLRF  55H;
   BTFSS  57H,7;判断标志是否有进位
   GOTO  CL03;否
   INCF  53H,1;是进位
   MOVLW  60H;
   ADDWF  54H,1;自身加60H 
CL03  BTFSS  57H,3;判断标志是否有进位
   GOTO  CL3;否
   MOVLW  6H;
   ADDWF  54H,1;自身加6H 
 
CL3   BTFSS  57H,6;判断标志是否有进位
   GOTO  CL04;
   INCF  52H,1;是进位
   MOVLW  60H;
   ADDWF  53H,1;自身加60H [page]
   
CL04  BTFSS  57H,2;判断标志是否有进位
   GOTO  CL4;否
   MOVLW  6H;
   ADDWF  53H,1;自身加6H  
CL4   BTFSS  57H,5;判断标志是否有进位
   GOTO  CL05;
   INCF  51H,1;是进位
   MOVLW  60H;
   ADDWF  52H,1;自身加60H 
CL05  BTFSS  57H,1;判断标志是否有进位
   GOTO  CL5;否
   MOVLW  6H;
   ADDWF  52H,1;自身加6H
CL5   
   CLRF  57H;清标志
   DECFSZ  56H,1;
   GOTO  CL2;
  
   RETURN;
 
 
 
;;;**************************************************************
;;;    十进制数调整
;;;**************************************************************   
DA1   MOVWF  60H;将W里的数保存到60H里
   MOVLW  B'00001111';
   ANDWF  60H,0;将60H的数与00001111去除高4位
   MOVWF  62H;将去除高位后的数保存到62H
   MOVLW  0AH;
   SUBWF  62H,0;去除高位的数减0AH
   BTFSS  STATUS,DC;判断是否比0AH大
   GOTO  DA2 ;否则跳转
   ADDLW  B'10000';比0AH大则进位
   MOVWF  62H;高4位加1
  
DA2   MOVLW  B'11110000';
   ANDWF  60H,1;将60H的数与11110000去除低4位
   MOVLW  0A0H;
   SUBWF  60H,0;高4位的数减0A0H
   BTFSS  STATUS,C;判断是否比0A0H大
   GOTO  DA3;否
   ADDWF  62H,1;是则将差加上低位
   BSF   STATUS,C;是则置位
   GOTO  DA4;
DA3   MOVFW  60H;
   ADDWF  62H,1;否则将高4位加上低4位
   MOVFW  62H;
   ANDLW  B'11110000';
   SUBLW  0A0H ;加后判断是否大于或等于0A0H
   BCF   STATUS,C;
   BTFSS  STATUS,Z;
   GOTO  DA4;否则退出
   MOVLW  B'00001111';是
   ANDWF  62H,1;则去掉高4位并进位
   BSF   STATUS,C;置进位标志 
DA4   MOVFW  62H;
   RETURN;
 
 
;**************************************************************
;     定时中断数码管显示程序
;**************************************************************
ZD01  BTFSS INTCON,T0IF;判断是否产生定时中断
   GOTO ZD03;否跳出是继续执行
   MOVWF  W_TEMP;W备份到W_TEMP中
   SWAPF  STATUS,0;STATUS半字交换后送W
   CLRF  STATUS;选择体0为当前体备份
   MOVWF  STATUS_TEMP;将原来的STATUS送体0上的
   MOVF  PCLATH,0;PCLATH送W 
   MOVWF  PCLATH_TEMP;W送备份寄存器中
   CLRF  PCLATH ;设置为0页
 
   BCF  INTCON,T0IF
   BSF  STATUS,RP0;体1
   BCF  STATUS,RP1;
   MOVLW 0;
   MOVWF TRISB;RB口设为输出口
   MOVWF TRISD;RD口设为输出口
   BCF  STATUS,RP0;体0
   BCF  STATUS,RP1;
   MOVLW 0FFH;
   MOVWF PORTB;RB口输出高电平
   MOVLW 0
   MOVWF PORTD;RD口输出低电平起清屏作用
   
   MOVFW INDF;间接寻址显示数据  
   CALL Q1;查数据表
   MOVWF PORTB;显示断码输出到RB口
   INCF FSR,1;间接寻址地址加1
   MOVFW 41H ;位码
   MOVWF PORTD;位码输出到RD口
   RLF  41H,0;处理C
   RLF  41H,1;左移位码
   DECFSZ 40H,1;判断是否显示完4位
   GOTO ZD02;否则继续显示
   MOVLW 5;显示位数
   MOVWF 40H;
   MOVLW B'00000001';位码
   MOVWF 41H;
   MOVLW 5AH;
   MOVWF FSR ;间接寻址
ZD02  
   MOVLW 0FFH;
   MOVFW TMR0;重装初值
     ; 恢复现场
   CLRF STATUS;恢复到体0
   MOVF    PCLATH_TEMP,0;开始恢复数据 
   MOVWF PCLATH;恢复PCLATH
   SWAPF STATUS_TEMP,0
   MOVWF STATUS;恢复STATUS
   SWAPF W_TEMP,1;半字交换后放回
   SWAPF W_TEMP,0;再半字交换后送W
ZD03  
   RETFIE ;中断返回
 
ADC1  BSF   STATUS,RP0;体1
   BCF   STATUS,RP1
   MOVLW  0FFH
   MOVWF  TRISA;设置A口为输入口
   MOVLW  B'10001110';设置ADC转换格式为右对齐并选RA0位AD口
   MOVWF  ADCON1
  
   BCF   STATUS,RP0;选择体0
   BCF   STATUS,RP1
   
   MOVLW  B'11000001' ;选择ADC时钟频率选择RA0位AD通道使能ADC
   MOVWF  ADCON0 
   BSF   ADCON0,GO;开始AD转换
   BTFSC  ADCON0,GO;判断是否转换完成
   GOTO  $-1
   BSF   ADCON0,GO;清完成标志
   MOVFW  ADRESH;将转换完成高位数存到50H
   MOVWF  50H
   BSF   STATUS,RP0;体1
   BCF   STATUS,RP1
   MOVFW  ADRESL;将转换完成数存到51H
   BCF   STATUS,RP0;体0
   BCF   STATUS,RP1
   MOVWF  51H
   RETURN 
 
M001  MOVLW 1
   MOVWF 30H
M002  MOVLW D'24'
   MOVWF 31H
M003  MOVLW D'250'
   MOVWF 32H
   DECFSZ 32H,1
   GOTO $-1
   DECFSZ 31H,1
   GOTO M003
   DECFSZ 30H,1
   GOTO M002
   RETURN
  
   END 
关键字:PIC单片机  adc转换 引用地址:PIC单片机adc转换并显示

上一篇:PIC单片机中断嵌套
下一篇:PIC单片机内部EEPROM读写程序

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

PIC单片机程序设计的基本框架
为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。   TITLE“This is……”;程序标题   ;程序说明   LIST P=16F84,F=1NHX8M   ;   include p16F84.inc   -config_RC_Qsc &_WDT_0FF…   ;资源定义和变量定义   STATUS EQU 03
[单片机]
PIC单片机与PC机的通信设计
1. PC机编程 PC采用Toubr C 进行编写。程序如下: #include #define port 0x3f8 /*利用串口1进行通信*/ int ch[15]; main () { int a; int i,j; int b[6]={88,15,38,26,20,0}; char c; cl rs cr(); outportb(port 3,0x80); /*准备设置波特率*/ outportb(port,0x0C); /*波特率设置为9 600 bps*/ outportb(port 1,0x00); outportb(port 3,0x03); /*8位数据位,奇偶检验,1位停止位*/ outportb(por
[单片机]
<font color='red'>PIC单片机</font>与PC机的通信设计
24C02在PIC单片机系统中的应用
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控制领域,24C02可以解决PIC16C8×系列单片机片内EEPROM不足的问题,用以保存诸如用户设置参数、采集到的数据等。 由于部分PIC单片机不具备I2C总线接口,在应用时必须用软件法加以解决。 在软件编制时应当严格遵循I2C总线规则,并注意24C02的片内读写周期时间,调整好程序流程,以避免写不进、读不出的问题。 下面将笔者在实际工作中遇到的问题和解决的方法进行简单的介绍,希望可以给同行一些帮助。 首先约定,数据由微处理器发送到24C02称“写”、“发”,反之称“读”、“
[单片机]
24C02在<font color='red'>PIC单片机</font>系统中的应用
PIC单片机在飞机加油系统中的应用分析
一、引言 当前,能源已成为制约很多国家发展的瓶颈,特别是广大发展中国家,能源紧缺现象逐步凸现,世界各国对石油资源的争夺不断加剧,甚至引发局部战争;作为最大的发展中国家,我国必须在实现能源来源多元化的同时,加强对已有资源的有效管理和使用,杜绝浪费和无效流失现象。传统的人工加油的方式由于受人的影响较大,不仅加油量误差较大,且容易造成少加、错加、加冒等人为差错。而该系统的优点: 1、精确定量加油 2、节约人力 3、节约时间 4、安全可靠 5、体积小 6、成本低廉;可有效避免传统加油方式的缺点。 二、工作原理 本论文所设计的精确加油系统是在传统加油管上安装智能测控系统而构成的,该测控系统主要由PIC单片机、IC卡、计量电路、
[单片机]
<font color='red'>PIC单片机</font>在飞机加油系统中的应用分析
PIC单片机(PIC16F873)小项目二(工艺文件)
1.零部件安装顺序表 此称重板对零件安装顺序无特别要求,可遵循先小后大原则,先焊接小元器件,后焊接大元器件。结合自己焊接习惯安排零部件焊接顺序。 2.产品出厂老化试验 (1)输入110%的额定输入电压连续通电24小时。 (2)高温测试 (3)输入突变电压。 3.产品合格判定标准 (1)系统上电蜂鸣器响声一次,LED灯交互闪动四次。 (2)自学习过程中,LED灯闪动,学习完成后蜂鸣器响声两次。 (3)系统自学习完成后,随着输入变化,输出0V-10V或者0.5V-3.5V电压。 若产品满足以上两个要求,并无出现其它异样。则产品是合格产品。 4.程序下载步骤 1.连接好PIC程序下载工具m
[单片机]
PIC单片机(PIC16F15323)的环境搭建
一共需要安装两个软件, MPLAB X IDE v5.50和 xc8-v2.32-full-install-windows-x64-installer 为了仿真,也可以安装proteus软件 1 MPLAB X IDE v5.50的安装 软件下载链接: https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide#tabs 下载好软件后,一直next即可。 2 xc8-v2.32-full-install-windows-x64-installer的安装 因为单片机型号是PIC16F15323,所以选择XC8 软件下
[单片机]
<font color='red'>PIC单片机</font>(PIC16F15323)的环境搭建
通过PIC单片机更新LCD数据
  要更新LCD,可以修改LCDDATA寄存器的内容,以点亮或不点亮LCD显示器上的每个像素。应用固件通常将修改创建为与显示器上的元素(例如字符位置、条形图、电池显示等)相对应的缓冲区变量。   当应用调用显示更新时,存储在缓冲区变量中的值必须转换为正确的像素位设置,像素位位于LCD DATA寄存器中。   对于静态类波形,可以随时写LCD数据寄存器,而不会产生负面影响。但对于动态类波形,必须每隔一个LCD帧才能写LCD数据寄存器,以确保动态类波形的两个帧彼此互补。否则,会将直流偏压施加给LCD。   应当仅在允许写操作时才写LCD数据寄存器,允许写操作由LCD CON寄存器中的WA位置l指示。   在PIC16C926器件中,没
[单片机]
基于PIC单片机的便携式测试记录仪设计
基于PIC单片机的便携式测试记录仪(以下简称记录仪)既有一般数据采集装置的实时采集与保存功能,同时又能够对采集数据进行实时处理、显示和打印。适用于对采集速度要求不高、交流供电比较困难以及无须长期留人值班的场合。 以追求高可靠、低功耗、小体积设计思想的本记录仪具有如下功能:对现场物理量进行实时采集、保存、处理与显示;自动识别现场安装的传感器数量、传感器号和量程;自动和手动两种采集方式,自动采集适用于长期无人值班的固定场合,手动采集便于对分布在不同区域的物理量进行测试;与PC机通讯,可根据需要将采集数据下载至PC数据库;实时打印;自检功能,避免了系统运行过程中可能遇到本身无法容错处理的异常事件而导致的死机现象。 1 硬件设计 1.
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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