标题: STC15W204S单片机(8脚)外部中断0和中断1实验程序 [打印本页]

作者: 鬼推磨    时间: 2021-8-6 17:25
标题: STC15W204S单片机(8脚)外部中断0和中断1实验程序
STC15W204S单片机(8脚)外部中断0和中断1实验:



单片机源程序如下:
  1. /**************************************************************************************
  2. *                              外部中断0和中断1实验                                                                                                  *
  3. 实现现象:下载程序后,led2灯闪烁
  4. 外部中断0起作用:
  5. 按下K1按键后led2灯停止闪烁。led1灯开始闪烁几次停止闪烁,led2灯恢复闪烁
  6. 外部中断1起作用:
  7. 按下K2按键后led2灯停止闪烁。led1灯开始闪烁几次停止闪烁,led2灯恢复闪烁        
  8. 注意:
  9. STC15W204S单片机(8脚):
  10. P3^2口为外部中断INT0口 interrupt 0        
  11. P3^3口为外部中断INT1口 interrupt 2        
  12. ***************************************************************************************/
  13. #include <STC15W204S.h>
  14. #include <intrins.h>
  15. #define uchar unsigned char
  16. #define uint unsigned int
  17. #include <intrins.h>
  18. sbit k1=P3^2;  //外部中断INT0定义按键K1
  19. sbit k2=P3^3;  //外部中断INT1定义按键K2
  20. sbit led1 = P5^4;
  21. sbit led2 = P5^5;
  22. /*******************************************************************************
  23. * 函 数 名         : delay
  24. * 函数功能                   : 延时函数,i=1时,大约延时10us
  25. *******************************************************************************/
  26. void delay_ms(uint n)//11.0592M的晶振 delay_ms(1000);//1000ms毫秒=1s秒
  27. {
  28. uint i,j;
  29. for(i=n;i>0;i--)
  30. {
  31. for(j=114;j>0;j--);
  32. }
  33. }

  34. /*******************************************************************************
  35. * 函 数 名         : Int1Init()
  36. * 函数功能                   : 设置外部中断1
  37. * 输    入         : 无
  38. * 输    出         : 无
  39. *******************************************************************************/
  40. void Int0Init()
  41. {
  42.         //设置INT0
  43.         
  44.         IT0=1;//跳变沿出发方式(下降沿)
  45.         EX0=1;//打开INT0的中断允许。
  46.   EX1=1;//打开INT1的中断允许。        
  47.         EA=1;//打开总中断        
  48. }

  49. /*******************************************************************************
  50. * 函 数 名       : main
  51. * 函数功能                 : 主函数
  52. * 输    入       : 无
  53. * 输    出             : 无
  54. *******************************************************************************/
  55. void main()
  56. {        
  57.         Int0Init();  //        设置外部中断0
  58.         while(1)
  59.         {
  60. delay_ms(1000);//1000ms毫秒=1s秒
  61. led2=0;
  62. delay_ms(1000);//1000ms毫秒=1s秒
  63. led2=1;
  64.         }
  65. }

  66. /*******************************************************************************
  67. * 函 数 名         : Int0()        interrupt 0
  68. * 函数功能                   : 外部中断0的中断函数
  69. * 输    入         : 无
  70. * 输    出         : 无
  71. *******************************************************************************/

  72. void Int0()        interrupt 0                //外部中断INT0的中断函数
  73. {
  74.         delay_ms(20);//1000ms毫秒=1s秒
  75.         if(k1==0)
  76.         {
  77.                 led1=~led1;
  78.                 delay_ms(1000);//1000ms毫秒=1s秒
  79.                 led1=~led1;
  80.                 delay_ms(1000);//1000ms毫秒=1s秒
  81.                                 led1=~led1;
  82.                 delay_ms(1000);//1000ms毫秒=1s秒
  83.                 led1=~led1;
  84.                 delay_ms(1000);//1000ms毫秒=1s秒
  85.                                 led1=~led1;
  86.                 delay_ms(1000);//1000ms毫秒=1s秒
  87.                 led1=~led1;
  88.                 delay_ms(1000);//1000ms毫秒=1s秒
  89.                                 led1=~led1;
  90.                 delay_ms(1000);//1000ms毫秒=1s秒
  91.                 led1=~led1;
  92.                 delay_ms(1000);//1000ms毫秒=1s秒
  93.                                 led1=~led1;
  94.                 delay_ms(1000);//1000ms毫秒=1s秒
  95.                 led1=~led1;
  96.                 delay_ms(1000);//1000ms毫秒=1s秒
  97.                                 led1=~led1;
  98.                 delay_ms(1000);//1000ms毫秒=1s秒
  99.                 led1=~led1;
  100.                 delay_ms(1000);//1000ms毫秒=1s秒
  101.         }
  102. }
  103. void Int1()        interrupt 2                //外部中断INT1的中断函数
  104. {
  105.         delay_ms(20);//1000ms毫秒=1s秒
  106.         if(k2==0)
  107.         {
  108.                 led1=~led1;
  109.                 delay_ms(1000);//1000ms毫秒=1s秒
  110.                 led1=~led1;
  111.                 delay_ms(1000);//1000ms毫秒=1s秒
  112.                                 led1=~led1;
  113.                 delay_ms(1000);//1000ms毫秒=1s秒
  114.                 led1=~led1;
  115.                 delay_ms(1000);//1000ms毫秒=1s秒
  116.                                 led1=~led1;
  117.                 delay_ms(1000);//1000ms毫秒=1s秒
  118.                 led1=~led1;
  119.                 delay_ms(1000);//1000ms毫秒=1s秒
  120.                                 led1=~led1;
  121.                 delay_ms(1000);//1000ms毫秒=1s秒
  122.                 led1=~led1;
  123.                 delay_ms(1000);//1000ms毫秒=1s秒
  124.                                 led1=~led1;
  125.                 delay_ms(1000);//1000ms毫秒=1s秒
  126.                 led1=~led1;
  127.                 delay_ms(1000);//1000ms毫秒=1s秒
  128.                                 led1=~led1;
  129.                 delay_ms(1000);//1000ms毫秒=1s秒
  130.                 led1=~led1;
  131.                 delay_ms(1000);//1000ms毫秒=1s秒
  132.         }
  133. }
复制代码


全部资料51hei下载地址:
STC15W204S单片机(8脚)外部中断0和中断1实验.rar (34.76 KB, 下载次数: 61)


作者: 鬼推磨    时间: 2021-8-6 17:34
中断,以前一直没有明白是怎么回事。现在懂了。简单的来说,单片机首先运行main()里面的主程序。
收到中断后。主程序就会暂停当前状态,程序就会跑到中断里去运行,运行完了又返回main()主程序继续运行。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1