找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2059|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機主函數(shù)里的變量值為什么傳送不到終端服務函數(shù)中

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210474 發(fā)表于 2017-6-14 10:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

當while(1)中的TT或者t改變時,中斷函數(shù)1中的T(TT仍然為255)T和中斷5中的t(t仍然為10)都不會發(fā)生相應的變化。請問有什么辦法可以解決這個問題。謝謝了。!
  1. /**********************************************************/

  2. #include<reg52.h>

  3. unsigned char PWM=0x7f ; //賦初值

  4. char code reserve [3] _at_ 0x3b; //保留0x3b開始的3個字節(jié)
  5. unsigned char t;
  6. unsigned char TT;
  7. unsigned char count=0;
  8. unsigned char flag;

  9. sbit BEEP =P3^7 ; //蜂鳴器
  10. /*********************************************************

  11. 延時子程序

  12. *********************************************************/
  13. void delayms(unsigned char ms)

  14. {
  15. unsigned char i ;
  16. while(ms--)
  17. {
  18. for(i=0 ; i<114 ; i++) ;
  19. }
  20. }
  21. /*************T1定時器的初始化程序***********************/
  22. void init2_main()
  23. {
  24. SCON = 0x50; //設(shè)定串口工作方式1,接收使能
  25. PCON = 0x00; //波特率不倍增

  26. TMOD = 0x20; //定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率
  27. EA = 1;
  28. TL1 = 0xfd;
  29. TH1 = 0xfd; //波特率9600
  30. TR1 = 1;

  31. }
  32. /****T2定時器初始化程序********************************/
  33. void init_main()
  34. {
  35. RCAP2H=0XFF;
  36. RCAP2L=0x66;
  37. TH2=RCAP2H;
  38. TL2=RCAP2L;
  39. T2CON=0;
  40. IE=0xb0;
  41. EA=1;
  42. ET2=1;

  43. }
  44. /*********************************************************/
  45. void main()
  46. { t=10;
  47. TT=255;

  48. BEEP = 1;

  49. ES = 1;
  50. init_main();
  51. TMOD=0x01 ;
  52. TH0=0xff ;
  53. TL0=0x66 ;
  54. EA=1;
  55. ET0=1;

  56. init2_main();
  57. delayms(100);

  58. while(1)
  59. {

  60. if(t>TT) {BEEP=!BEEP;P0=0xff;}
  61. if(flag==1){t=PWM;}
  62. if(flag==2){TT=PWM;}
  63. }
  64. }
  65. /*********************************************************

  66. 定時器0中斷服務程序

  67. *********************************************************/
  68. void timer0() interrupt 1
  69. {
  70. if(PWM!=0x02)
  71. {t=PWM;
  72. flag=1;}
  73. TT=TT;
  74. TH0=0xff ;
  75. TL0=0x66 ;
  76. count++;
  77. if(count<=t){P0=0x00;}
  78. if(count>t) {P0=0xFF;}
  79. if(count>TT){count=0;}
  80. }

  81. /*********************************************************

  82. 定時器2中斷服務程序

  83. *********************************************************/
  84. void timer1() interrupt 5
  85. { TF2=0;
  86. if(PWM!=0X01){TT=PWM;flag=2;}

  87. RCAP2H=0xff;
  88. RCAP2L=0x66 ;
  89. t=t;
  90. count++;
  91. if(count<=t){P0=0x00;}
  92. if(count>t) {P0=0Xff;}
  93. if(count>=TT){count=0;}
  94. /*********************串口中斷服務程序************************************/

  95. void mm() interrupt 4
  96. {
  97. RI=0;
  98. PWM=SBUF;
  99. if(PWM==0x01)
  100. {
  101. TR2=0;
  102. TR0=1;
  103. flag=0;
  104. }
  105. if(PWM==0x02)
  106. {
  107. TR0=0;
  108. TR2=1;
  109. TT=PWM;
  110. flag=0;
  111. }
  112. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2017-6-15 00:27 | 只看該作者
這取決于哪個先被執(zhí)行。
如果參數(shù)X在主程序中先被改動為A,而后產(chǎn)生中斷,則中斷中所用的X就是A了。
你能弄清誰先動了X嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表