微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 中断进不去!帮忙解决下呗。

中断进不去!帮忙解决下呗。

时间:10-02 整理:3721RD 点击:

  1. #include "STC12C5A60S2.H"
  2. #include "yxzs.h"
  3. void Delay1ms(unsigned int a);
  4. void gbled();
  5. void main(void)
  6. {
  7. TIMER0_Init();   // 初始化定时器0
  8.         IT1 = 1;
  9.         EX1 = 1;
  10.         EA = 1;
  11.     while(1)
  12.     {
  13.     }
  14. }
  15. void exint1() interrupt 2 using 1
  16. {
  17.         unsigned int a = 0;
  18.         while(a < 100)
  19.         {
  20.                 P03 = ~P03;
  21.                 Delay1ms(50);
  22.                 a++;
  23.         }
  24.         gbled();
  25. }
  26. void gbled()
  27. {
  28.         P03 = 1;
  29. }
  30. void Delay1ms(unsigned int a)                //@22.1184MHz
  31. {
  32.         while(--a != 0)
  33.         {
  34.                 unsigned char i,j;
  35.         
  36.                 i = 22;
  37.                 j = 128;
  38.                 do
  39.                 {
  40.                         while (--j);
  41.                 } while (--i);
  42.         }
  43. }         






复制代码

以上是主函数!
/****************************************************************************/
这里开始是子函数

  1. #ifndef __YXZS_H__
  2. #define __YXZS_H__
  3. #define Fpclk       22118400
  4. #define TIMER0_RUN_HZ       1000          //每秒多少次进入定时器中断
  5. #define T0RELOAD      (65536 - (Fpclk/TIMER0_RUN_HZ))
  6. sbit TEST_LED = P0^0;
  7. void Delay_Yxzs1ms(unsigned int a);
  8. void ISR_TIMER0(void) interrupt 1  
  9. {
  10.     // 重新装载定时器值  
  11.         TH0 = T0RELOAD / 256;
  12.         TL0 = T0RELOAD % 256;
  13.     // 以下添加用户程序
  14.     TEST_LED = ~TEST_LED;
  15.         Delay_Yxzs1ms(150);
  16. }  
  17. void TIMER0_Init(void)
  18. {
  19.     TMOD &= 0xf0;
  20.     TMOD |= 0x01;       // 16位计数器

  21.         TH0 = T0RELOAD / 256;
  22.         TL0 = T0RELOAD % 256;
  23.         AUXR |= 0x80;       // 计数器0时钟为Fosc,即1T
  24.     PT0 = 1;            // 定时器0优先级控制位, 1 为高优先级 0 为低优先级
  25.         ET0 = 1;            // 定时器0中断使能
  26.         TR0 = 1;            // 启动定时器
  27.     EA  = 1;            // 开总中断
  28. }                           
  29. void Delay_Yxzs1ms(unsigned int a)                //@22.1184MHz
  30. {
  31.         while(--a != 0)
  32.         {
  33.                 unsigned char i, j;
  34.         
  35.                 i = 22;
  36.                 j = 128;
  37.                 do
  38.                 {
  39.                         while (--j);
  40.                 } while (--i);
  41.         }
  42. }
  43. #endif

复制代码

程序能执行, 但外部中断进不去。

pt1?

还有好多看不懂啊,肯定还学其他的单片机

PT1不用管他,设置中断优先级的,现在是P0^0LED能正常闪烁,但外部中断1 给信号后,不处理中断服务程序。

看程序配置是下降沿中断,你是怎么给信号的?在哪个IO口给的?

P3^3,口接了一个轻触开关,用轻触开关触发。

中断用了2个using 1,造成冲突!

可能是未申明

是不是初始化有问题,单片机不熟悉

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top