单片机故障排除篇--如何判定是硬件问题还是软件问题?

举报
zhangrelay 发表于 2021/11/03 22:17:18 2021/11/03
【摘要】   一段代码写完了,编译下载都ok。 但是没有看到想要的结果?怎么排错??? 借一个别人正常的板子是一种方法,但是镜像提供了全仿真工具,试一下吧。 新建项目:  添加time.c到工程中!  添加复用数码管。   当然程序要做微微调整。   单...

 

一段代码写完了,编译下载都ok。

但是没有看到想要的结果?怎么排错???

借一个别人正常的板子是一种方法,但是镜像提供了全仿真工具,试一下吧。

新建项目:

 添加time.c到工程中!

 添加复用数码管。

 

当然程序要做微微调整。

 

单片机课堂思考题-2000秒倒计时?

参考上例程序:

先分配管脚和端口


  
  1. #include<8052.h>
  2. unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90};
  3. unsigned char T0RH = 0;
  4. unsigned char T0RL = 0;
  5. unsigned int cnt;
  6. int sec;
  7. int sec_all=6666;
  8. int count=0;
  9. void LedScan(unsigned char pos,unsigned char dispcode);
  10. void EXINT0() __interrupt 0;
  11. void Timer0() __interrupt 1;
  12. void EXINT1() __interrupt 2;
  13. void ConfigTimer0(unsigned int);
  14. void main()
  15. {
  16. cnt = 0;
  17. sec = sec_all;
  18. ConfigTimer0(2);
  19. IT0=1;
  20. EX0=1;
  21. IT1=1;
  22. EX1=1;
  23. PX1=1;
  24. TR0=1;
  25. while(1)
  26. {
  27. LedScan(0,smgduan[sec%10]);
  28. LedScan(1,smgduan[sec/10%10]);
  29. LedScan(2,smgduan[sec/100%10]);
  30. LedScan(3,smgduan[sec/1000]);
  31. if(count%2==0)
  32. {
  33. TR0 = 1;
  34. }
  35. else
  36. {
  37. TR0 = 0;
  38. }
  39. }
  40. }
  41. void EXINT0() __interrupt 0
  42. {
  43. count++;
  44. }
  45. void EXINT1() __interrupt 2
  46. {
  47. sec_all=0;
  48. }
  49. void ConfigTimer0(unsigned int ms)
  50. {
  51. unsigned long tmp;
  52. tmp = 11059200 / 12;
  53. tmp = (tmp * ms) / 1000;
  54. tmp = 65536 - tmp;
  55. tmp = tmp + 18;
  56. T0RH = (unsigned char)(tmp>>8);
  57. T0RL = (unsigned char)tmp;
  58. TMOD &= 0xF0;
  59. TMOD |= 0x01;
  60. TH0 = T0RH;
  61. TL0 = T0RL;
  62. ET0 = 1;
  63. }
  64. void Timer0() __interrupt 1
  65. {
  66. TH0 = T0RH;
  67. TL0 = T0RL;
  68. cnt++;
  69. if (cnt >= 5)
  70. {
  71. cnt = 0;
  72. sec--;
  73. if (sec < 0)
  74. {
  75. sec = sec_all;
  76. }
  77. }
  78. }
  79. void LedScan(unsigned char pos,unsigned char dispcode)
  80. {
  81. unsigned char i;
  82. for(i=0;i<=pos;i++)
  83. {
  84. switch(pos) {
  85. case(0):
  86. P1_0=0;P1_1=1;P1_2=1;P1_3=1; break;
  87. case(1):
  88. P1_0=1;P1_1=0;P1_2=1;P1_3=1; break;
  89. case(2):
  90. P1_0=1;P1_1=1;P1_2=0;P1_3=1; break;
  91. case(3):
  92. P1_0=1;P1_1=1;P1_2=1;P1_3=0; break;
  93. }
  94. P0=dispcode;
  95. }
  96. }

 


  
  1. #include<8052.h>
  2. unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90};
  3. unsigned char T0RH = 0;
  4. unsigned char T0RL = 0;
  5. unsigned int cnt;
  6. int sec;
  7. int sec_all=6666;
  8. int count=0;
  9. void LedScan(unsigned char pos,unsigned char dispcode);
  10. void EXINT0() __interrupt 0;
  11. void Timer0() __interrupt 1;
  12. void EXINT1() __interrupt 2;
  13. void ConfigTimer0(unsigned int);
  14. void main()
  15. {
  16. cnt = 0;
  17. sec = sec_all;
  18. ConfigTimer0(1);
  19. IT0=1;
  20. EX0=1;
  21. IT1=1;
  22. EX1=1;
  23. PX1=1;
  24. TR0=1;
  25. while(1)
  26. {
  27. LedScan(0,smgduan[sec%10]);
  28. LedScan(1,smgduan[sec/10%10]);
  29. LedScan(2,smgduan[sec/100%10]);
  30. LedScan(3,smgduan[sec/1000]);
  31. if(count%2==0)
  32. {
  33. TR0 = 1;
  34. }
  35. else
  36. {
  37. TR0 = 0;
  38. }
  39. }
  40. }
  41. void EXINT0() __interrupt 0
  42. {
  43. count++;
  44. }
  45. void EXINT1() __interrupt 2
  46. {
  47. sec_all=0;
  48. }
  49. void ConfigTimer0(unsigned int ms)
  50. {
  51. unsigned long tmp;
  52. tmp = 11059200 / 12;
  53. tmp = (tmp * ms) / 1000;
  54. tmp = 65536 - tmp;
  55. tmp = tmp + 18;
  56. T0RH = (unsigned char)(tmp>>8);
  57. T0RL = (unsigned char)tmp;
  58. TMOD &= 0xF0;
  59. TMOD |= 0x01;
  60. TH0 = T0RH;
  61. TL0 = T0RL;
  62. ET0 = 1;
  63. }
  64. void Timer0() __interrupt 1
  65. {
  66. TH0 = T0RH;
  67. TL0 = T0RL;
  68. cnt++;
  69. if (cnt >= 2)
  70. {
  71. cnt = 0;
  72. sec--;
  73. if (sec < 0)
  74. {
  75. sec = sec_all;
  76. }
  77. }
  78. }
  79. void LedScan(unsigned char pos,unsigned char dispcode)
  80. {
  81. unsigned char i;
  82. for(i=0;i<=pos;i++)
  83. {
  84. switch(pos) {
  85. case(0):
  86. P1_0=0;P1_1=1;P1_2=1;P1_3=1; break;
  87. case(1):
  88. P1_0=1;P1_1=0;P1_2=1;P1_3=1; break;
  89. case(2):
  90. P1_0=1;P1_1=1;P1_2=0;P1_3=1; break;
  91. case(3):
  92. P1_0=1;P1_1=1;P1_2=1;P1_3=0; break;
  93. }
  94. P0=dispcode;
  95. }
  96. }

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/121115586

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。