搜索
bottom↓
回复: 23

关于PIC的复位启动问题,请教高手

[复制链接]

出0入0汤圆

发表于 2008-4-16 09:45:57 | 显示全部楼层 |阅读模式
我用PIC18F252,把程序下载下去后,并不会像AVR单片机那样可以直接启动,按下复位按钮还是不能运行,然后我用手在电路板底部摸了一会就能如期运行了,每次都这样,加了复位电路还是一样,请教高手,该如何设置?
还有在源程序里面如何改写配置位???
先多谢指点!

出0入0汤圆

发表于 2008-4-16 11:25:35 | 显示全部楼层
你是调试还是烧写?   调试[debugger]状态下载以后就能运行   烧写[programmer]状态下载以后要把下载线拔掉

出0入0汤圆

发表于 2008-4-16 11:34:11 | 显示全部楼层
源程序里配置位

C18编译器里
pragma-config 伪指令:
     # pragma config setting-list
setting-list:
     setting
   | setting-list, setting
setting:
     setting-name = value-name
例子:
#pragma config WDT = ON, WDTPS = 128
#pragma config OSC = HS

详细见手册DS51288J_CN 和DS51537

出0入0汤圆

 楼主| 发表于 2008-4-16 17:23:10 | 显示全部楼层
我是烧写,烧写完后已经去掉了ICD2,然后通电,根本不会自己运行,但是我用手摸电路板的焊接点后就会出现能如期运行,很奇怪的现象。起初我以为是复位,但是加了阻容复位电路还是这样。所以怀疑是配置的问题,因为我是刚学习使用PIC单片机,刚刚第一个软件就给我这个挑战,郁闷!
谢谢 chuyu111 刘抗抗 的指教!希望能再帮我一下!!!!
再次致谢!

出0入0汤圆

发表于 2008-4-16 17:50:50 | 显示全部楼层
除了软件,MAPLAB也可以配置的阿
是不是这个也没配置?

出0入0汤圆

 楼主| 发表于 2008-4-16 18:56:04 | 显示全部楼层
我用那里面的配置了,但是就是运转不起来,很奇怪的现象。
就是晶振选择HS
WatchDog:Disable

配置 (原文件名:配置.JPG)

出0入0汤圆

发表于 2008-4-16 19:07:47 | 显示全部楼层
你看看芯片的勘误又没有这方面的说明。 我记得有的芯片某些配置根datasheet上不符,后来出勘误了

出0入0汤圆

 楼主| 发表于 2008-4-16 19:22:17 | 显示全部楼层
但是很奇怪的就是为什么后来能运行,而每次上电都要这么做都能运转,但是运转起来后就一直都不会失败了。呵呵奇怪,还有我用的是PICC18 v9.05版本的,请问如何在程序中定义配置??
呵呵,想快点上手,自己看书太慢了!!
谢谢了!!

出0入0汤圆

发表于 2008-4-16 19:29:11 | 显示全部楼层
换块单片机试下,片子并不是都是好的

不好意思,配置的事我也要翻例程,翻书才知道。

出0入0汤圆

 楼主| 发表于 2008-4-16 19:31:51 | 显示全部楼层
我换了几块了,都是新的,没有用。肯定不是片子的问题

出0入0汤圆

发表于 2008-4-16 19:34:49 | 显示全部楼层
那板子呢,电源阿之类的

我之前有一片18f458,HS下不能用必须PLL模式

出0入0汤圆

 楼主| 发表于 2008-4-16 19:37:09 | 显示全部楼层
板子是我自己用万用板搭的,也许吧,我例外焊一块试试

出0入0汤圆

发表于 2008-4-16 19:39:20 | 显示全部楼层
再焊块试试吧,最小系统要能工作,电源阿,滤波之类的,crastal别离太远等

出0入0汤圆

 楼主| 发表于 2008-4-16 19:39:28 | 显示全部楼层
//定义芯片工作时的配置位
__CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS);
我在张明峰 2004-4-7 于上海 3 of 26 写的;但是拷贝到我的源程序里面编译不过去

出0入0汤圆

 楼主| 发表于 2008-4-16 23:18:14 | 显示全部楼层
请哪位高人能否把PIC单片机的配置位详细说明一下!!!谢谢!
图在5楼!!

出0入0汤圆

发表于 2008-4-16 23:50:49 | 显示全部楼层
你把 电压跌落检测 选项关掉  或者把数值改到2.0V, 4.5V有些敏感了

晶振你选的几m ? 换xt试试

调试时候能正常通过吧

出0入0汤圆

发表于 2008-4-17 00:14:54 | 显示全部楼层
picc18里源码里写配置位的写法和picc不同  通过配置宏配置
宏配置格式如下:  __CONFIG(n,x)

n是寄存器的配置字,x是配置字的值。

例子:

#include<pic18.h>
__CONFIG(1,RC)   
__CONFIG(4,STVRDIS)  
__CONFIG(2,WDTPSI&WDTEN)

出0入0汤圆

发表于 2008-4-17 00:17:24 | 显示全部楼层
在电脑里找到别人写的一个帖子  没署名作者  拿来主义了

【picc18应用笔记:在源程序中设置配置位】

笔者在使用picc18进行基于PIC18F452的软件开发时,发现对于18系列的单片机,手动设置配置位非常麻烦,而且容易出错,所以考虑在源程序中设定配置位,这样编译后,无论是用什么烧写工具,都不需要再进行配置位的设定了。



     对于HI-TECH C18 , 配置字的设定通过宏 __CONFIG(n,x)来实现.
宏__CONFIG(n,x)的声明在文件pic18.h中,各位元的声明在对应芯片型号的头文件中.18F452的例程如下


        #include pic18.h

The declaration of __CONFIG(n,x) is in pic18.h                                         
The __CONFIG(n,x) directive defines configuration data within is in pic18fxx2.h                 

        __CONFIG(1,RC) ;
        __CONFIG(2,PWRTDIS & WDTPS1 & WDTEN ) ;
        __CONFIG(4,STVRDIS) ;
        
        void main(void)
{
your code
}


在pic18.h中,__CONFIG(n,x)的声明如下         
#define        __CONFIG(n, x)        asm(tpsect config,class=CONFIG);
                        asm(global config_word ___mkstr(n));  
                        asm(config_word ___mkstr(n));  
                        asm(torg (___mkstr(n)-1)2);  
                        asm(tdw ___mkstr(x))
部分在pic18.h中的声明大体如下,具体请参考对应的头文件。
Configuration bit values
Config. Register 1
#define OSCSEN                0xDFFF                 enable oscillator system clock
#define OSCSDIS                0xFFFF
oscilator types
#define RCRA6                0xFFFF                 RC wOSC2 config as RA6
#define HSPLL                0xFEFF                 HS wPLL Enabled, Clk Freq = 4xFreq Osc.
#define ECRA6                0xFDFF                 EC wOSC2 config. as RA6
#define ECDB4                0xFCFF                 EC wOSC2 as divide by 4 clock output
#define RC                0xFBFF
#define HS                0xFAFF
#define XT                0xF9FF                 
#define LP                        0xF8FF

Config. Register 2
Brown Out reset
#define        BOREN                0xFFFF                 Brown-out reset enable

n代表 Config. Register n, 例如__CONFIG(1,x); 1 代表Config. Register 1, X可为OSCSEN,RC等。



!!!最后还应该注意的是如果在源程序中进行配置位设置,如果使用的软件版本(比如使用picc18
的8.20版本和MPLAB6.30)较低,虽然编译不会有问题,但可能会出现配置位设置混乱,推荐使用pic
c18的8.35版本和MPLAB7.0以上。安装HTSOFT的软件时,也必须保证完全安装,尤其是一定要安装MPLAB_toolsuites工具。

出0入0汤圆

发表于 2008-4-17 22:08:58 | 显示全部楼层
楼主请注意振荡电路,是否晶体没有起振?

出0入0汤圆

 楼主| 发表于 2008-4-17 23:29:53 | 显示全部楼层
振荡器是肯定已经启动了,但是就是不知道是怎么回事,如果是振荡器都没有启动的话,我摸电路板底部也不会让它动起来啊,而且动起来后就一直都正常,很奇怪的。
呵呵,也许是我还不了解PIC单片机吧,正在摸索原因!!
谢谢各位的帮助!!

谢谢17楼的帮助,我昨晚已经在PICC18使用手册里面找到了你说的东西,再次致谢!

出0入0汤圆

发表于 2008-4-18 12:18:58 | 显示全部楼层
振荡器是肯定已经启动了,但是就是不知道是怎么回事,如果是振荡器都没有启动的话,我摸电路板底部也不会让它动起来啊,而且动起来后就一直都正常,很奇怪的。
呵呵,也许是我还不了解PIC单片机吧,正在摸索原因!!
===========================================================================
看来楼主还没有明白我的意思,可能由于晶体或电容的原因,振荡电路恰好不能达到自激振荡条件,因为整个系统没有工作,所以整个电路处于直流工作状态,当你用手摸电路的时候,由于静电放电作用,在电路中引入了一个“干扰脉冲”,在这个“干扰脉冲”的“帮助”下,振荡电路起振,电路开始工作。

当然,还有另外一个可能的原因:电路中某处关键点接触不良,当你用手摸电路板的时候,由于手的压力或温度应变的关系,电路板发生形变,使得原来接触不良的地方接触良好,电路开始工作。

出0入0汤圆

发表于 2008-4-18 12:39:02 | 显示全部楼层
同意楼上的看法  

但晶振或电容有问题的话  调试是通不过的   所以才问楼主能正常调试否

出0入0汤圆

 楼主| 发表于 2008-4-19 00:03:46 | 显示全部楼层
已经成功了,不是晶振的问题,其实是我的程序打开了串口,但是我的串口上没有任何东西,只有空管脚,可能是一直进入了中断吧,今天我把一个串口芯片MAX202cpe焊上就正常工作了。谢谢各位的指导!!!

出0入0汤圆

发表于 2010-4-19 16:39:49 | 显示全部楼层
回复【22楼】yanrz yanrz
-----------------------------------------------------------------------

你好,这个地方也不能留言,希望你能够看到,我跟你遇到了同样的问题,单片机不能运行,你说你加了一个串口,我想问一下你是加到单片机上给单片机提供串行数据的呢,还是加到单片机串口的输出上,用来接受单片机串口的输出数据呢?我是通过单片机向支持串口通讯的芯片DDS芯片写数据的,但是每次到了SPI传输数据的子程序就好像进入了死循环,出不来了。我觉得你应该有这方面的经验,能给我分析一下嘛?谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 19:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表