打印

求助高手:16F877A中断程序中的怪现象

[复制链接]
5555|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无悔|  楼主 | 2007-5-18 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助:
在进行PWM设置的时候,T2中断,以调整占空比。中断程序开始运行正常,但是在中断程序的开始处添加两个以上的NOP指令后,下面的程序就运行不正常,请问为什么?
添加其他程序也会 出现这个现象。但是PWM没有关闭
沙发
无悔|  楼主 | 2007-5-18 19:10 | 只看该作者

可能不是程序问题(PIC16F877A)

今天晚上测试的时候发现时好时坏
中断程序至少能进一次,但是添加的测试程序多了又进不了了.
PIC和51不一样的是没有堆栈问题,所以我很迷茫,搞不明白怎么回事

还有就是我用的是下载线烧录的程序,当我接下载线的时候还能正常运行,当只接电源的时候又不行了.其中我已经在编程最后写配置字的时候关断了低压编程.
看门狗也关了,但是也曾有出现周期性的复位
求高手们帮忙考虑一下都有可能是什么问题

使用特权

评论回复
板凳
ocon| | 2007-5-18 19:19 | 只看该作者

从你的描述来看是个新手。

单片机的调试有个原则:先从最简单的程序结构做起,确认没有BUG之后再添加别的功能。

使用特权

评论回复
地板
无悔|  楼主 | 2007-5-18 19:28 | 只看该作者

自学PIC没多久,没有人指导,很郁闷啊

我只是编了个PWM输出的程序,可是老是时好时坏,以为是硬件电路的事,但是查了查,自己没有找到毛病
我用的是RC振荡做时钟,R=4.1K,C=22pF
只是在T1的外部时钟端接有40KHZ的晶振,复位电路
没有了

还有,从我手头的资料看,PWM好象不能直接产生中断,而是通过TMER2的中断来修改参数的,应该没有理解错误吧?

使用特权

评论回复
5
ocon| | 2007-5-18 19:44 | 只看该作者

如果你指的是内部的硬件PWM,它是自动运行的,不需要干预

在你需要的时候写新的占空比值进去即可。
当然,打开它会占用某些硬件资源,具体可查阅对应单片机的DATASHEET。

使用特权

评论回复
6
无悔|  楼主 | 2007-5-18 19:58 | 只看该作者

我已经打开,而且也可以运行

只是出现了以上问题:中断中修改占空比的程序写好后,运行正常,又想添加几句指令,就出现了问题,甚至是添几个NOP都不行
后来就是出现了整个不稳定工作,所以猜测是硬件的问题,请OCON指教

使用特权

评论回复
7
xieyuanbin| | 2007-5-18 21:35 | 只看该作者

PWM占空比不需要在中断中改变

占空比是随时都可修改的,但新修改的值只有在下一个PWM工作周期中才能体现出来.
另外PWM本身没有中断,由TMR2中代替.平时也可不开.
我想你有可能是中断现场保护恢复工作没做好,或者中断占用的太多的时间,以至于无法退出中断.
你的单片机频率是多少?好像是4M左右.

使用特权

评论回复
8
无悔|  楼主 | 2007-5-19 07:55 | 只看该作者

我的频率是1M,程序总共几十行

我的中断中没有现场保护程序,因为程序没有超过一页范围,主程序最后是一条:GOTO  $
可能是这个原因吧,我试试

使用特权

评论回复
9
xieyuanbin| | 2007-5-19 09:02 | 只看该作者

程序没有超过一页的范围不等于不要现场保护

你的W,STATUS总有内容要保存的.

使用特权

评论回复
10
无悔|  楼主 | 2007-5-19 12:19 | 只看该作者

早上又翻看了几遍资料,试着改了几次配置位,问题解决

原来是配置位设置有问题,877A的配置位有一个DEBUG(测试模式设置位吧),我之前无意中开了,现在关闭以后OK.
总结一下,这次PIC试用中出现和已经解决的问题有:
1.配置字的DEBUG位没有关闭,造成的程序不正常,暂时还不知道原因,希望高手指点;
2.低压编程使能位的设置:采用低压在线编程的时候,不能设置LVP配置字,只能接下拉电阻了,接上拉电阻也不行(实验出来的,还没有查证,望高手确认);
3.看门狗的设置和RA口的I/O初始化设置.

使用特权

评论回复
11
无悔|  楼主 | 2007-5-19 12:20 | 只看该作者

谢谢楼上各位前辈的热心指教

使用特权

评论回复
12
yewuyi| | 2007-5-19 17:39 | 只看该作者

DEBUG模式下也不应该

否则DEBUG怎么用?

使用特权

评论回复
13
无悔|  楼主 | 2007-5-20 18:31 | 只看该作者

我也不明白

在这个模式下的中断程序老是出问题,是不是在这个模式下需要什么特殊的硬件或时序要求啊?毕竟我用的是下载线才出的问题,而没有用仿真器.

使用特权

评论回复
14
yewuyi| | 2007-5-20 21:14 | 只看该作者

可能是是MPLAB设置项的

compile for MPLAB ICD没有正确配置造成的……

使用特权

评论回复
15
无悔|  楼主 | 2007-5-21 08:21 | 只看该作者

我用的是51仿真器上附带的PIC在系统烧写功能

我用的是51仿真器上附带的PIC在系统烧写功能,编译软件用的是伟福,都没有见到楼上说的compile for MPLAB ICD配置。
请问:
    compile for MPLAB ICD配置的是什么?将会影响到什么?

使用特权

评论回复
16
无悔|  楼主 | 2007-5-21 08:31 | 只看该作者

以下是我在网上找的

Compile for MPLAB ICD:如果你准备用ICD 调试C 语言编译后的代码,那么此项就必须打钩选中。这样编译后的结果就能保证ICD 本身使用的芯片资源(一小部分的程序和数据空间)不被应用程序所占用。


根据这句话,我认为问题应该是出在烧录器的软硬件设计上:可能是DEBUG模式下工作需要一定的时序控制要求吧,要不DEBUG模式和正常工作模式不分开,那不是更有问题了?

使用特权

评论回复
17
yewuyi| | 2007-5-21 08:35 | 只看该作者

请注意:WAVE不支持PIC16F877型号……

请使用MPLAB……

使用特权

评论回复
18
xieyuanbin| | 2007-5-21 08:51 | 只看该作者

DEBUG模式需要占用单片机的一些资源.

除两个IO和MCLR之外,还需要占用几个内存单元,两级堆栈等.做汇编一定要注意内存单元的空出,做C要保证编译时将该选的选项打钩.

使用特权

评论回复
19
无悔|  楼主 | 2007-5-21 08:53 | 只看该作者

必须么?

WAVE的vw版本支持PIC16F877
对了,我没有说明:我用的是汇编编程的(C不是很熟),所以编译器能支持PIC中挡产品应该是够用了吧?毕竟编译器产生的只是可烧录的机器代码

使用特权

评论回复
20
无悔|  楼主 | 2007-5-21 08:56 | 只看该作者

麻烦xieyuanbin说的在清楚点

DEBUG模式都占用那些内存单元
另外两级堆栈是否会造成中断不正常?

使用特权

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

本版积分规则

7

主题

49

帖子

1

粉丝