• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51单片机C语言while(1)执行问题

mingming 2021-02-03 浏览量:761
如下图所示,这是一个利用定时器中断让D1(P2^0)led灯隔1秒闪烁的程序,我的问题是:主函数中while(1)的作用是什么?其他渠道得知是让main函数在此循环,可是while(1)下的函数内容不是为空吗?为什么能循环主函数?还是我哪里理解有问题,请大家指教,谢谢。
  1. /@@**************************************************************************************
  2. 实验现象:下载程序后,D1小灯循环点亮1秒,熄灭1秒。使用单片机内部定时器可以实现准确延时
  3.                   
  4. 接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
  5.                    1,单片机-->LED&交通灯模块
  6.                                    P20-->D1
  7.                            
  8.         
  9. 注意事项:                                                                                                                                                               

  10.   
  11. ***************************************************************************************/

  12. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

  13. typedef unsigned int u16;          //对数据类型进行声明定义
  14. typedef unsigned char u8;

  15. sbit led=P2^0;         //定义P20口是led


  16. /@@*******************************************************************************
  17. * 函 数 名         : Timer0Init
  18. * 函数功能                   : 定时器0初始化
  19. * 输    入         : 无
  20. * 输    出         : 无
  21. *******************************************************************************/
  22. void Timer0Init()
  23. {
  24.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  25.         TH0=0XFC;        //给定时器赋初值,定时1ms
  26.         TL0=0X18;        
  27.         ET0=1;//打开定时器0中断允许
  28.         EA=1;//打开总中断
  29.         TR0=1;//打开定时器                        
  30. }

  31. /@@*******************************************************************************
  32. * 函 数 名       : main
  33. * 函数功能                 : 主函数
  34. * 输    入       : 无
  35. * 输    出             : 无
  36. *******************************************************************************/
  37. void main()
  38. {        
  39.         Timer0Init();  //定时器0初始化
  40.         while(1);               
  41. }

  42. /@@*******************************************************************************
  43. * 函 数 名         : void Timer0() interrupt 1
  44. * 函数功能                   : 定时器0中断函数
  45. * 输    入         : 无
  46. * 输    出         : 无
  47. *******************************************************************************/
  48. void Timer0() interrupt 1
  49. {
  50.         static u16 i;
  51.         TH0=0XFC;        //给定时器赋初值,定时1ms
  52.         TL0=0X18;
  53.         i++;
  54.         if(i==1000)
  55.         {
  56.                 i=0;
  57.                 led=~led;        
  58.         }        
  59. }

m data-ke-onclick="copycode($('code_tId'));">复制代码






0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

其他答案 数量:2
  • 中断和主函数没有关系,配置好定时中断那么主函数不做什么中断函数还是会执行的
    • 发布于2021-02-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 我认为while的作用是让芯片知道程序执行到哪里了,不加while的话,芯片不知道去哪里执行了
    • 发布于2021-02-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

51单片机C语言while(1)执行问题