C51外部中断

来源:互联网 发布:linux双网卡同时激活 编辑:程序博客网 时间:2024/05/20 19:32
  1. /*----------------------------------------------- 
  2.   名称:外部中断0电平触发 
  3.   论坛:www.doflye.net 
  4.   编写:shifang 
  5.   日期:2009.5 
  6.   修改:无 
  7.   内容:通过中断接口P3.2连接的独立按键测试,按一次P1口的LED灯反向, 
  8.         这里使用电平触发,所以一直按键不松开和一次按键效果不相同,按下会看到灯全部亮 
  9.         说明中断一直在作用,用示波器看则是高频方波 
  10. ------------------------------------------------*/  
  11. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  
  12. /*------------------------------------------------ 
  13.                     主程序 
  14. ------------------------------------------------*/  
  15. main()  
  16. {  
  17.   P1=0x55;       //P1口初始值  
  18.   EA=1;          //全局中断开  
  19.   EX0=1;         //外部中断0开  
  20.   IT0=0;         //电平触发  
  21.   while(1)  
  22.   {  
  23.                  //在此添加其他程序  
  24.   }  
  25. }  
  26. /*------------------------------------------------ 
  27.                  外部中断程序 
  28. ------------------------------------------------*/  
  29. void ISR_Key(void) interrupt 0 using 1  
  30. {  
  31.  P1=~P1;     //进入中断程序执行程序,  
  32. //此时可以通过 EA=0指令暂时关掉中断      
  33. }  
  34. <pre code_snippet_id="2145062" snippet_file_name="blog_20170122_1_1379483" name="code" class="cpp">/*----------------------------------------------- 
  35.   名称:外部中断1电平触发 
  36.   论坛:www.doflye.net 
  37.   编写:shifang 
  38.   日期:2009.5 
  39.   修改:无 
  40.   内容:通过中断接口P3.3连接的独立按键测试,按一次P1.0口的LED灯反向, 
  41.         作用效果和中断0相同,启用按键去抖,所以适合实际按键 
  42. ------------------------------------------------*/  
  43. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  
  44.   
  45. sbit LED=P1^0; //定义LED端口  
  46.   
  47. void DelayUs2x(unsigned char t);//us级延时函数声明   
  48. void DelayMs(unsigned char t); //ms级延时  
  49. /*------------------------------------------------ 
  50.                     主程序 
  51. ------------------------------------------------*/  
  52. main()  
  53. {  
  54.   LED=0;         //LED灯点亮  
  55.   EA=1;          //全局中断开  
  56.   EX1=1;         //外部中断0开  
  57.   IT1=0;         //琁T1=0表示电平触发  
  58.   while(1)  
  59.   {  
  60.                  //在此添加其他程序  
  61.   }  
  62. }  
  63. /*------------------------------------------------ 
  64.                  外部中断程序 
  65. ------------------------------------------------*/  
  66. void ISR_INT1(void) interrupt 2   
  67. {  
  68.    
  69.  if(!INT1)  
  70.    {  
  71.    DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误  
  72.    if(!INT1)  
  73.    while(!INT1);//等待按键释放  
  74.      {  
  75.      LED=!LED;     
  76.      }  
  77.    }  
  78. }  
  79.   
  80. /*------------------------------------------------ 
  81.  uS延时函数,含有输入参数 unsigned char t,无返回值 
  82.  unsigned char 是定义无符号字符变量,其值的范围是 
  83.  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 
  84.  长度如下 T=tx2+5 uS  
  85. ------------------------------------------------*/  
  86. void DelayUs2x(unsigned char t)  
  87. {     
  88.  while(--t);  
  89. }  
  90. /*------------------------------------------------ 
  91.  mS延时函数,含有输入参数 unsigned char t,无返回值 
  92.  unsigned char 是定义无符号字符变量,其值的范围是 
  93.  0~255 这里使用晶振12M,精确延时请使用汇编 
  94. ------------------------------------------------*/  
  95. void DelayMs(unsigned char t)  
  96. {  
  97.        
  98.  while(t--)  
  99.  {  
  100.      //大致延时1mS  
  101.      DelayUs2x(245);  
  102.      DelayUs2x(245);  
  103.  }  
  104. }  
  105. </pre><br>  
  106. /*-----------------------------------------------<br> 
  107.   名称:外部中断0边沿触发<br> 
  108.   论坛:www.doflye.net<br> 
  109.   编写:shifang<br> 
  110.   日期:2009.5<br> 
  111.   修改:无<br> 
  112.   内容:通过中断接口P3.2连接的独立按键测试,按一次P1口的LED灯反向,<br> 
  113.         这里使用边沿触发,所以一直按键不松开和一次按键效果相同,区<br> 
  114.         别于电平触发<br> 
  115. ------------------------------------------------*/<br>  
  116. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义<br>  
  117. /*------------------------------------------------<br> 
  118.                     主程序<br> 
  119. ------------------------------------------------*/<br>  
  120. main()<br>  
  121. {<br>  
  122.   P1=0x55;       //P1口初始值<br>  
  123.   EA=1;          //全局中断开<br>  
  124.   EX0=1;         //外部中断0开<br>  
  125.   IT0=1;         //边沿触发<br>  
  126.   while(1)<br>  
  127.   {<br>  
  128.                  //在此添加其他程序<br>  
  129.   }<br>  
  130. }<br>  
  131. /*------------------------------------------------<br> 
  132.                  外部中断程序<br> 
  133. ------------------------------------------------*/<br>  
  134. void ISR_Key(void) interrupt 0 using 1<br>  
  135. {<br>  
  136.  P1=~P1;         //s3按下触发一次,P1取反一次<br>  
  137. }<br>  
  138. <br>  
  139. /*-----------------------------------------------<br> 
  140.   名称:外部中断1电下降沿平触发<br> 
  141.   论坛:www.doflye.net<br> 
  142.   编写:shifang<br> 
  143.   日期:2009.5<br> 
  144.   修改:无<br> 
  145.   内容:通过中断接口P3.3连接的独立按键测试,按一次P1.0口的LED灯反向,<br> 
  146.         作用效果和中断0相同<br> 
  147. ------------------------------------------------*/<br>  
  148. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义<br>  
  149. <br>  
  150. sbit LED=P1^0; //定义LED端口<br>  
  151. <br>  
  152. void DelayUs2x(unsigned char t);//us级延时函数声明 <br>  
  153. void DelayMs(unsigned char t); //ms级延时<br>  
  154. /*------------------------------------------------<br> 
  155.                     主程序<br> 
  156. ------------------------------------------------*/<br>  
  157. main()<br>  
  158. {<br>  
  159.   LED=0;         //LED灯点亮<br>  
  160.   EA=1;          //全局中断开<br>  
  161.   EX1=1;         //外部中断1开<br>  
  162.   IT1=1;         //IT1=1表示边沿触发<br>  
  163.   while(1)<br>  
  164.   {<br>  
  165.                  //在此添加其他程序<br>  
  166.   }<br>  
  167. }<br>  
  168. /*------------------------------------------------<br> 
  169.                  外部中断程序<br> 
  170. ------------------------------------------------*/<br>  
  171. void ISR_INT1(void) interrupt 2 <br>  
  172. {<br>  
  173.  <br>  
  174.  if(!INT1)<br>  
  175.    {<br>  
  176.    DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误<br>  
  177.    if(!INT1)<br>  
  178.    //while(!INT1);//等待按键释放<br>  
  179.      {<br>  
  180.      LED=!LED;   <br>  
  181.      }<br>  
  182.    }<br>  
  183. }<br>  
  184. <br>  
  185. /*------------------------------------------------<br> 
  186.  uS延时函数,含有输入参数 unsigned char t,无返回值<br> 
  187.  unsigned char 是定义无符号字符变量,其值的范围是<br> 
  188.  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时<br> 
  189.  长度如下 T=tx2+5 uS <br> 
  190. ------------------------------------------------*/<br>  
  191. void DelayUs2x(unsigned char t)<br>  
  192. {   <br>  
  193.  while(--t);<br>  
  194. }<br>  
  195. /*------------------------------------------------<br> 
  196.  mS延时函数,含有输入参数 unsigned char t,无返回值<br> 
  197.  unsigned char 是定义无符号字符变量,其值的范围是<br> 
  198.  0~255 这里使用晶振12M,精确延时请使用汇编<br> 
  199. ------------------------------------------------*/<br>  
  200. void DelayMs(unsigned char t)<br>  
  201. {<br>  
  202.      <br>  
  203.  while(t--)<br>  
  204.  {<br>  
  205.      //大致延时1mS<br>  
  206.      DelayUs2x(245);<br>  
  207.      DelayUs2x(245);<br>  
  208.  }<br>  
  209. }<br>  
  210. <br>  
  211.    
  212. <pre></pre>  
  213. <br>  
  214.      
0 0
原创粉丝点击