打印

PIC单片控制灯亮

[复制链接]
1966|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
5
yklstudent| | 2015-8-4 12:14 | 只看该作者
看看配置位呢,

使用特权

评论回复
6
NE5532| | 2015-8-4 14:17 | 只看该作者
检查熔丝,时钟,端口模拟功能是否关闭?也许程序都没运行。

使用特权

评论回复
7
DFH|  楼主 | 2015-8-4 14:40 | 只看该作者

#define WDTDIS 0x3FFB // 看门狗关闭
#define PWRTDIS 0x3FFF // 上电延时定时器关闭
#define BORDIS 0x3FBF // 低电压复位禁止
#define RC 0x3FFF // RC振荡  

使用特权

评论回复
8
DFH|  楼主 | 2015-8-4 14:42 | 只看该作者
NE5532 发表于 2015-8-4 14:17
检查熔丝,时钟,端口模拟功能是否关闭?也许程序都没运行。

我早上把定时器关掉了就一个外部中断。一进入中断就点灯,但是还是不亮  在仿真上面都亮了。   弄到实物上去 还是不亮灯,电压为0;

使用特权

评论回复
9
DFH|  楼主 | 2015-8-4 14:43 | 只看该作者
DFH 发表于 2015-8-4 14:40
#define WDTDIS 0x3FFB // 看门狗关闭
#define PWRTDIS 0x3FFF // 上电延时定时器关闭
#define BORDIS  ...

仿真都成功了  实物就不行。

使用特权

评论回复
10
DFH|  楼主 | 2015-8-4 14:45 | 只看该作者
这个配置有问题吗  我在这里下载进去的

捕获.PNG (27.63 KB )

捕获.PNG

使用特权

评论回复
11
NE5532| | 2015-8-4 15:08 | 只看该作者
DFH 发表于 2015-8-4 14:42
我早上把定时器关掉了就一个外部中断。一进入中断就点灯,但是还是不亮  在仿真上面都亮了。   弄到实物 ...

软件写个死循环,什么中断都不要用,说得已经很清楚了。楼主初学,既然搞不定,就从最基本的入手,不要逞能,一次只调一个功能。

使用特权

评论回复
12
yklstudent| | 2015-8-4 16:45 | 只看该作者
时钟源设置有问题吧,你外部用的RC时钟源?不是用的晶振????

使用特权

评论回复
13
DFH|  楼主 | 2015-8-4 19:17 | 只看该作者
yklstudent 发表于 2015-8-4 16:45
时钟源设置有问题吧,你外部用的RC时钟源?不是用的晶振????

恩,没有用到晶振,用内部振荡器RC  我放弃了,学DA  用DA来试试。

使用特权

评论回复
14
DFH|  楼主 | 2015-8-4 19:20 | 只看该作者
NE5532 发表于 2015-8-4 15:08
软件写个死循环,什么中断都不要用,说得已经很清楚了。楼主初学,既然搞不定,就从最基本的入手,不要逞 ...

我试过点灯了  可以亮,  现在就是想控制一下灯的开关,有信号开,没信号关。所以才用到中断等  放弃这种办法了 学AD  用DA试试。   谢谢了

使用特权

评论回复
15
NE5532| | 2015-8-4 19:25 | 只看该作者
问题出在中断系统和口线的设置上。

使用特权

评论回复
16
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;
    }
}

使用特权

评论回复
17
poorhack| | 2015-8-4 20:31 | 只看该作者
DFH 发表于 2015-8-4 14:45
这个配置有问题吗  我在这里下载进去的

从配置上看你的RA6脚应该有clk波形输出,如果没有那就是你的片子没有工作。另外内部晶振应该设置成INTOSC

使用特权

评论回复
18
Mick_liang| | 2015-8-4 23:02 | 只看该作者
外部中断多长时间进一次?定时器呢?
有没有可能定时器中断一次,外部中断了好几次,导致每次NUM>=3

使用特权

评论回复
19
DFH|  楼主 | 2015-8-5 08:49 | 只看该作者
poorhack 发表于 2015-8-4 20:31
从配置上看你的RA6脚应该有clk波形输出,如果没有那就是你的片子没有工作。另外内部晶振应该设置成INTOSC ...

恩 我去试试,我的是RA5脚恒定输出波形。配置是RC的  

使用特权

评论回复
20
DFH|  楼主 | 2015-8-5 08:51 | 只看该作者
Mick_liang 发表于 2015-8-4 23:02
外部中断多长时间进一次?定时器呢?
有没有可能定时器中断一次,外部中断了好几次,导致每次NUM>=3 ...

外部中断的,大概200US进去两次。上升,下降各一次。定时了600+US  我要的就是NUM 大于3,灯亮。可是就是行不通  我去试试其他办法先

使用特权

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

本版积分规则

DFH

7

主题

40

帖子

0

粉丝