这个程序为什么启动不AD转换 芯片是PIC16F946 程序参考的了 PIC16F877的

作者&投稿:翟定 (若有异议请与网页底部的电邮联系)
[求助]PIC16f877的AD转换问题(在线等待解决)今天发现单片机的供电电源对单片机自带的AD采样有影响:~

1n4007 流过它电流不同时,它两端的电压会有变化,虽然变化很小,对单片机没有大影响,但AD转换部分的基准电压此时就不稳了,所以ad不准(相对不准要看你具体的精确度和要求了)

输入的模拟量大于A/D转换器的设定转换范围而没有超过电源电压,一般不会导致芯片损坏,这种情况下输出是二进制的全1,例如8位二进制A/D就会输出11111111,有些A/D转换器在这种情况下还有专门的溢出信号提示。

;本程序用宏晶的STC-ISP Ver 3.2A.PCB的下载编程工具测试通过,相关的A/D转换结果在P1口上显示

;转换结果也以 16进制形式输出到串行口,可以用串行口调试程序观察输出结果。

;时钟 18.432MHz,波特率 = 9600。

;转换结果也在 P1口利用 LED显示出来,方便观察。

LED_MCU_START EQU P3.7

ADC_CONTR EQU转换寄存器0BCH ;A/D

ADC_RES EQU位A/D0BDH转换结果寄存器;8

P1ASF EQU口中的相应位作为模拟功能使用时的控制寄存器9DH ;P1 ,如做A/D用,相应位要置1

ADC_Power_On_Speed_Channel_0 EQU 11100000B作为A/D输入 ;P1.0

ADC_Power_On_Speed_Channel_1 EQU 11100001B作为A/D输入 ;P1.1

ADC_Power_On_Speed_Channel_2 EQU 11100010B作为A/D输入 ;P1.2

ADC_Power_On_Speed_Channel_3 EQU 11100011B作为A/D输入 ;P1.3

ADC_Power_On_Speed_Channel_4 EQU 11100100B作为A/D输入 ;P1.4

ADC_Power_On_Speed_Channel_5 EQU 11100101B作为A/D输入 ;P1.5

ADC_Power_On_Speed_Channel_6 EQU 11100110B作为A/D输入 ;P1.6

ADC_Power_On_Speed_Channel_7 EQU 11100111B作为A/D输入 ;P1.7

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

;定义变量

ADC_Channel_0_Result通道A/D转换结果EQU 30H ;0

ADC_Channel_1_Result通道A/D转换结果EQU 31H ;1

ADC_Channel_2_Result通道A/D转换结果EQU 32H ;2

ADC_Channel_3_Result通道A/D转换结果EQU 33H ;3

ADC_Channel_4_Result通道A/D转换结果EQU 34H ;4

ADC_Channel_5_Result通道A/D转换结果EQU 35H ;5

ADC_Channel_6_Result通道A/D转换结果EQU 36H ;6

ADC_Channel_7_Result通道A/D转换结果EQU 37H ;7
ORG 0000H

LJMP MAIN

ORG 0050H

MAIN:

CLR LED_MCU_START工作指示灯 LED_MCU_START;MCU EQU P3.7

MOV SP, #7FH 设置堆栈 ;

ACALL Initiate_RS232初始化串口 ;

ACALL ADC_Power_On;开ADC电源,第一次使用时要打开内部模拟电源

开ADC电源,可适当加延时,1mS以内就足够了;

ACALL Set_P12_ASF设置 P1.2为模拟功能口 ;

ACALL Set_ADC_Channel_2设置 P1.2作为A/D转换通道 ;

ACALL Get_AD_Result测量电压并且取A/D转换结果 ;

ACALL Send_AD_Result发送转换结果到 PC机 ;

ACALL Set_P12_Normal_IO设置 P1.2为普通IO ;

MOV A, ADC_Channel_2_Result用 P1口显示A/D转换结果 ;

CPL A

MOV P1, A

Wait_Loop:

SJMP Wait_Loop停机 ;

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

Initiate_RS232: 串口初始化 ;

CLR ES 禁止串口中断 ;

MOV TMOD, #20H设置 T1为波特率发生器 ;

MOV SCON, #50H 位数据位,无奇偶校验 ;0101,0000 8

MOV TH1, #0FBH 晶振,波特率 = 9600;18.432MHz

MOV TL1, #0FBH

SETB TR1 启动 T1 ;

RET

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

Send_Byte:

CLR TI

MOV SBUF, A

Send_Byte_Wait_Finish:

JNB TI, Send_Byte_Wait_Finish

CLR TI

RET
ADC_Power_On:

PUSH ACC

ORL ADC_CONTR, #80H开A/D转换电源 ;

MOV A, #20H

ACALL Delay 开A/D转换电源后要加延时,1mS以内就足够了;

POP ACC

RET

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

;设置P1.2为模拟功能

Set_P12_ASF:

PUSH ACC

MOV A, #00000100B

ORL P1ASF, A

POP ACC

RET

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

;设置 P1.2为普通IO

Set_P12_Normal_IO:

PUSH ACC

MOV A, #11111011B

ANL P1ASF, A

POP ACC

RET

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

Set_ADC_Channel_2:

MOV ADC_CONTR, #ADC_Power_On_Speed_Channel_2

选择P1.2作为A/D转换通道;

MOV A, #05H更换 A/D转换通道后要适当延时; ,使输入电压稳定

以后如果不更换 A/D;转换通道的话,不需要加延时

ACALL Delay切换 A/D转换通道,加延时; 20uS~200uS就可以了,与输入电压源的内阻有关

如果输入电压信号源的内阻在; 10K以下,可不加延时

RET

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

Send_AD_Result:

PUSH ACC

MOV A, ADC_Channel_2_Result取 AD转换结果 ;

ACALL Send_Byte发送转换结果到 PC机 ;

POP ACC

RET
Get_AD_Result:

PUSH ACC 入栈保护 ;

MOV ADC_RES, #0

ORL ADC_CONTR, #00001000B启动 AD转换 ;

NOP;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值

NOP;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值

NOP;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值

NOP;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值

Wait_AD_Finishe:

MOV A, #00010000B判断 AD转换是否完成 ;

ANL A, ADC_CONTR

JZ Wait_AD_Finishe转换尚未完成,继续等待 ;AD

ANL ADC_CONTR, #11100111B清0 ADC_FLAG, ADC_START位,停止A/D;转换

MOV A, ADC_RES

MOV ADC_Channel_2_Result, A保存 AD转换结果 ;

POP ACC

RET

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

Delay:

PUSH 02 将寄存器组0的 R2入栈 ;

PUSH 03 将寄存器组0的 R3入栈 ;

PUSH 04 将寄存器组0的 R4入栈 ;

MOV R4, A

Delay_Loop0:

MOV R3, #200 ;2 CLOCK --------------

Delay_Loop1: ; |

MOV R2, #249 ;2 CLOCK ------ |

Delay_Loop: ; | 1002 CLOCK |200406 CLOCK

DJNZ R2, Delay_Loop ;4CLOCK

DJNZ R3,Delay_Loop1 ;4CLOCK |

DJNZ R4, Delay_Loop0 ;4 CLOCK

POP 04

POP 03

POP 02

RET

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

END


请百度一下


电脑程序为什么无法启动?
配置文件问题:某些应用程序需要特定的配置文件才能正常运行。如果配置文件缺失或损坏,应用程序可能无法启动。可以检查应用程序的配置文件是否存在问题,并尝试修复或替换它们。权限问题:有些情况下,运行程序可能需要特定的权限。如果未获得管理员权限,可能会导致程序无法启动。这时,可以尝试以管理员身份运行程...

为什么我的电脑应用程序无法正常启动?
1、应用程序无法正常启动0xc0007b是设置错误造成的,解决方法为1同时按住键盘上的win+r快捷键2打开运行,输入cmd,确定3输入命令,输入法必须切换到英文半角4如果输入不正确,可以输入到文档里再复制代码右键;造成应用程序无法正常启动0xc000007b的原因比较多,大概有三个可能1DirectX9没有安装 2Microsoft...

为什么我的应用程序无法正常启动呢?
1. 重新安装应用程序:首先,尝试卸载并重新安装出现问题的应用程序。您可以通过打开控制面板,选择“程序和功能”(或“添加或删除程序”),找到相关的应用程序,并选择卸载。然后,重新下载并安装最新版本的应用程序。2. 更新应用程序:如果您的应用程序已经安装了最新版本,但仍然出现问题,尝试查找并安装...

为什么应用程序无法启动?
1. 缺失或损坏的DLL文件:如果所需的DLL文件被删除、移动或损坏,应用程序就无法正常启动。这可能是由于病毒或恶意软件的干扰,或者是由于系统更新或硬件更改导致的问题。2. 错误的系统配置:如果系统的环境变量或注册表配置不正确,也可能导致应用程序无法找到所需的DLL文件。这可能是由于系统配置被更改或...

为什么应用程序启动失败?
当电脑出现“应用程序正常初始化(0xc000012d)失败”错误时,通常表示系统无法加载所需的动态链接库(DLL)文件,导致应用程序无法正常启动。为了解决这个问题,可以尝试以下几种方法:重新安装应用程序、修复损坏的DLL文件、更新系统或相关驱动程序、运行系统文件检查器(SFC)等。1. 重新安装应用程序:有时候...

为什么应用程序无法启动呢?
部分程序在运行的时候,可能会出现“应用程序无法启动,因为应用程序的并行配置不正确”的错误提示,导致报错的原因可能是本地相关服务被禁用或新装的系统缺少必要的运行库文件导致的。在开始菜单图标上右键“运行”,或者快捷组合键【win+r】打开运行框。在打开的运行框中输入“services.msc”在敲击【回车键...

为什么我在电脑上安装的程序无法启动,出现“打开失败”的提示3?_百度...
则可能需要使用管理员帐户运行该程序。4. 操作系统不兼容:检查程序是否与您的操作系统兼容。有些程序只能在特定的操作系统版本上运行。5. 磁盘空间不足:检查您的磁盘空间是否充足。如果存储空间不足,程序可能无法启动。如果以上解决方案无效,请尝试重新安装该程序或与程序厂商联系获取更多帮助。

电脑打开任何软件都没有反应是什么原因?
如果电脑上的所有软件都打不开,可能是由于以下原因:硬件故障:电脑硬件出现故障可能导致软件无法运行。例如,内存故障、硬盘故障、CPU故障等都可能影响软件的正常运行。电脑内存不足或运行速度过慢:在电脑开机后,如果同时运行了太多的程序或者应用程序,可能会导致电脑的内存不足或运行速度过慢。这会使得...

为什么应用程序无法正常启动运行?
本文将介绍Windows系统下软件无法正常运行的解决方法。👨‍💼管理员身份运行以管理员身份运行,出现“从服务器返回一个参照”是因为可执行文件没有权限导致的,所以给予它最高权限,这样就可以解决问题了。🔧配置打开方式如果你经常使用这个软件的话,可以配置打开方式,比较方便...

电脑开机提示应用程序无法正常启动
1.是权限的问题,典型的是无权用户写 system32 目录 等等 。重新设置用户权限1。试试开机,出完电脑品牌后,按F8,回车,回车,进安全模式里,高级启动选项,最后一次正确配置,回车,回车,按下去试试!应用程序,指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有...

硚口区19386068697: 为什么24位的AD要转换芯片? -
帛若那琦: 24位的AD要转换芯片是因为24位二进制数字位数太长,所以改用6位16进制数字来替代.2进制和16进制数字之间的转换很简单,每一位16进制数字对应四位2进制数字,这样比较简明一些. AD转换就是模数转换,可以把模拟信号转换成数字...

硚口区19386068697: 电脑无法启动 诊断代码AD 怎么办 -
帛若那琦: 错误代码:12、13、2B、2C、2D、2E、2F、30、31、32、33、34、35、36、37、38、39、3A 代码含义:测试显卡 解决方法:该故障在AMI BIOS中较常见,可检查显卡的视频接口电路、主芯片、显存是否因灰尘过多而无法工作,必要时可更换显卡检查故障是否解决.

硚口区19386068697: 运行PC端AD测试软件时(自由口协议),扫描不到AD模块,怎么解决?急急急... -
帛若那琦: 1) AD模块电源供电不正常.请确保提供的电源符合要求.2) 连接电脑转换器的接线有误,请查看所使用的转换器说明手册.常见错误是,采用RS485接口时AD模块接转换器的信号线RA、RB接反了,此时应对调两信号线(采用RS422接口时...

硚口区19386068697: STC单片机AD转换不了 -
帛若那琦: 目前这些没有问题,程序其他部分呢 有没有设置P1ASF

硚口区19386068697: STC12C5204AD单片机AD转换程序为什么只有上电才运行? -
帛若那琦: 下载程序能正常发数,但单片机重新上电后就不能发数实在不明白为什么.请大家帮忙分析一下:而

硚口区19386068697: 单片机AD转换问题.
帛若那琦: 1,什么是AD转换? A是模拟信号的意思,D是数字信号的意思,AD转换就是模数转换,顾名思义,就是把模拟信号转换成数字信号,例如把电压值转化为数字信号. 2,为什么要AD转换? 单片机(以及其他处理器)只能处理数字信号,当单...

硚口区19386068697: 仿真软件里没有24位AD转换芯片,该怎么办? -
帛若那琦: 不知道你是不是想学习AD转换..还是想仿真hx711(AD转换)芯片..如果想学习AD转换的话,,ADC0832也是AD转换芯片proteus里可以找到.

硚口区19386068697: 有关单片机中的a/d转换程序 -
帛若那琦: 这个是和硬件设计有关的,因为信息不全,我只能做如下解释:你说的那条指令的dptr给出了一个地址,硬件上外部总线访问这个地址时会产生一个译码有效信号,就是这个信号启动了A/D转换芯片.再一种可能是这个地址对应着一个外部口寄存器,向里写入的数据(A的内容)是一个启动A/D转换芯片的命令.

硚口区19386068697: 关于A/D转换程序 -
帛若那琦: 传感器传出的电压值是模拟量 单片机不能直接读取 这里就出现了 ad转换芯片把模拟量转换成数字量给单片机 ad0804(并口) ad0831 (串口)芯片都是AD转换用的~ 我还有相应的程序

硚口区19386068697: ad转换芯片问题 -
帛若那琦: 在转换的过程中,当然是硬件实现.而且不同的芯片的AD转换原理不一样,有逐次比较、T型电路比较,等等.为什么有这么多类型,是和精度、速度以及内部结构简易程度相关的.有些类型的ADC比较慢,但内部结构简单,容易实现.有些类型的ADC速度快,但内部结构复杂.它们的原理就不一样.不知道你用的是什么芯片,所以也不知道你这个芯片的原理.网上的资料都不太好,建议你找一本书,书上会讲解的非常详细的.AD、DA这一块应该在 数字电路设计或者计算机结构与设计相关的书籍中.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网