打印
[PIC®/AVR®/dsPIC®产品]

关于检查程序问题的讨论

[复制链接]
楼主: Rain_King
手机看帖
扫描二维码
随时随地手机跟帖
41
Rain_King|  楼主 | 2013-11-19 08:59 | 只看该作者 回帖奖励 |倒序浏览
ayb_ice 发表于 2013-11-19 08:47
if(RA7_NU==1)       //加这个端口就正常了,不加就不正常
                {
            ...

这个是测试端口啊....我可以用示波器来测这个脚,这个端口没有使用,这就是没法理解的地方嘛,加这个测试端口,就正常了,不加,问题依旧...........

使用特权

评论回复
42
ayb_ice| | 2013-11-19 09:02 | 只看该作者
else if(KeyCntB>=CNTL_KEY)
改成
if(KeyCntB>=CNTL_KEY)
试试

使用特权

评论回复
43
ayb_ice| | 2013-11-19 09:03 | 只看该作者
是否在定时中断中扫键的
编译是否有警告

使用特权

评论回复
44
Rain_King|  楼主 | 2013-11-19 09:04 | 只看该作者
ayb_ice 发表于 2013-11-19 08:58
既然说那句话没有意义,
换成个普通的变量试试,很有可能就有问题

你说的对.....如果换成一个普通的什么i++,就不行了,但是如果我换成另外的一种如:Display=KeyCntB;这里的Display是显示在屏幕上的值,就OK了;我将 if(RA7_NU==1) 这个改为++i,然后再这个函数里面加Display=i,程序正常工作,但是如果我把Display=i移到函数外面去...结果又不真确....

使用特权

评论回复
45
Rain_King|  楼主 | 2013-11-19 09:05 | 只看该作者
ayb_ice 发表于 2013-11-19 09:02
else if(KeyCntB>=CNTL_KEY)
改成
if(KeyCntB>=CNTL_KEY)

这个我试过了.................不行..........

使用特权

评论回复
46
jiabin1024| | 2013-11-19 09:06 | 只看该作者
Rain_King 发表于 2013-11-18 16:50
if(AdcValue[1]=UP_B_KEY)    //this is Down Key
{
     ++KeyCntB;                      //用于消抖     ...

你这样哪里起到了消抖的作用呢,代码有问题

使用特权

评论回复
47
Rain_King|  楼主 | 2013-11-19 09:06 | 只看该作者
ayb_ice 发表于 2013-11-19 09:03
是否在定时中断中扫键的
编译是否有警告

我都利用时间片段了,怎么可能还放着中断里........

使用特权

评论回复
48
么么沫沫| | 2013-11-19 09:08 | 只看该作者
Rain_King 发表于 2013-11-18 15:13
还有就是遇到实际和理论值相差非常远的情况,一般都是发生在捕捉的时候,自己计算的值于实际的值相差非常大 ...

没用过PIC

使用特权

评论回复
49
Rain_King|  楼主 | 2013-11-19 09:08 | 只看该作者
jiabin1024 发表于 2013-11-19 09:06
你这样哪里起到了消抖的作用呢,代码有问题

此话怎讲??我10ms扫一次,我将CNTS_KEY定义为4,表示40ms内都是按下的,那么我不就是可以表示已经按下了么??

使用特权

评论回复
50
ayb_ice| | 2013-11-19 09:12 | 只看该作者
if(AdcValue[1]=UP_B_KEY)    //this is Down Key
应该是
if(AdcValue[1] == UP_B_KEY)    //this is Down Key

使用特权

评论回复
51
Rain_King|  楼主 | 2013-11-19 09:16 | 只看该作者
本帖最后由 Rain_King 于 2013-11-19 09:18 编辑
ayb_ice 发表于 2013-11-19 09:12
if(AdcValue[1]=UP_B_KEY)    //this is Down Key
应该是
if(AdcValue[1] == UP_B_KEY)    //this is Down  ...


等等,你这从哪里看到的,我怎么看到这个语句????

使用特权

评论回复
52
ayb_ice| | 2013-11-19 09:21 | 只看该作者
45L说的

使用特权

评论回复
53
jiabin1024| | 2013-11-19 09:22 | 只看该作者
jiabin1024 发表于 2013-11-19 09:06
你这样哪里起到了消抖的作用呢,代码有问题

KeyCntB变量使用来消抖的,但是你下面又将其清零了。仔细跟踪你认为可能出错的代码,一定可以找出来的,也许可能是个低级错误。

使用特权

评论回复
54
Rain_King|  楼主 | 2013-11-19 09:23 | 只看该作者
ayb_ice 发表于 2013-11-19 09:21
45L说的

这个...论坛截取部分....截漏了,完整的在帖子的第一页,不是这样写的.......我整个扫描按键的程序在帖子的第2页

使用特权

评论回复
55
兰天白云| | 2013-11-19 09:24 | 只看该作者
首先要建立一个信念:办法总比困难多
就拿按键扫描来说,用AD扫描原则上可以,但AD有自身缺陷,受干扰影响大,且芯片内部只有一个物理AD转换器,楼主的问题可以从AD的特点出发查找
1、第1个AD采样完成后有没有给第2个AD足够的采样时间?
2、可以多扫描几次,按楼主程序,多建数据存储区,比如建10个,第1次扫描数据存数据区1,第2个扫描存数据区2,以此类推,直到存满10个数据,再看看有几个数据区数据是正常的?根据这10个数据区数据的正确与否确定下一步的查找方向
3、10ms扫一次是否太快,为什么提出这个问题?因为楼主用AD进行扫描,如果是IO口扫描,我没异议,但楼主用AD扫描我就不得不考虑了

使用特权

评论回复
56
ayb_ice| | 2013-11-19 09:24 | 只看该作者
Rain_King 发表于 2013-11-19 09:04
你说的对.....如果换成一个普通的什么i++,就不行了,但是如果我换成另外的一种如:Display=KeyCntB;这 ...

所以说还是程序的问题,
这个没有什么捷径,只有一步一步跟踪结果了
先不要调用其它程序,关中断测试调试

使用特权

评论回复
57
yewuyi| | 2013-11-19 09:26 | 只看该作者
2.4请分析以下一段代码并指出有那些地方需要修改。
unsigned int msCounter=0;   //毫秒计数器全局变量
//------------------------------------------------------------------------
void main(void)
{
   InitSys();//初始化定时中断
   while(1){
           if(msCounter>5000){
                             Startout();
                             }         
           }   
}
//------------------------------------------------------------------------
void Startout(void){
                   return(msCounter);
                   }
//------------------------------------------------------------------------
//定时中断服务程序
void interrupt Timer_1ms_ISR(void){
                                  msCounter++;
                                  }
//------------------------------------------------------------------------




楼主先分析一下这一段代码中的问题,然后再对照自己的代码看看是否存在类似的问题。
虽然我没有看你的代码,但很多人认为诡异的问题,都是类似的临界代码造成的。




使用特权

评论回复
58
ayb_ice| | 2013-11-19 09:26 | 只看该作者
早说了,模拟数据测试,或暂时改成普通IO测试
确实有可能是AD数据抖动变化大的原因造成的

使用特权

评论回复
59
Rain_King|  楼主 | 2013-11-19 09:26 | 只看该作者
ayb_ice 发表于 2013-11-19 09:24
所以说还是程序的问题,
这个没有什么捷径,只有一步一步跟踪结果了
先不要调用其它程序,关中断测试调试 ...

中断肯定不能关的啊....基准时间的来源...关了,没法工作了.....我自己在测试测吧....应该需要一步一步来...

使用特权

评论回复
60
ayb_ice| | 2013-11-19 09:27 | 只看该作者
Rain_King 发表于 2013-11-19 09:26
中断肯定不能关的啊....基准时间的来源...关了,没法工作了.....我自己在测试测吧....应该需要一步一步来 ...

怎么不可以关
就调用个按键+10MS延时程序即可

使用特权

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

本版积分规则