打印

关于A/D判断电压大小问题

[复制链接]
1703|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jwwhy|  楼主 | 2009-1-13 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用一pIC的A/D判断电压大小,当电压在3.1V和4.3V之间的时候,POTRB 7灯点亮,当电压高于4.3V和低于3.1V的时候,PORTB 3的灯点亮,但是实验中发现A/D采样过的的数值正确,但是不知道怎么判断不出来?
3.1V和4.3V的数字是这样得出来的 .X*5/255=4.3V  X=0XDB 
 X*5/255=3.1V X=0X9Ea,不知道是计算错误还是程序有问题?
;pic:16f877
;2008-11-24
;LED显示
LIST  P=16F877A
#INCLUDE<P16F877a.INC>      ;包含芯片头文件
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
;**************************

STATUS   EQU    0X03
PORTC    EQU    0X07
TRISC    EQU    0X87
ADCON0   EQU  0X1F
ADCON1   EQU 0X9F
PIR1     EQU 0X0C
PIE1     EQU 0X8C
INTCON   EQU  0X0B
TRISC    EQU  0X87
PORTC   EQU  0X07
N1      EQU  0X20

;********************
        ORG  0X00
        NOP

       GOTO START
       ORG   0X05
START  BSF  STATUS,5
       MOVLW 0X3F
       MOVWF TRISC
       BCF STATUS,5
      
       MOVLW B'01000001';
       MOVWF  ADCON0
       BSF   STATUS,5
       BSF   STATUS,6
       MOVLW  B'10000111'
       MOVWF  OPTION_REG
       BSF STATUS,5
       BCF   STATUS,6
       MOVLW  B'00001110'
       MOVWF  ADCON1
       BCF  STATUS,5
MAIN   BTFSS  INTCON,2
       GOTO  MAIN
       BCF INTCON,2
       BSF   ADCON0,2
WAIT   BTFSS  PIR1,6
       GOTO   WAIT
       MOVF  ADRESH,W
      SUBLW 0X9E;3.1V-A/D
       BTFSC STATUS,0
       GOTO  FAIL
     SUBLW 0XDB;4.3V-A/D
       BTFSC STATUS,0
       GOTO  PASS
       GOTO  FAIL
;***********************
FAIL   BSF STATUS,5
       MOVLW 0XBF
       MOVWF TRISC
       BSF PORTC,6
       RETURN
       GOTO  WAIT
;********************
PASS   BSF STATUS,5
       MOVLW 0X7F
       MOVWF TRISC
       BSF PORTC,7
       RETURN
       GOTO WAIT
;**********************
       end
      
请指教!

相关帖子

沙发
hotpower| | 2009-1-14 08:02 | 只看该作者

877A应该是10位ADC

使用特权

评论回复
板凳
JWWHY| | 2009-1-14 09:58 | 只看该作者

是的,

877A 是10位的A/D,但是我只用到了8位!

使用特权

评论回复
地板
jwwhy|  楼主 | 2009-1-14 20:51 | 只看该作者

怎么没有人啊

请大家帮忙啊!

使用特权

评论回复
5
程序匠人| | 2009-1-15 13:58 | 只看该作者

顶上去

使用特权

评论回复
6
谈的元| | 2009-1-15 20:15 | 只看该作者

问题在这里

  SUBLW 0XDB;4.3V-A/D
       BTFSC STATUS,0
       GOTO  PASS
       GOTO  FAIL

改为:
;;;;;;;;;;;;;;;;
  MOVF  ADRESH,W ;;;<<<<<<<<<<<<<<>>


  SUBLW 0XDB;4.3V-A/D
       BTFSC STATUS,0
       GOTO  PASS
       GOTO  FAIL

使用特权

评论回复
7
JWWHY| | 2009-1-16 09:46 | 只看该作者

哦,


哦,这样啊 去试试看 ,如果我要用到10位的A/D呢

 怎么来判断呢,他们是分别放在2个寄存器内的 ,高字节放在ADRESH
低字节放 ADRESL ,那怎么和我设置的一个立即数进行判断呢?

是不是先判断高位ADRESH里面的数,然后判断低位ADRESL里面的数呢?

使用特权

评论回复
8
谈的元| | 2009-1-16 21:44 | 只看该作者

对头,小学生思维OK

使用特权

评论回复
9
jwwhy|  楼主 | 2009-1-17 21:43 | 只看该作者

继续中..

PIC的单片机10位A/D是这样放置的,转换结果右对齐,

ADRESH内只放置A/D 转换高2位  ADRESl放置其余的8位,
那我设置立即数和它进行比较的时候是不是也要把这个立即数拆分后同样这样放置在2个寄存器中啊
如我现在要判断A/D采样的这个数是不是大于4.335V,是不是这样的,
X*5/1024=4.3335 X=387H  那我就需要把300h放置在一个寄存器中,然后再把87h放置在一个寄存器中,最后先用300H这个寄存器中值去判断ADRESH的大小,再用87H中的值去判断ADRESL中的大小吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

281

帖子

0

粉丝