单片机一个程序上面是子函数,下面是主函数,运行顺序是从哪里开始?会对子函数和主函数分别重复运行吗?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-30
单片机里的程序是从main函数开始执行的吗?请高手进。

那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main

如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试

程序上的问题,一个大问题,一个小问题。
一、当按下一次按键时,程序扫描过很多次按键了,会执行很多次 key_porc(); 所以会不停地闪。你需要做的是,一次按下,程序会扫描到多次按下的状态,但是你只能让第一次是有效的,后面的按下状态无效。直到松开按键,再次按下,再有效。
二、按键应当独立,尽量不要混在一起来写。
解决方案:
void key1_scan(){ //key2 相同
static uchar keyNum = 0;
k1 = 1;
if( k1 == 0){ //按下
if(keyNum == 10){
key_proc(1); //需要小改一下
}
if(keyNum <= 10)
keyNum++;
} else
keyNum = 0;
}

不管是C语言还是汇编,程序总是从主程序开始的,子程序只有在被主程序调用时才运行,子程序若不被调用,就是废码
子程序可以写在主程序之前也可写在主程序之后

从main开始的。其他的函数不调用不会执行的。

main函数之前的都是对变量的定义和函数声明,执行是从main函数开始。

执行主函数,如果没有调用子函数,则不会执行

从主函数开始运行,再从主函数main里调用子函数

  • 一个简单的单片机程序,帮忙注释几行。我是初学者,谢谢!
    答:{ P1=temp;beep=0; //这个 beep=0 和下面 beep=1 形成了一个以 2*delay(100) 为周期的脉冲信号。//又由于 sbit beep=P2^3 所以,由单片机的 P2.3 脚输出这个脉冲信号。delay(100);temp=_crol_(temp,1); // temp Bit 左移一位,看看上面 P1=temp,//当这个循环下一次进入时,...
  • 求大神帮忙,逐句注释一下单片机c程序。 重谢
    答:delay_us(T-cycle); ‘调用delay_us函数,赋值为T-cycle } } } void delay (unsigned int z) ‘delay子函数,利用循环重复执行命令的方式起到延迟时间的作用 { unsigned int x,y; ‘定义整型变量x,y for(x=z;x>0;x--)...
  • 请帮我看一下这个单片机C语言程序,主函数都没有引用子函数?
    答:interrupt1是声明中断向量1的,tr0=1是定时器0开始工作,ea=1是全局开中断,et0=1,开定时器0中断,初始化定时器就是设置定时器的工作状态,和定时时间,具体你去查一下寄存器TMOD,TCON,还有定时时间的计算,呵呵,你要看的东西太多了
  • 单片机问题 两个子函数都是改变{行,列,需要输入1602的数据} 有什么不...
    答:void L1602_char函数:只显示1个字符。void L1602_string函数:显示1个字符串。由于字符串的截止符是'\0' (实际内容是0x00),所以循环送显的过程中,当if(*p == '\0')结果为真时就执行break跳出循环,送显示结束。
  • 单片机c语言函数和子程序是一回事吧?
    答:是的,在C语音中main函数为主程序,其他所有函数都可以被称作子程序。
  • 单片机程序有哪几部分组成?头文件的作用是什么?
    答:头文件,变量声明,函数声明,子函数,主函数这几部分组成,头文件其实就是一种声明,将单片机中的一些常用的符号变量进行定义声明,对一些特殊功能寄存器进行声明,对一些关健字进行定义,比如我们常用的P0口,在写程序的时候你就不用在去定义这个符号,不用把它的字节地址给这个符号了,直接用就可以 ...
  • 1、 已知单片机的晶振为12M,请以子函数形式写出10毫秒延时程序。该怎...
    答:下面有你要的 选一个吧 下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到...
  • 单片机中,主程序和子程序可以互为调用
    答:主程序可以调用子程序,子程序可以调用子程序,子程序不可调用主程序。中断程序也可以调用子程序。
  • 求教一个51单片机程序。。(LCD电子时钟)
    答:这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些什么东西啊,具体步骤是怎么做的呢?现在手上有一块单片机... 这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些...
  • 一个简单的单片机程序
    答:include <REG2051.H> void delay(unsigned char a) { unsigned char b=0;for(b=0;b>=a;b++);} //延时函数 void main (void){ P1=0xff;P3=0xff;while(1){ while(P3_0==1);//当等于1时,执行下面的延时 delay(255);while(P3_0==0); //当等于0时,执行下面的P1=0xfb P1=...