打印

<<手把手教你学单片机C程序设计>>问题一

[复制链接]
2002|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdqinci|  楼主 | 2010-3-28 14:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
chen3bing| | 2010-3-28 14:49 | 只看该作者
什么问题?

使用特权

评论回复
板凳
gdqinci|  楼主 | 2010-3-30 13:23 | 只看该作者
暂时还没发现解决不了的问题

使用特权

评论回复
地板
nanog| | 2010-3-31 18:59 | 只看该作者
想问C语言在单片机里的运行流程!比如:如何一加电初始化芯片----》假如有矩阵键盘如何扫描----》判断----》结束。。。如何调用数据库?C语言能看得懂,一动手编就不知所措。无从下手。。。谢谢。。。

使用特权

评论回复
5
hyg1984| | 2010-3-31 20:08 | 只看该作者
写程序也有个步骤的,刚开始不会的话,照着人家的程序写下去,然后单步来执行程序,你会明白流程的 。

使用特权

评论回复
6
gdqinci|  楼主 | 2010-4-4 21:01 | 只看该作者
回楼兄弟的话:

我只知道机器是上电复位的,在机器的复位引脚检测到复位信号(AT89S51是第9脚连续两个机器周期的高电平,其它的是不是我就不知道了,我估计可能有的机器是低电平复位的)后,机器产生复位中断(我理解成中断),复位中断的入口地址是0000H,也就是ROM的开头,于是所有的程序都重新开始了

使用特权

评论回复
7
gdqinci|  楼主 | 2010-4-4 21:03 | 只看该作者
现在提问我遇到的第一个问题:

在一个C的工程项目里面有两个C文件,为何编译不能通过

04_test2.jpg (92.57 KB )

04_test2.jpg

使用特权

评论回复
8
strang| | 2010-4-5 08:43 | 只看该作者
刚起步不推荐用goto  loop语句,否则,你自己都不知道跳转到哪儿去了、、、

使用特权

评论回复
9
tcc8073| | 2010-4-5 08:54 | 只看该作者
本帖最后由 tcc8073 于 2010-4-5 08:56 编辑

#include <reg51.h>            //包含头文件
   
void delay(void)     //延时函数
{
  unsigned int i,j;
  for(i = 0;i < 500;i++)
  for(j = 0;j <121;j++);
}
void main(void)
{
    while(1)    //无限循环,防止程序跑飞
     {
       P0 = 0x00;     //开始时,P0口的8个LED全部熄灭
       delay();    // 延时一段时间
       P0 =0xff;
       delay();    // 延时一段时间
      }
}

使用特权

评论回复
10
gdqinci|  楼主 | 2010-4-5 09:10 | 只看该作者
回8楼的兄弟:谢谢你提醒,确实很多人在讨论GOTO的用法但原书如此。
回9楼的兄弟:我不是看不懂程序啊,是不知道为什么在一个C的工程项目里面有两个C文件的时候为什么不能编译成功???

使用特权

评论回复
11
rohoboam| | 2010-4-5 10:30 | 只看该作者
那不是两个相同的文件吗?

使用特权

评论回复
12
gdqinci|  楼主 | 2010-4-5 11:17 | 只看该作者
不相同啊,我在同一项目里面加入了两个C文件,结果编译出错了

下面是这两个C文件

#include <reg51.h>
void delay(void);
void main(void)
{
loop:P1=0x00;
      delay();
          P1=0xff;
          delay();
          goto loop;
}

void delay(void)
{
  unsigned int i,j;
  for(i=0;i<500;i++)
  {
    for(j=0;j<121;j++)
        {;}
   }
}

//===========================================

#include <reg51.h>
void delay(void)
{
  unsigned int i,j;
  for(i=0;i<500;i++)
  {
    for(j=0;j<121;j++)
        {;}
   }
}

void main(void)
{
loop:P1=0x00;
      delay();
          P1=0xff;
          delay();
          goto loop;
}

//=====================================

问题到底出在哪啊??

我加入了包含语句,把其中一个文件包含到另一个文件里面去,还把两个同名的函数名也改了,还是不行

请有经验的前辈指出上面的程序有多少错误在里面!!!!!

使用特权

评论回复
13
tcc8073| | 2010-4-5 12:19 | 只看该作者
一个工程里面最好不要出现二个main()函数,你想要调用另外一个函数的话,就把这个函做成头文件.h的形式包含到那个主函数中,我想这是个观念问题,一个工程中应该只有一个主函数,其他函数调用等把它做成头文件.H形式用#include<>调用就可以了,我自己用的时候没有象你这么用过

使用特权

评论回复
14
tcc8073| | 2010-4-5 12:44 | 只看该作者
如果你要用的话就把其中一个函数的MAIN()函数改个其他名字;这里用FFF()代替,不用MAIN这个名字,改完后在调用的的时候把这个函数当普通函数用,EXTERN VIOD FFF();这样你就可以调用这个函了,我的理解是一个工程中只能有一个MAIN()主函数;

使用特权

评论回复
15
xfgood3872| | 2010-4-5 14:30 | 只看该作者
顶8楼

使用特权

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

本版积分规则

36

主题

341

帖子

2

粉丝