PIC单片控制灯亮

[复制链接]
 楼主| DFH 发表于 2015-8-4 09:45 | 显示全部楼层 |阅读模式
我用外部中断的方式控制PIC12F1822,在一定时间能接收脉冲的个数来控制灯亮,我的程序如下,现在的问题是我在仿真上面灯能实现亮,但是实物上面单片机的输出脚信号居然是接近于0,电压也是接近于0,灯不能点亮,这究竟是怎么回事啊?求指导指导一下。硬件100%没问题。我就是换了个芯片就不行了。
void interrupt ap(void)
{
        //外部中断函数
        if(IOCIE && IOCIF)
        {
                IOCIF = 0;
                NUM++;       
        }
       
        //定时器中断函数
     if(TMR1IF && TMR1IE)        //产生中断,溢出
    {      
         TMR1H = 0XFF;
            TMR1L = 0XB5;                //TMR1赋初值 定时器的定时值清零
        TMR1IF = 0;                  //清溢出
        if( 3 <= NUM )
        {
                LED = 1;
                        LED1 = 1;       
            }   
            if(1 >= NUM)
            {
                        LED = 0;
                        LED1 = 0;   
                }  
        NUM = 0;
    }
}

NE5532 发表于 2015-8-4 10:02 | 显示全部楼层
先不要用定时器,直接写死循环来闪烁。不要把问题搞复杂了再来处理。另外最好用示波器来看,要怀疑时钟设置有错,输出频率太高,人眼看不到。
 楼主| DFH 发表于 2015-8-4 10:26 | 显示全部楼层
NE5532 发表于 2015-8-4 10:02
先不要用定时器,直接写死循环来闪烁。不要把问题搞复杂了再来处理。另外最好用示波器来看,要怀疑时钟设置 ...

恩  我试试看先  把定时器弄掉,但是我之前用示波器来看电压的,接近于0
 楼主| DFH 发表于 2015-8-4 10:48 | 显示全部楼层
NE5532 发表于 2015-8-4 10:02
先不要用定时器,直接写死循环来闪烁。不要把问题搞复杂了再来处理。另外最好用示波器来看,要怀疑时钟设置 ...

还是没有,什么都没,输出口跟之前一样 几乎为0 :Q
yklstudent 发表于 2015-8-4 12:14 | 显示全部楼层
看看配置位呢,
NE5532 发表于 2015-8-4 14:17 | 显示全部楼层
检查熔丝,时钟,端口模拟功能是否关闭?也许程序都没运行。
 楼主| DFH 发表于 2015-8-4 14:40 | 显示全部楼层

#define WDTDIS 0x3FFB // 看门狗关闭
#define PWRTDIS 0x3FFF // 上电延时定时器关闭
#define BORDIS 0x3FBF // 低电压复位禁止
#define RC 0x3FFF // RC振荡  
 楼主| DFH 发表于 2015-8-4 14:42 | 显示全部楼层
NE5532 发表于 2015-8-4 14:17
检查熔丝,时钟,端口模拟功能是否关闭?也许程序都没运行。

我早上把定时器关掉了就一个外部中断。一进入中断就点灯,但是还是不亮  在仿真上面都亮了。   弄到实物上去 还是不亮灯,电压为0;
 楼主| DFH 发表于 2015-8-4 14:43 | 显示全部楼层
DFH 发表于 2015-8-4 14:40
#define WDTDIS 0x3FFB // 看门狗关闭
#define PWRTDIS 0x3FFF // 上电延时定时器关闭
#define BORDIS  ...

仿真都成功了  实物就不行。
 楼主| DFH 发表于 2015-8-4 14:45 | 显示全部楼层
这个配置有问题吗  我在这里下载进去的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
NE5532 发表于 2015-8-4 15:08 | 显示全部楼层
DFH 发表于 2015-8-4 14:42
我早上把定时器关掉了就一个外部中断。一进入中断就点灯,但是还是不亮  在仿真上面都亮了。   弄到实物 ...

软件写个死循环,什么中断都不要用,说得已经很清楚了。楼主初学,既然搞不定,就从最基本的入手,不要逞能,一次只调一个功能。
yklstudent 发表于 2015-8-4 16:45 | 显示全部楼层
时钟源设置有问题吧,你外部用的RC时钟源?不是用的晶振????
 楼主| DFH 发表于 2015-8-4 19:17 | 显示全部楼层
yklstudent 发表于 2015-8-4 16:45
时钟源设置有问题吧,你外部用的RC时钟源?不是用的晶振????

恩,没有用到晶振,用内部振荡器RC  我放弃了,学DA  用DA来试试。
 楼主| DFH 发表于 2015-8-4 19:20 | 显示全部楼层
NE5532 发表于 2015-8-4 15:08
软件写个死循环,什么中断都不要用,说得已经很清楚了。楼主初学,既然搞不定,就从最基本的入手,不要逞 ...

我试过点灯了  可以亮,  现在就是想控制一下灯的开关,有信号开,没信号关。所以才用到中断等  放弃这种办法了 学AD  用DA试试。   谢谢了
NE5532 发表于 2015-8-4 19:25 | 显示全部楼层
问题出在中断系统和口线的设置上。
 楼主| DFH 发表于 2015-8-4 19:43 | 显示全部楼层
NE5532 发表于 2015-8-4 19:25
问题出在中断系统和口线的设置上。

我真的很矛盾,我的程序在仿真上可行,在实物上却行不通,刚刚我又去弄了一下,改程序试了试 把本来亮的灭,本来灭的亮。  还是行不通   能不能帮我看看,哪里配置出错了吗。:dizzy:
void interrupt ap(void)
{
        //外部中断函数
        if(IOCIE && IOCIF)
        {
                IOCIF = 0;
                NUM++;        
        }
        
        //定时器中断函数
     if(TMR1IF && TMR1IE)        //产生中断,溢出
    {      
         TMR1H = 0XFF;
            TMR1L = 0XB5;                //TMR1赋初值 定时器的定时值清零
        TMR1IF = 0;                  //清溢出
        if( 3 <= NUM )
        {
                LED = 0;
                        LED1 = 0;        
            }   
            if(1 >= NUM)
            {
                        LED = 1;
                        LED1 = 1;   
                }  
        NUM = 0;
    }
}
poorhack 发表于 2015-8-4 20:31 | 显示全部楼层
DFH 发表于 2015-8-4 14:45
这个配置有问题吗  我在这里下载进去的

从配置上看你的RA6脚应该有clk波形输出,如果没有那就是你的片子没有工作。另外内部晶振应该设置成INTOSC
Mick_liang 发表于 2015-8-4 23:02 | 显示全部楼层
外部中断多长时间进一次?定时器呢?
有没有可能定时器中断一次,外部中断了好几次,导致每次NUM>=3
 楼主| DFH 发表于 2015-8-5 08:49 | 显示全部楼层
poorhack 发表于 2015-8-4 20:31
从配置上看你的RA6脚应该有clk波形输出,如果没有那就是你的片子没有工作。另外内部晶振应该设置成INTOSC ...

恩 我去试试,我的是RA5脚恒定输出波形。配置是RC的  
 楼主| DFH 发表于 2015-8-5 08:51 | 显示全部楼层
Mick_liang 发表于 2015-8-4 23:02
外部中断多长时间进一次?定时器呢?
有没有可能定时器中断一次,外部中断了好几次,导致每次NUM>=3 ...

外部中断的,大概200US进去两次。上升,下降各一次。定时了600+US  我要的就是NUM 大于3,灯亮。可是就是行不通  我去试试其他办法先
您需要登录后才可以回帖 登录 | 注册

本版积分规则

DFH

7

主题

40

帖子

0

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