[PIC®/AVR®/dsPIC®产品] PIC12F510延时问题

[复制链接]
 楼主| jdx0606 发表于 2014-7-18 11:39 | 显示全部楼层 |阅读模式
小弟想用这款单片机实现一段时间的延迟,具体做法就是GP1端口检测到高电平并且持续3分钟后GPO输出高电平,但是小弟试了一下,如果DELAY的时间长点,GPO端口电平不变化,DELAY短了倒是有变化,但是一直跳变,不延迟倒是可以,不知道问题出在哪地方了。有哪位用过这款芯片的可以给点指导吗?

#include <pic.h>
__CONFIG(0x0FCA); //采用内部4MHz RC,
void DELAY(unsigned int n);
unsigned char value;
unsigned int i=0,j=0;
void main(void)
{
        ADCON0=0b00000000; //最高二位为0,引脚均为数字口
        TRIS=0b00000010; //GP3只能作为输入脚
        CM1CON0=0; //关闭比较器
        GPIO=0b00000000;
        value=GPIO;
        while(1)
        {
                value=GP1;        
                if(value!=0)
                {
                //        for(i=0;i<1000;i++)
                //        {for(j=0;j<108;j++);}
                        DELAY(100);        
                        if(value!=0)
                                GP0=1;
                }
        }
}
//======延时(n)s
void DELAY(unsigned int n)
{
        OPTION=0x01;
        TMR0=0;
        for(i=0;i<n;i++)
        {
                for(j=0;j<50;j++)
                {
                        if(TMR0>=200)
                                TMR0=0;
                        
                }
        }
}
NE5532 发表于 2014-7-18 13:51 | 显示全部楼层
楼主的问题不在于“这个芯片”,在于思路混乱,value=GPIO;这个动作只执行了一次,以后永远不用再读端口状态了??写程序前要先画流程图,不要空对空乱整。
 楼主| jdx0606 发表于 2014-7-18 16:14 | 显示全部楼层
大循环里面有啊
value=GP1;  
wangch_sh 发表于 2014-7-19 17:39 | 显示全部楼层
延时后还要再读一次。
 楼主| jdx0606 发表于 2014-7-21 08:09 | 显示全部楼层
在 DELAY(100);后加入value=GP1;再读一次也没有用, DELAY(10);时端口不停地闪,再加大一点延迟时间就不行了
ayb_ice 发表于 2014-7-21 17:06 | 显示全部楼层
幸好不是延时一天,否则不可想象
 楼主| jdx0606 发表于 2014-7-25 20:28 | 显示全部楼层
晕死,是PROTEUS的问题,烧到板子上就正常了
xlsf1048 发表于 2014-8-6 11:39 | 显示全部楼层
为何用delay呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

45

帖子

1

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

6

主题

45

帖子

1

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