打印

跳到另个函数进入了死循环

[复制链接]
1261|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
morrisk|  楼主 | 2013-1-2 12:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
调试的时候发现自己写的C语言代码和KEIL编译的汇编对不上,C语言应该是继续往下进行,而汇编就发生了跳转, 跳到另个函数就进入了死循环, 这是什么问题
沙发
houcs| | 2013-1-2 12:59 | 只看该作者
贴出来看看

使用特权

评论回复
板凳
morrisk|  楼主 | 2013-1-2 13:01 | 只看该作者
声明: 程序很乱 高人有什么看法尽情的泼洒
#include"reg51.h"
#include"8563.h"
#include"24c01.h"
#include"malfunction.h"
#include"display.h"
#include"key.h"
uchar keyb;
uchar gu_xian=0;
uchar gu_cha[6];
void init()
{
        TMOD=0x11;
        TR0=1;
        ET0=1;
        TR1=1;
        ET1=1;
        TH1=53266/256;
        TL1=53266%256;
        TH0=63266/256;
        TL0=63266%256;
        EA=1;
        EX0=1;
        IT0=1;
        dula=0;
        wela=0;

}
void dis_control()//显示模式的选择
{
        switch(disnum)
                {
                        case 0:{shuxian[0]=time.s;shuxian[1]=time.m;shuxian[2]=time.h;};break;
                        case 1:{shuxian[0]=time.d;shuxian[1]=time.mouth;shuxian[2]=time.y;};break;
                        case 2:
                                        {
                                                if(key_num==1){shuxian[0]=0xaa;shuxian[1]=0xff;shuxian[2]=tobcd(a_num);};
                                                if(key_num==2){shuxian[0]=0xbb;shuxian[1]=0xff;shuxian[2]=tobcd(b_num);};
                                                if(key_num==3){shuxian[0]=0xcc;shuxian[1]=0xff;shuxian[2]=tobcd(c_num);};
                                                if(key_num==4){shuxian[0]=0xab;shuxian[1]=0xff;shuxian[2]=tobcd(ab_num);};
                                                if(key_num==5){shuxian[0]=0xbc;shuxian[1]=0xff;shuxian[2]=tobcd(bc_num);};
                                                if(key_num==6){shuxian[0]=0xac;shuxian[1]=0xff;shuxian[2]=tobcd(ac_num);};
                                                /*if(key_num>6)
                                                        {
                                                                if(key_num==36)key_num=1;
                                                                r_24c01(0x04+3*key_num,3,shuxian);};*/
                                                        
                                        };        
                                        break;
                        case 3:{shuxian[0]=0xff;shuxian[1]=time.m;shuxian[2]=0xff;};break;
                        case 4:{shuxian[0]=0xff;shuxian[1]=0xff;shuxian[2]=time.h;};break;
                        case 5:{shuxian[0]=time.d;shuxian[1]=0xff;shuxian[2]=0xff;};break;
                        case 6:{shuxian[0]=0xff;shuxian[1]=time.mouth;shuxian[2]=0xff;};break;
                        case 7:{shuxian[0]=0xff;shuxian[1]=0xff;shuxian[2]=time.y;};break;
                        case 8:;break;
                }
}
void r_24c01(uchar address,uchar z,uchar *databuf)
{
        uchar i;
        Start();
        writebyte(0xa0);        

        writebyte(address);

        Start();
        writebyte(0xa1);

        for(i=0;i<z;i++)
        {
                databuf[i]=Readbyte();
                        if(i<z-1) WriteACK(0);
               
        }
        WriteACK(1);
        Stop();
}
void main()
{
r_24c01(0x01,6,gu_cha);
        init();
//        
        a_num=gu_cha[0];
        b_num=gu_cha[1];
        c_num=gu_cha[2];
        ab_num=gu_cha[3];
        bc_num=gu_cha[4];
        ac_num=gu_cha[5];
        
        
        for(;;)
        {
                dis_control();
                key();
               
        }
}
void timesr_1() interrupt 1
{

        display();
         if(gu_xian)
                {
                        gu_xian++;
                        if(gu_xian>220)
                                {
                                        gu_xian=0;
                                        EX0=1;
                                }
        
                }


        

}
void time1() interrupt 3
{

        if(disnum<2)
                {
               
                        R_8563();
                }
               
}


void int_0() interrupt 0
{
        uchar gu;
        EX0=0;
        disnum=8;
        gu_xian=1;
        gu=key1|0xf8;

        switch(gu)
                {
                        case 0xfe:A();break;
                        case 0xfd:B1();break;
                        case 0xfb:C();break;
                        case 0xfc:AB();break;
                        case 0xfa:AC1();break;
                        case 0xf9:BC();break;

                        default: break;

                }
        
就在FOR循环前 初始化读取r_24c01()的时候就跳到dis_control()//显示模式的选择里 之后就跳到TH1=53266/256;
        TL1=53266%256;
        TH0=63266/256;
        TL0=63266%256;
        EA=1;
        EX0=1;
        IT0=1;
        dula=0;
        wela=0;
就一直死下去了  就怎么安静的死去了

使用特权

评论回复
地板
liuzaiy| | 2013-1-2 13:01 | 只看该作者
void main()
{
r_24c01(0x01,6,gu_cha);
        init();

使用特权

评论回复
5
morrisk|  楼主 | 2013-1-2 13:03 | 只看该作者
那个数组怎么了,本人慧根有限,望高手指明

使用特权

评论回复
6
yinxiangh| | 2013-1-2 13:03 | 只看该作者
既然是全局的数组 为啥还要作为参数传入 直接使用不就得了

使用特权

评论回复
7
ousj| | 2013-1-2 13:07 | 只看该作者
程序写的太乱 看得眼花
程序得一部分一部分的测试

使用特权

评论回复
8
小小猫咪| | 2013-1-2 13:07 | 只看该作者
void main()
{
r_24c01(0x01,6,gu_cha);
        init();
仔细看下:gu_cha与gu_cha[x]有么区别?

使用特权

评论回复
9
zyf部长| | 2013-1-2 13:09 | 只看该作者
写程序时要细心呀,写完后再找错误就麻烦了。

使用特权

评论回复
10
morrisk|  楼主 | 2013-1-2 13:09 | 只看该作者
嗯,记住了,多谢

使用特权

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

本版积分规则

701

主题

6879

帖子

2

粉丝