打印

主函数指针为什么不是地址00开始

[复制链接]
1583|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hufa123|  楼主 | 2010-3-8 20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit SCL=P1^0;
sbit SDA=P1^1;
code uchar disptab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x48};
code uchar bittab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar disnum,key_1_num,month,hour,min,year,day;
uchar dispbuf[6];//显存
uchar shuxian[3]={0x11,0x02,0x03};//临时放数据,放时BCD码
bit t_int0;
void init()
{
TMOD=0x01;
EA=1;
    TH0=63266/256;
TL0=63266%256;
TR0=1;
ET0=1;
dula=0;
wela=0;
disnum=1;

}
//**************键盘部分*************************
/*void delay(int n)
{
int z;
for(z=n;z>0;n--);

}

void key_1()
{
  key_1_num++;
if(key_1_num==7)
{
  key_1_num=0;
}
}void key_2()
{
switch(key_1_num)
{
  case  1:shuxian[2]++;
    break;
  case  2:
    {month++;
     if(month==13)
      month=1;
    }break;
  case 3:{
     day++;
     if(day==30)
      day=1;
    }break;
  case 4:{
     hour++;
     if(hour==25)
     hour=0;
    }break;
  case 5:{
     min++;
     if(min==61)
      min=0;
    }break;
  case 6:{
   
    }break;
}
}
void key_3()
{
key_1_num=0;
}
void key_4()
{
key_1_num=0;
}
void key()
{
uchar key_value,c;
c=~P1;
key_value=c&0xf0;
delay(1000);
c=~P1;
if((key_value&c)!=1)
{
  do
  {
   c=~P1;
  }
  while((key_value&c)!=1);
  delay(1000);
  switch(key_value)
  {
   case 0x10:key_1();break;
   case 0x20:key_1();break;
   case 0x30:key_3();break;
   case 0x40:key_4();break;
  }
}

}
*/
//**************显示部分*************************
void display()
{
static uchar mun;
if(t_int0==1)// 模式一正常显示时间
{
  
  
   
        uchar temp;
        t_int0=0 ;
  TH0=63266/256;
  TL0=63266%256;
  
     dispbuf[0]=shuxian[0]>>4&0x7;
  dispbuf[1]=shuxian[0]&0x0f;
  dispbuf[2]=shuxian[1]>>4&0x7;
  dispbuf[3]=shuxian[1]&0x0f;
  dispbuf[4]=shuxian[2]>>4&0x7;
  dispbuf[5]=shuxian[2]&0x0f;
  P0=0xff;
  wela=1;
  P0=P0&bittab[mun];
  wela=0;
  temp=dispbuf[mun];
  dula=1;
  P0=disptab[temp];
  dula=0;
  mun++;
  if(mun==6)
  mun=0;
}
}
//**************中断部分*************************
void time_int0() interrupt 1
{
t_int0=1;
    TH0=63266/256;
TL0=63266%256;
}
//**************MAIN*************************
void main()
{
init();
while(1)
{
  display();
   // key();
  //guzhang();
}
}

为什么加上键盘部分就MAIN开始地址不是MAIN,不知道为什么?这种情况不知道什么原因

相关帖子

沙发
HWM| | 2010-3-8 20:29 | 只看该作者
通常都不会是0000h,而是通过一段startup程序转入main。

使用特权

评论回复
板凳
原野之狼| | 2010-3-8 20:36 | 只看该作者
用C语言编写程序 在运行MAIN之前会运行一段启动代码 你可以调出汇编看看干了些什么
另:你的帖子的提问似乎跟标题不一致 不知作和理解

使用特权

评论回复
地板
hufa123|  楼主 | 2010-3-8 21:24 | 只看该作者
MAIN之前有好几段代码 不过无缘无故的指针就跑飞了进入死循环,不对,是我真不知道什么原因,就上面的代码,加入键盘就飞了

使用特权

评论回复
5
dwq175| | 2010-3-9 11:06 | 只看该作者
应该在key()里的do{c=~p1)whiel((key_value&c)!=1);死循环了。

使用特权

评论回复
6
hufa123|  楼主 | 2010-3-9 17:52 | 只看该作者
单独调试都能正常啊  也不再那进入死循环,搞不明白那编译的时候MIAN不在前面的前面几个地址

使用特权

评论回复
7
Mindor| | 2010-3-14 07:47 | 只看该作者
用C语言写的程序,不是需要一段启动代码吗?可能开始的那几个存储单元是用来放启动代码的吧?

使用特权

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

本版积分规则

186

主题

393

帖子

2

粉丝