PIC单片机调试中,单步运行和连续运行结果不一样,WHY?

[复制链接]
6450|16
 楼主| jmdst 发表于 2008-3-4 16:25 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;在调试PIC16LF876A过程中,在DEBUG模式下,按“F7”键单步运行和设定断点运行的结果完全不一样,前者的仿真结果是正常的,后者不对。<br />&nbsp;&nbsp;&nbsp;请问大侠,这两者怎么会有这么大的区别了,原因何在?<br />&nbsp;&nbsp;&nbsp;谢谢了!
jetson001 发表于 2008-3-4 16:37 | 显示全部楼层

有信号没捕捉到?

  
skygrow 发表于 2008-3-4 17:01 | 显示全部楼层

有对端口的操作么

注意读--修改--写
 楼主| jmdst 发表于 2008-3-4 17:35 | 显示全部楼层

有对端口的读写

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就是一个4*10的键盘。我也怀疑是这方面的问题,但对PIC单片机接触的时间不长,不熟。我对某IO脚置高低电平采用BSF或BCF的命令。如<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;请问这样可以吗?<br /><br />&nbsp;&nbsp;&nbsp;谢谢了!!!
xieyuanbin 发表于 2008-3-4 20:00 | 显示全部楼层

3楼正解

这样连续位操作是不行的.
谈的元 发表于 2008-3-4 20:08 | 显示全部楼层

为何 连续位操作是不行的?

  
 楼主| jmdst 发表于 2008-3-5 10:28 | 显示全部楼层

to xieyuanbin

&nbsp;&nbsp;&nbsp;能否说的更详细一点,谢谢!!!
skygrow 发表于 2008-3-5 11:00 | 显示全部楼层

老生常谈了,转一个

摘自&nbsp;http://www.pic16.com/cuxue/pic45.htm<br />“何谓读-修改-写,导致的问题及其解决之道<br /><br />&nbsp;何谓读-修改-写,导致的问题及其解决之道:<br />&nbsp;&nbsp;只要PICmicro的命令,所处理的FILE&nbsp;(暂存器,内存,和I/O的统称),其最终的值,和命令处理前的值有关,那么,这种命令便是所谓的读-修改-写命令。因为这类命令的操作,可以再细分为三个小步骤,即是读(READ),修改(MODIFY),接著才是写(WRITE)。<br /><br />如:ADDWF,DECF,IORWF,XORWF,BSF,BCF,‥‥等等皆是。<br /><br />在使用这类命令的时候,如果所处理的FILE是I/O,&nbsp;就必须要特别小心。因为,假设任务电压为5V;而您在PORTB的8支脚,没有串接电阻,分别接了8颗二极管(也许是LED)到地。如果,您在先前下了&nbsp;&quot;BSF&nbsp;PORTB,0&quot;这条命令,使得PORTB第0脚上的LED亮了。当您再运行了”BSF&nbsp;PORTB,1&quot;这条命令后,虽然PORTB第1脚上的LED亮了,但是,PORTB第0脚上的LED却会熄掉。原因是因为,运行”BSF&nbsp;PORTB,1”时,会先将整个PORTB的值往回读,而它读到的PORTB第0脚,却是相当於低电位(被二极管拉为0.7V)。当它再把整个PORTB&nbsp;的值写出去的时候,PORTB第0脚就被写成低电位,自然灯就熄了。<br /><br />解决之道是:串电阻,或者不要直接对I/O作读-修改-写命令。<br /><br />另外还有一类要注意的状况是:如当您将”BSF&nbsp;PORTB,0”和”BSF&nbsp;PORTB,1”两条命令连在一起,没有空运行时,纵使您没有上一段所述线路设计不良之状况,有时候您也会发现PORTB,&nbsp;0的高电位也会不见了。导致这个现象的原因是:因为也许您这两支脚的外面接了长导线,有相当大的电容、电感性会阻止电位的变化;而且,PIC命令运行是在最后1/4周期时”写出”,而在第一个1/4周期时”读入”,PORTB,0还来不及升至高电位,便被下一个命令读回去了。<br /><br />解决之道是:通常在两道命令间插入个NOP命令就可以了。&quot;<br /><br />以前张教主的书还介绍了一方法就是设影子寄存器,如PORTA的影子寄存器PORTA_temp,&nbsp;位操作对PORTA_temp进行,再把PORTA_temp赋给对应的PORTA。<br />顺提一下,对于PIC18或PIC的16位单片机的端口输出采用LAT锁存器就不会有类似问题<br />
 楼主| jmdst 发表于 2008-3-5 11:42 | 显示全部楼层

十分谢谢skygrow!!!

&nbsp;&nbsp;衷心谢谢大家的热情的帮助!!!&nbsp;<br />&nbsp;&nbsp;我的问题的确就是这样的,在诸如:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;PORTA,2<br />&nbsp;&nbsp;之间加条&nbsp;“NOP”&nbsp;命令,就可以了。<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;
xieyuanbin 发表于 2008-3-5 18:10 | 显示全部楼层

知道为什么?

关键是,是否明白这个道理?还有:skygrow可是个MM
 楼主| jmdst 发表于 2008-3-5 21:17 | 显示全部楼层

明白了.

&nbsp;&nbsp;&nbsp;基本明白了skygrow转载的那段话的意思.<br /><br />&nbsp;&nbsp;&nbsp;skygrow乐于助人的精神让人感激,技艺上的水平更让人敬佩呵.<br /> &nbsp;做技术的MM,都是女人中的战斗机.<br />&nbsp;&nbsp;&nbsp;
 楼主| jmdst 发表于 2008-3-11 22:27 | 显示全部楼层

还想问个问题

&nbsp;&nbsp;关于将IO脚设为输入状态后高低电平的问题。<br />&nbsp;<br />&nbsp;&nbsp;有四个IO脚设为输入脚,接下拉电阻。<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;在检测按键是否松开的时候,我将键盘的输出脚全部置为高电平后,事实上按键已经松开了,可输入线的电平在很长的一段时间内还是高电平,且电平逐渐减低到零。(没有接电容)<br /><br />&nbsp;&nbsp;&nbsp;在读键值时,每次只有一个输出脚为高电平,输入脚的电平检测很正常。<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;请问,怎么会出现这样的情况了?&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;谢谢!!<br />&nbsp;<br />&nbsp;&nbsp;<br />
skygrow 发表于 2008-3-12 14:58 | 显示全部楼层

端口复用的模拟功能关没?

876A的PORTA吗?<br />如果是,把A/D功能关掉
 楼主| jmdst 发表于 2008-3-12 22:11 | 显示全部楼层

是这样的

&nbsp;&nbsp;&nbsp;4*10的键盘,输入口是RB7-RB4.一方面要利用其电平变化产生中断来唤醒CPU;另一方面在唤醒CPU后,要利用其作为输入口检测电平的高低。<br />&nbsp;&nbsp;&nbsp;按照相关资料,输入脚的电平由外部电路决定,RB7-RB4都接有下拉电阻。当我将10根输出线全部置为高电平,按键都松开了的情况下,RB4和RB5上依然有高电平了???(RB7和RB6暂时不用做IO脚)<br /><br /><br />&nbsp;&nbsp;&nbsp;另外我想问题一下,在按下按键后,输出脚如RA1,直接跟RB4会相连,这样可以吗??<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;谢谢!!!
 楼主| jmdst 发表于 2008-3-17 17:24 | 显示全部楼层

问题已经解决了

&nbsp;&nbsp;&nbsp;是这样的,有4个下拉电阻的阻值过大,有1M,导致下拉能力不够,所以出现了上面提到的问题。(电路不是我设计的,呵呵。)<br />&nbsp;&nbsp;&nbsp;我相信肯定也会有人遇到类似的问题,希望能对大家有一点启发。<br /><br />&nbsp;&nbsp;&nbsp;多谢大家了!!!<br />&nbsp;&nbsp;&nbsp;谢谢skygrow!!!
xieyuanbin 发表于 2008-3-19 08:28 | 显示全部楼层

晕死,上下拉电阻我一般的做法是不超过10K

在需要省电的地方,不要做到100K以上,实践证明100K以上就很容易收到干扰.
x512775199 发表于 2008-3-31 12:32 | 显示全部楼层

呵呵呵呵呵。。。不错不错

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部