3994|4

14

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于51单片机掉电模式的问题 [复制链接]

一个关于中断的问题!麻烦好心人解答下!

例子的要求是,开启两个外部中断,设置低电平触发中断,用定时器技术并且显示在数码管的前两位,当技术到5是,使单片机进入空闲模式,同时关闭定时器,当单片机响应外部中断后,从空闲模式返回,同时开启定时器。

我的问题是:为什么程序只能让数码管在十位和个位上闪来闪去,但是不能计数


#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x03,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};

void delay1ms()
{
        uint i,j;
        for(i=1100;i>0;i--)
                for(j=255;j>0;j--);
}

void disp(uchar shi,uchar ge)
{
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay1ms();
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay1ms();

}

void main()
{       
        uchar a,b,num1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        EX0=1;
        EX1=1;
        TR0=1;
        {       
                if(num>=20)
                {
                        num=0;
                        num1++;
                        if(num1==6)
                        {        
                                ET0=0;
                                PCON=0x02;
                        }
                        a=num1/10;
                        b=num1%10;
                }
                disp(a,b);
        }
}

void time0()interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
}

void ex_int0()interrupt 0
{
        PCON=0;
        ET0=1;
}

void ex_int1()interrupt 2
{
        PCON=0;
        ET0=1;
}


此帖出自51单片机论坛

最新回复

你把disp(a,b);放到if语句里看看   详情 回复 发表于 2014-8-3 21:31
点赞 关注
 

回复
举报

105

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
在主函数中你没有死循环,程序一下子就执行完了,你的数码管上显示的是乱码
此帖出自51单片机论坛

点评

其实我后来也看到了,而且改了,但是效果还是在两个数码管显示的都是B ,而且只是跳来跳去,不能实现功能  详情 回复 发表于 2014-8-2 18:58
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
随风暗影 发表于 2014-8-2 17:23
在主函数中你没有死循环,程序一下子就执行完了,你的数码管上显示的是乱码

其实我后来也看到了,而且改了,但是效果还是在两个数码管显示的都是B   ,而且只是跳来跳去,不能实现功能

此帖出自51单片机论坛

点评

你把disp(a,b);放到if语句里看看  详情 回复 发表于 2014-8-3 21:31
 
 
 

回复

105

帖子

1

TA的资源

一粒金砂(中级)

4
 
h496097962 发表于 2014-8-2 18:58
其实我后来也看到了,而且改了,但是效果还是在两个数码管显示的都是B   ,而且只是跳来跳去,不能实现功 ...

你把disp(a,b);放到if语句里看看
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

5
 
还是一样的效果
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表