找回密码
 立即注册
查看: 18|回复: 4

8H4K32TL, 普通I/O-P2.5 外部中断,要怎配置样才能进入中断函数

[复制链接]
已绑定手机

1

主题

0

回帖

7

积分

新手上路

积分
7
发表于 昨天 23:56 | 显示全部楼层 |阅读模式
请教厂家:
用Datasheet上面的例程也进步了中断函数。
现在用P2.5作为外部中断,有5.1K上拉电阻,接地如通过按键或者镊子短接时产生中断信号,不知道怎么样才能进入中断函数。
测试代码如下:代码能编译通过,就是进步了中断函数,按照手册上的例子(不能复制,需要一个字符一个字符的键盘敲入。差评)

#include "STC8H.h"
#include "intrins.h"

sbit LED0 = P4^0;    // 定义LED连接的引脚
sbit LED2 = P4^2;    // 定义LED连接的引脚
//#define PINIPL        (*(unsigned char volatile xdata *)0xfD60)
// #define PINIPH        (*(unsigned char volatile xdata *)0xfD61)



sbit EXTI_PIN = P2^5;  // 定义外部中断引脚P2.5

void INT_Init() {
    P2M1 &= ~0x20;  // 设置P2.5为准双向模式(00)
    P2M0 &= ~0x20;

    IT1 = 1;        // 设置INT1为下降沿触发(TCON.2)
    EX1 = 1;        // 允许INT1中断(IE.2)
    EA = 1;         // 开启总中断

    // 设置INT1为优先级1(IPH.1=0, IP.1=1)
  ///  PX1 = 1;
   // PX1H = 0;
}

void main()
{
    INT_Init();
    while(1);       // 主循环保持空转
}

// INT1中断服务函数(中断号2)   试过Datasheet上的借用13号中断向量的方式也是不行
void INT1_ISR() interrupt 2 {
    if(!EXTI_PIN) { // 确认引脚状态
        LED0 = ~LED0; // 示例:翻转P5.5引脚状态
    }
    IE1 = 0;        // 清除中断标志(TCON.3)
}

回复

使用道具 举报 送花

已绑定手机

1

主题

0

回帖

7

积分

新手上路

积分
7
发表于 昨天 23:59 | 显示全部楼层
期待厂家在数据手册上能直接给可以用的Demo,这个芯片资源太多,学习使用需要耗费大量时间和精力。谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:490
  • 最近打卡:2025-07-08 07:54:58
已绑定手机

81

主题

5315

回帖

9551

积分

超级版主

DebugLab

积分
9551
发表于 9 小时前 | 显示全部楼层
INT1是P33
P25没有外部中断,但有IO中断
新增功能寄存器位于XFR,初始化要打开EAXFR
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html

初始化先打开EAXFR:
代码:
P_SW2|=0x80;(8位、32位)
EAXFR=1;(32位)
因传统8051的SFR地址空间有限,新增的SFR位于xdata区域(XSFR),必须先打开EAXFR才能访问
XSFR和XDATA共用地址,只有访问62.5K以上的XDATA时才需要关闭EAXFR
现有型号,只要不是扩展了片外64K SRAM(外接并口SRAM芯片),初始化时果断先打开EAXFR,并且不需要再关闭,不要犹豫!

IO中断程序(值按需要修改,不需要的可以注释掉或删除):
  1. //PxINT
  2.         
  3. //        P0INTE=0x00;
  4. //        P1INTE=0x00;
  5. //        P2INTE=0x00;
  6. //        P3INTE=0x00;
  7. //        P4INTE=0x00;
  8. //        P5INTE=0x00;
  9. //        P6INTE=0x00;
  10. //        P7INTE=0x00;
  11. //        P0IM0=0x00;
  12. //        P0IM1=0x00;
  13. //        P1IM0=0x00;
  14. //        P1IM1=0x00;
  15. //        P2IM0=0x00;
  16. //        P2IM1=0x00;
  17. //        P3IM0=0x00;
  18. //        P3IM1=0x00;
  19. //        P4IM0=0x00;
  20. //        P4IM1=0x00;
  21. //        P5IM0=0x00;
  22. //        P5IM1=0x00;
  23. //        P6IM0=0x00;
  24. //        P6IM1=0x00;
  25. //        P7IM0=0x00;
  26. //        P7IM1=0x00;
  27. //        P0WKUE=0x00;
  28. //        P1WKUE=0x00;
  29. //        P2WKUE=0x00;
  30. //        P3WKUE=0x00;
  31. //        P4WKUE=0x00;
  32. //        P5WKUE=0x00;
  33. //        P6WKUE=0x00;
  34. //        P7WKUE=0x00;
复制代码
  1. //void P0INT_ISR(void) interrupt P0INT_VECTOR
  2. //{
  3. //        if(P0INTF&0x01)
  4. //        {
  5. //                P0INTF&=~0x01;
  6. //        }
  7. //        if(P0INTF&0x02)
  8. //        {
  9. //                P0INTF&=~0x02;
  10. //        }
  11. //        if(P0INTF&0x04)
  12. //        {
  13. //                P0INTF&=~0x04;
  14. //        }
  15. //        if(P0INTF&0x08)
  16. //        {
  17. //                P0INTF&=~0x08;
  18. //        }
  19. //        if(P0INTF&0x10)
  20. //        {
  21. //                P0INTF&=~0x10;
  22. //        }
  23. //        if(P0INTF&0x20)
  24. //        {
  25. //                P0INTF&=~0x20;
  26. //        }
  27. //        if(P0INTF&0x40)
  28. //        {
  29. //                P0INTF&=~0x40;
  30. //        }
  31. //        if(P0INTF&0x80)
  32. //        {
  33. //                P0INTF&=~0x80;
  34. //        }
  35. //}
  36. //void P1INT_ISR(void) interrupt P1INT_VECTOR
  37. //{
  38. //        if(P1INTF&0x01)
  39. //        {
  40. //                P1INTF&=~0x01;
  41. //        }
  42. //        if(P1INTF&0x02)
  43. //        {
  44. //                P1INTF&=~0x02;
  45. //        }
  46. //        if(P1INTF&0x04)
  47. //        {
  48. //                P1INTF&=~0x04;
  49. //        }
  50. //        if(P1INTF&0x08)
  51. //        {
  52. //                P1INTF&=~0x08;
  53. //        }
  54. //        if(P1INTF&0x10)
  55. //        {
  56. //                P1INTF&=~0x10;
  57. //        }
  58. //        if(P1INTF&0x20)
  59. //        {
  60. //                P1INTF&=~0x20;
  61. //        }
  62. //        if(P1INTF&0x40)
  63. //        {
  64. //                P1INTF&=~0x40;
  65. //        }
  66. //        if(P1INTF&0x80)
  67. //        {
  68. //                P1INTF&=~0x80;
  69. //        }
  70. //}
  71. //void P2INT_ISR(void) interrupt P2INT_VECTOR
  72. //{
  73. //        if(P2INTF&0x01)
  74. //        {
  75. //                P2INTF&=~0x01;
  76. //        }
  77. //        if(P2INTF&0x02)
  78. //        {
  79. //                P2INTF&=~0x02;
  80. //        }
  81. //        if(P2INTF&0x04)
  82. //        {
  83. //                P2INTF&=~0x04;
  84. //        }
  85. //        if(P2INTF&0x08)
  86. //        {
  87. //                P2INTF&=~0x08;
  88. //        }
  89. //        if(P2INTF&0x10)
  90. //        {
  91. //                P2INTF&=~0x10;
  92. //        }
  93. //        if(P2INTF&0x20)
  94. //        {
  95. //                P2INTF&=~0x20;
  96. //        }
  97. //        if(P2INTF&0x40)
  98. //        {
  99. //                P2INTF&=~0x40;
  100. //        }
  101. //        if(P2INTF&0x80)
  102. //        {
  103. //                P2INTF&=~0x80;
  104. //        }
  105. //}
  106. //void P3INT_ISR(void) interrupt P3INT_VECTOR
  107. //{
  108. //        if(P3INTF&0x01)
  109. //        {
  110. //                P3INTF&=~0x01;
  111. //        }
  112. //        if(P3INTF&0x02)
  113. //        {
  114. //                P3INTF&=~0x02;
  115. //        }
  116. //        if(P3INTF&0x04)
  117. //        {
  118. //                P3INTF&=~0x04;
  119. //        }
  120. //        if(P3INTF&0x08)
  121. //        {
  122. //                P3INTF&=~0x08;
  123. //        }
  124. //        if(P3INTF&0x10)
  125. //        {
  126. //                P3INTF&=~0x10;
  127. //        }
  128. //        if(P3INTF&0x20)
  129. //        {
  130. //                P3INTF&=~0x20;
  131. //        }
  132. //        if(P3INTF&0x40)
  133. //        {
  134. //                P3INTF&=~0x40;
  135. //        }
  136. //        if(P3INTF&0x80)
  137. //        {
  138. //                P3INTF&=~0x80;
  139. //        }
  140. //}
  141. //void P4INT_ISR(void) interrupt P4INT_VECTOR
  142. //{
  143. //        if(P4INTF&0x01)
  144. //        {
  145. //                P4INTF&=~0x01;
  146. //        }
  147. //        if(P4INTF&0x02)
  148. //        {
  149. //                P4INTF&=~0x02;
  150. //        }
  151. //        if(P4INTF&0x04)
  152. //        {
  153. //                P4INTF&=~0x04;
  154. //        }
  155. //        if(P4INTF&0x08)
  156. //        {
  157. //                P4INTF&=~0x08;
  158. //        }
  159. //        if(P4INTF&0x10)
  160. //        {
  161. //                P4INTF&=~0x10;
  162. //        }
  163. //        if(P4INTF&0x20)
  164. //        {
  165. //                P4INTF&=~0x20;
  166. //        }
  167. //        if(P4INTF&0x40)
  168. //        {
  169. //                P4INTF&=~0x40;
  170. //        }
  171. //        if(P4INTF&0x80)
  172. //        {
  173. //                P4INTF&=~0x80;
  174. //        }
  175. //}
  176. //void P5INT_ISR(void) interrupt P5INT_VECTOR
  177. //{
  178. //        if(P5INTF&0x01)
  179. //        {
  180. //                P5INTF&=~0x01;
  181. //        }
  182. //        if(P5INTF&0x02)
  183. //        {
  184. //                P5INTF&=~0x02;
  185. //        }
  186. //        if(P5INTF&0x04)
  187. //        {
  188. //                P5INTF&=~0x04;
  189. //        }
  190. //        if(P5INTF&0x08)
  191. //        {
  192. //                P5INTF&=~0x08;
  193. //        }
  194. //        if(P5INTF&0x10)
  195. //        {
  196. //                P5INTF&=~0x10;
  197. //        }
  198. //        if(P5INTF&0x20)
  199. //        {
  200. //                P5INTF&=~0x20;
  201. //        }
  202. //        if(P5INTF&0x40)
  203. //        {
  204. //                P5INTF&=~0x40;
  205. //        }
  206. //        if(P5INTF&0x80)
  207. //        {
  208. //                P5INTF&=~0x80;
  209. //        }
  210. //}
  211. //void P6INT_ISR(void) interrupt P6INT_VECTOR
  212. //{
  213. //        if(P6INTF&0x01)
  214. //        {
  215. //                P6INTF&=~0x01;
  216. //        }
  217. //        if(P6INTF&0x02)
  218. //        {
  219. //                P6INTF&=~0x02;
  220. //        }
  221. //        if(P6INTF&0x04)
  222. //        {
  223. //                P6INTF&=~0x04;
  224. //        }
  225. //        if(P6INTF&0x08)
  226. //        {
  227. //                P6INTF&=~0x08;
  228. //        }
  229. //        if(P6INTF&0x10)
  230. //        {
  231. //                P6INTF&=~0x10;
  232. //        }
  233. //        if(P6INTF&0x20)
  234. //        {
  235. //                P6INTF&=~0x20;
  236. //        }
  237. //        if(P6INTF&0x40)
  238. //        {
  239. //                P6INTF&=~0x40;
  240. //        }
  241. //        if(P6INTF&0x80)
  242. //        {
  243. //                P6INTF&=~0x80;
  244. //        }
  245. //}
  246. //void P7INT_ISR(void) interrupt P7INT_VECTOR
  247. //{
  248. //        if(P7INTF&0x01)
  249. //        {
  250. //                P7INTF&=~0x01;
  251. //        }
  252. //        if(P7INTF&0x02)
  253. //        {
  254. //                P7INTF&=~0x02;
  255. //        }
  256. //        if(P7INTF&0x04)
  257. //        {
  258. //                P7INTF&=~0x04;
  259. //        }
  260. //        if(P7INTF&0x08)
  261. //        {
  262. //                P7INTF&=~0x08;
  263. //        }
  264. //        if(P7INTF&0x10)
  265. //        {
  266. //                P7INTF&=~0x10;
  267. //        }
  268. //        if(P7INTF&0x20)
  269. //        {
  270. //                P7INTF&=~0x20;
  271. //        }
  272. //        if(P7INTF&0x40)
  273. //        {
  274. //                P7INTF&=~0x40;
  275. //        }
  276. //        if(P7INTF&0x80)
  277. //        {
  278. //                P7INTF&=~0x80;
  279. //        }
  280. //}
复制代码

截图202507080937267855.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-07-08 07:45:36

751

主题

1万

回帖

1万

积分

管理员

积分
17649
发表于 8 小时前 | 显示全部楼层
现在建议 应用用强大的 AiCube-ISP-V6.95Y 来图形化配置,程序自动生成
截图202507081041266315.jpg
深圳国芯人工智能有限公司-工具软件
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-07-08 14:57:50
已绑定手机

2

主题

81

回帖

1038

积分

金牌会员

积分
1038
发表于 3 小时前 | 显示全部楼层
学习了:
现有型号,只要不是扩展了片外64K SRAM(外接并口SRAM芯片),
初始化时果断先打开EAXFR,并且不需要再关闭,不要犹豫
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-8 18:41 , Processed in 0.114885 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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