找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3619|回复: 1
收起左侧

STC15W204S单片机(8脚)外部中断0和中断1实验程序

[复制链接]
ID:475031 发表于 2021-8-6 17:25 | 显示全部楼层 |阅读模式
STC15W204S单片机(8脚)外部中断0和中断1实验:
STC15W204S单片机8脚.jpg

54564.gif
单片机源程序如下:
  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.png

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:475031 发表于 2021-8-6 17:34 | 显示全部楼层
中断,以前一直没有明白是怎么回事。现在懂了。简单的来说,单片机首先运行main()里面的主程序。
收到中断后。主程序就会暂停当前状态,程序就会跑到中断里去运行,运行完了又返回main()主程序继续运行。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表