当前位置:   article > 正文

单片机原理与应用实验——外部中断(C语言&汇编),每次中断使蜂鸣器响3次_51单片机蜂鸣器响三声

51单片机蜂鸣器响三声

(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译)

 

 

1. C语言版

  1. #include <STC12C5A60S2.h>
  2. sbit LED1 = P2 ^ 4;
  3. sbit LED2 = P2 ^ 5;
  4. sbit LED3 = P2 ^ 6;
  5. sbit LED4 = P2 ^ 7;
  6. sbit BEEP = P1 ^ 0; //置1则响
  7. sbit KEY1 = P3 ^ 2;
  8. sbit KEY2 = P3 ^ 4;
  9. void delay_2ms(unsigned long int time) //2ms的基
  10. {
  11. unsigned long int i;
  12. for (i = 0; i < time * 100; i++);
  13. }
  14. void ISR_Init()
  15. {
  16. IT0 = 0; //设置中断触发方式:0——低电平触发 1——下降沿触发 (测试方法:长按效果)
  17. EX0 = 1; //打开外部中断
  18. EA = 1; //打开总中断
  19. }
  20. void INT0_ISR() interrupt 0
  21. {
  22. EX0 = 0; //关闭外部中断
  23. delay_2ms(5);
  24. if(KEY1==0)
  25. {
  26. unsigned char i;
  27. for(i=0;i<3;i++)
  28. {
  29. BEEP=1;
  30. delay_2ms(250);
  31. BEEP=0;
  32. delay_2ms(250);
  33. }
  34. }
  35. EX0 = 1; //打开外部中断
  36. }
  37. //----------------------------------------------------------
  38. void main()
  39. {
  40. BEEP=0;
  41. ISR_Init(); // 中断初始化…代码略去
  42. while(1)
  43. {
  44. delay_2ms(250);
  45. LED1=0;LED2=1;LED3=1;LED4=1;
  46. delay_2ms(250);
  47. LED1=1;LED2=0;LED3=1;LED4=1;
  48. delay_2ms(250);
  49. LED1=1;LED2=1;LED3=0;LED4=1;
  50. delay_2ms(250);
  51. LED1=1;LED2=1;LED3=1;LED4=0;
  52. }
  53. }

 

2. 汇编语言版

  1. LED1 BIT P2.4
  2. LED2 BIT P2.5
  3. LED3 BIT P2.6
  4. LED4 BIT P2.7
  5. KEY1 BIT P3.2
  6. BEEP BIT P1.0
  7. ;-----------------------------------------------------------------------------------------------------
  8. KEY1_State DATA 69H ; 将地址69H用伪指令命名为KEY1_State
  9. TEMPVAL_1 DATA 70H
  10. DelayTimes_100MS EQU 6FH ; 将地址6FH用伪指令命名为DelayTimes_100MS
  11. ;----------------------------------------------------------------------------------------------------
  12. ORG 0000H
  13. LJMP MAIN
  14. ORG 0003H
  15. LJMP INT0_ISR
  16. ORG 0100H
  17. MAIN:
  18. LCALL ISR_INIT
  19. CLR BEEP
  20. LOOP:
  21. CLR LED1
  22. SETB LED2
  23. SETB LED3
  24. SETB LED4
  25. MOV DelayTimes_100MS,#5
  26. LCALL Delay100MS
  27. SETB LED1
  28. CLR LED2
  29. SETB LED3
  30. SETB LED4
  31. MOV DelayTimes_100MS,#5
  32. LCALL Delay100MS
  33. SETB LED1
  34. SETB LED2
  35. CLR LED3
  36. SETB LED4
  37. MOV DelayTimes_100MS,#5
  38. LCALL Delay100MS
  39. SETB LED1
  40. SETB LED2
  41. SETB LED3
  42. CLR LED4
  43. MOV DelayTimes_100MS,#5
  44. LCALL Delay100MS
  45. AJMP LOOP
  46. ;--------------------------------------------------------------------------------------------------------
  47. //中断服务函数
  48. INT0_ISR:
  49. PUSH 04H
  50. PUSH 05H
  51. PUSH 06H
  52. PUSH 07H
  53. MOV TEMPVAL_1,#0
  54. BEEPSTART:
  55. SETB BEEP
  56. MOV DelayTimes_100MS,#5
  57. LCALL Delay100MS
  58. CLR BEEP
  59. MOV DelayTimes_100MS,#5
  60. LCALL Delay100MS
  61. INC TEMPVAL_1
  62. MOV A,TEMPVAL_1
  63. CJNE A,#3,BEEPSTART
  64. POP 07H
  65. POP 06H
  66. POP 05H
  67. POP 04H
  68. RETI
  69. //中断初始化函数
  70. ISR_INIT:
  71. SETB EA
  72. CLR IT0 ;0——低电平触发 1——下降沿触发
  73. SETB EX0
  74. RET
  75. //延时函数
  76. Delay100MS:
  77. MOV R7,DelayTimes_100MS
  78. Delay100MS_1:
  79. MOV R6,#10
  80. Delay100MS_2:
  81. MOV R5,#150
  82. Delay100MS_3:
  83. MOV R4,#200
  84. Delay100MS_4:
  85. DJNZ R4, Delay100MS_4
  86. DJNZ R5, Delay100MS_3
  87. DJNZ R6, Delay100MS_2
  88. DJNZ R7, Delay100MS_1
  89. RET ;子程序返回
  90. END

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/554399
推荐阅读
相关标签
  

闽ICP备14008679号