单片机C语言 为什么定时器初始化程序一定要放在主程序里,不能被二次调用?

void main(void){ initSys();//系统初始化 Timer0_init() ;//定时器0初始化 //为什么放在初始化函数里去就不行???????? while(1) { Key_Scan(); Smg_Display();// Beep(); } }
initSys()内的序是这样的
//******************************系统初始化********************************
void initSys(void)
{

Smg_DataPort=0xff;//关闭数码管
Relay=1 ;//关闭继电器
Beep=1 ;//关闭蜂鸣器
RF_A=1; //
RF_B=1; //
Gsm =1; //以上三个端口为设置为输入
Smg_Strat_Mk=0;//数码管启动标志清零

}

timer初始化与系统初始化你需要知道他们之间的关系,如果timer初始化对系统初始化存在依赖关系,那么timer初始化必须在系统初始化之后,或者添加到initSys()函数体执行末尾处也是可以的。追问

我是想把timer初始化也放到系统初始化函数里面,但是放那那边去编译不过,会报错!

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-07
可以阿,把那一行移到initSys()里面就可以了追问

编译不过,会报错!

追答

把那一行移到initSys()里面就可以了,把你的init()贴上来
//******************************系统初始化********************************
void initSys(void)
{

Smg_DataPort=0xff;//关闭数码管
Relay=1 ;//关闭继电器
Beep=1 ;//关闭蜂鸣器
RF_A=1; //
RF_B=1; //
Gsm =1; //以上三个端口为设置为输入
Smg_Strat_Mk=0;//数码管启动标志清零
Timer0_init() ;// 移到这里 不过要在这个子程序前宣告Timer0_init()
}

在用c语言写单片机程序时 应该把什么写在中断什么写在主函数什么写在w...
把上电后只做一次的任务写到主函数里, 比如基本的初始化 把需要不断循环做的任务放到while(1)里,比如轮询,IO状态查询 把不知道什么时间会发生(比如外部中断,按键中断等)以及需要保证准时发生的任务(比如定时器时间到)放到中断里

单片机 c语言中的定时中断函数,在mian函数TH0和TL0有了初始化,为什么在...
因为定时器计数溢出时才产生中断,th0tl0全等于0。这种定时工作方式不会自动重装定时初值,所以中断子函数中要人工装载。主函数中如果省去初值,那就是从0开始计数,第一次进入中断的时间会有误差,所以不能省。

单片机C语言程序,看不懂,求讲解
主程序前面的是对Timer0初始化,赋以初值。执行 TR0 = 1; 这一句以后,Timer0就开始运行了——TL0与TH0组成的13位计数器开始不断递增。当13位全部为1之后,再递增就全部为0,此时溢出事件会触发产生定时器0,同时计数器仍然在继续计数——为了让时间间隔保持一致,就需要再度将计数器赋以初值。

单片机中看门狗定时器的初始化程序应该放在主程序什么地方以及喂狗程...
主程序一般有个无限循环while(1){...} WDT初始化程序应该放在这个循环的前面;喂狗程序一般放在这个循环内部。如:void main(void){ \/\/其他初始化程序...Init_WDT;while(1){ Feed_Dog;\/\/doing your jog };}

定时器延时问题(51单片机,c语言)
之所以没有任何反应,那是你的主程序没有挂起,也就是在while(1)里没有没有大括号,程序执行一次就结束了,所以你什么都看不到。应该这样 while(1){\/\/加入的成对大括号 for(thou=0;thou<=5;thou++) \/\/千位 for(hun=0;hun<=9;hun++) \/\/百位 for(ten=0;ten<=5;ten++) \/\/...

主函数中,没有调用中断子程序,中断子程序为什么能被执行?何时执行?
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系 这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解 ...

如何给单片机系统进行初始化?
\\x0d\\x0a6、打开中断允许、启动定时器(这一步也可根据具体需要放在前面或其它地方)\\x0d\\x0a7、开始主程序循环\\x0d\\x0a对前两项的设置可能不是必须的,但是应该成为一种好的习惯。\\x0d\\x0a\\x0d\\x0a如果是C语言,除了第1、2项不用管,其它也一样。\\x0d\\x0a\\x0d\\x0a 如果...

单片机菜鸟问个小白问题 求解释 C语言程序的。
主程序部分一个循环,首先检测什么按键被按下,按了就给这个全局数组赋值 检测完了之后是显示的代码。我只操作过2位数码管,8位光靠扫描不确定能不能显示得稳定(不闪烁),这个只能靠你了,反正是显示,显示的代码就是从我刚刚说的全局数组读数据,输出到数码管 完了回到循环开始,检测按键有没有被...

单片机编程问题
用定时器中断,大概有10几微妙左右的偏差吧。include<reg51.h>sbit FQ15Hz=P1^0; sbit FQ20Hz=P1^1; sbit FQ30Hz=P1^2; unsigned char Ref30;unsigned char Ref20;unsigned char Ref15;\/\/定时器0初始化void Init_Timer0(void){TMOD |= 0x01;\/\/模式1,16位定时器最大65535us,12MHz晶振...

C语言51单片机中断嵌套问题
因为这是硬件决定的,软件做不到,即便你在高级中断A中关闭了中断B,但是因为你原来的中断B还没有执行完,所以,仍然要把没执行完的部分执行下去,才能返回到正常程序.对于ARM系列的可以,对于51来说,是不行的,因为51软件指令不允许修改PC寄存器的值 ...

相似回答