打印

PIC16F877a不能延时,进入中断

[复制链接]
1138|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzaiy|  楼主 | 2021-5-5 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<pic.h>
#define uchar unsigned char
#define uint  unsigned int
__CONFIG(0x3B31);

#define S17 RC7         //定义按键IO
#define S18 RC6         
#define S19 RC5         
#define S20 RC4         
#define S21 RC3      
void init();
uint intnum;
void main()
{
        init();
        while(1)
        {
       if(S17==0)
                {
                if(intnum>20)
                        {
                        if(S17==0)
                        //intnum=0;
                        RB2=!RB2;
                        }
                }        
        }
}

void init()
{
        TRISD=0;
        PORTD=0XFF;

        TRISC=0x00;       //RC设置为输出
        PORTC=0xff;       //初始化为高

        TRISB=0x00;       //RB设置为输出
        PORTB=0xff;       //初始化为高        

        INTCON=0xc0;
        PIE1=0x01;
        TMR1L=(65536-50000)%256;
        TMR1H=(65536-50000)/256;
        T1CON=0x21;

}

void interrupt time0()
{
        TMR1IF=0;
        TMR1L=(65536-50000)%256;
        TMR1H=(65536-50000)/256;
        intnum++;
//RD0=!RD0;//
}

使用特权

评论回复
沙发
bqyj| | 2021-5-5 21:17 | 只看该作者
高手表示,不知道你想问哪行的问题。

使用特权

评论回复
板凳
liuzaiy|  楼主 | 2021-5-5 21:23 | 只看该作者

if(S17==0)
                {
                if(intnum>20)
                        {
                        if(S17==0)
                        //intnum=0;
                        RB2=0;
                        }
                }        

这里的
想要S17长按几秒后RB2输出一个低电平谢谢
试过了就是这里的定时计数不管用!!?

使用特权

评论回复
地板
liuzaiy|  楼主 | 2021-5-5 21:25 | 只看该作者

while(1)
        {
               if(S17==0)        
                        {
                        delay(1000);
                        delay(1000);
                        delay(1000);
                        delay(1000);
                        delay(1000);
                delay(1000);
                delay(1000);
                delay(1000);
                delay(1000);
                delay(1000);
                        //intnum++;
                        //if(intnum>1000)
                        //intnum=0;
                        RB2=0;
                        }                        
        }
高手!!!
为什么这样子又可以呢,请求帮助!谢谢!!!

使用特权

评论回复
5
gongche| | 2021-5-5 21:29 | 只看该作者
确认定时器有没有跑起来,定时器中断进去了没有

使用特权

评论回复
6
jlyuan| | 2021-5-5 21:33 | 只看该作者
还有就是intnum没有初始化,也没有清0.

使用特权

评论回复
7
liuzaiy|  楼主 | 2021-5-5 21:36 | 只看该作者
把前面的判断语句if(S17==0)不要就是可自动跑的!!!

使用特权

评论回复
8
stly| | 2021-5-5 21:41 | 只看该作者
程序架构不好,请自己画下流程图,再写。

使用特权

评论回复
9
liuzaiy|  楼主 | 2021-5-5 21:43 | 只看该作者
好的谢谢!!!我再试试!!

使用特权

评论回复
10
pengf| | 2021-5-5 21:46 | 只看该作者
判断完 intnum 以后要清零

使用特权

评论回复
11
liuzaiy|  楼主 | 2021-5-5 21:56 | 只看该作者
大侠有没有好一点的按键处理程序呢——,按键按下大于10S,,-----------I/O口输出一下高电平或者低电平

使用特权

评论回复
12
stly| | 2021-5-5 21:58 | 只看该作者
这个掉牙的芯片,还有在用?

使用特权

评论回复
13
liuzaiy|  楼主 | 2021-5-5 22:00 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
14
mcumail| | 2021-5-6 08:15 | 只看该作者
没用过这款单片机,建议把配置字仔细设置一下,每一位都要考虑,还有初始化的部分。

使用特权

评论回复
15
systemchip| | 2021-5-6 09:44 | 只看该作者
你仔细看一看你代码里面TRISC是设置了什么再说吧

使用特权

评论回复
16
shizaigaole| | 2021-5-6 16:24 | 只看该作者
877 这么老的片子,不应该再学了,学了一会也用不上。片子及时能买到,也贵的要死。
性能还差

使用特权

评论回复
17
shizaigaole| | 2021-5-6 16:26 | 只看该作者
除非是那种要求极其便宜的小家电,不建议使用microchip任何低于32位的mcu。
因为人的精力有限,及时是比较简单片子,要玩熟悉,也要花点时间。

至少cm0内核起步,以后你选片子,适用范围大。

使用特权

评论回复
18
shizaigaole| | 2021-5-6 16:28 | 只看该作者
microchip 总是舍不得放弃自己的8bit mcu。
除了那种极其简单的应用,8bit mcu以及没有任何存在的意义。

使用特权

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

本版积分规则

735

主题

7546

帖子

2

粉丝