打印
[51单片机]

中断

[复制链接]
1698|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一点也不懂|  楼主 | 2014-1-13 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint count;
void main()
{               
        EA=1;
        EX0=1;
        P0=0xfe;
        if(count++)
        {
                P0=P0-0x01;
        }

}
void int0() interrupt 0
{
        count++;
}
中断一次 灯一盏一盏加上去
想不通为什么实现不了

相关帖子

沙发
一点也不懂|  楼主 | 2014-1-13 11:19 | 只看该作者
11111111
11111110
11111100
11111011

使用特权

评论回复
板凳
znmcu| | 2014-1-13 11:21 | 只看该作者
这是计数,不是移位
P0<<=1;

使用特权

评论回复
地板
zqy1818| | 2014-1-13 11:24 | 只看该作者
本帖最后由 zqy1818 于 2014-1-13 11:27 编辑

用循环左移的方法P0=(P0<<1)&0xfe;放到定时器中断里面,每中断1次加一个灯

使用特权

评论回复
5
ningling_21| | 2014-1-13 11:38 | 只看该作者
不停的初始化...

使用特权

评论回复
6
Auto_lee| | 2014-1-13 13:10 | 只看该作者
第一没有while函数,第二即使加了while你这样写可能也看不清楚灯的变化情况,
if(count++)
        {
                P0=P0-0x01;
        }
这句话其实和你的定时器关系已经不大了··只要大于零就行。

使用特权

评论回复
7
ayb_ice| | 2014-1-13 13:14 | 只看该作者


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint count = 1;

void main()
{
        EA=1;
        EX0=1;
        IT0 = 1;
        P0=0xfe;

        while(1)
        {
                P0 = count;
        }


}
void int0() interrupt 0
{
        count <<= 1;
        if(count == 0){
                count = 1;
        }
}

使用特权

评论回复
8
一点也不懂|  楼主 | 2014-1-13 13:43 | 只看该作者
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
void main()
{
        P0=0xff;
        while(1)
        {
                EA=1;               
                ET0=1;                        
                TMOD=0x01;            
                TH0=(65536-500)/256;  
                TL0=(65536-500)%256;
                TR0=1;
        }       
}
void time0_interserve(void) interrupt 1
{
        TR0=0;
        P0=P0-0x01;                                                                                 
        TH0=(65536-500)/256;  
        TL0=(65536-500)%256;
        TR0=1;

}我把中断的写出来了 定时器的搞不出

使用特权

评论回复
9
chenyu988| | 2014-1-13 13:51 | 只看该作者
总结楼上的就是:
1、没有while(1),程序跑飞;
2、    if(count++)
        {
                P0=P0-0x01;
        }
这样实现不了顺序移位功能
3、P0=P0>>1;

使用特权

评论回复
10
m564522634| | 2014-1-13 16:01 | 只看该作者
P0=P0-0x01; 这是什么东西了

使用特权

评论回复
11
一点也不懂|  楼主 | 2014-1-13 17:27 | 只看该作者
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint count;
void main()
{       
        P0=0xff;
        while(1)       
        {
                EA=1;
                EX0=1;
                IT0=1;
        }
       
       
}
void int0() interrupt 0
{
        P0=P0-0x01;
}  哎 定时器的实现不了

使用特权

评论回复
12
px123zx| | 2014-1-14 12:33 | 只看该作者
TR0都没有

使用特权

评论回复
13
ZG11211| | 2014-1-14 20:20 | 只看该作者
问题很多,最主要的是没有建立主循环函数,程序根本跑步起来。

使用特权

评论回复
14
weiyg8051| | 2014-1-17 16:30 | 只看该作者
你在8楼的程序不停的在给定时器初始化,当然不会得到想要的结果。定时器初始化后进入while(1)死循环,然后再定时器中断里重装定时值就行了

使用特权

评论回复
15
moxue10| | 2014-4-12 12:27 | 只看该作者
可以用_crol_  来实现,头文件用#include<intrins.h>

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
zoushilin + 1 赞一个!
16
烈炎明龙| | 2014-4-23 20:13 | 只看该作者
呵呵,while(1)中对中断进行配置 大丈夫? EX0=1; 不是开启外部中断0吗? 用计数 大丈夫?  我也是小白呀。

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝