找回密码
 立即注册
楼主: vb2002

重新再记录一下自己的学习历程吧.

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 23:05:34 | 显示全部楼层
INT2外部中断
INT2,3,4 只支持下降沿
  
截图202407112300005315.jpg

截图202407112302059088.jpg


截图202407112302284342.jpg

截图202407112302478861.jpg

记得还有中断优先级可以配置,
截图202407112303149945.jpg

截图202407112303519207.jpg

在stc8g1k08A里面这样写识别不出来
要写INTCLKO = 0x10;
也不可以像EX1那样直接 EX1=1;

截图202407112259325382.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-11 23:07:18 | 显示全部楼层
可以让程序在中断里面执行,这样的好处就是可以不占用主循环.
  1. #include "stc8g.h"
  2. #include "intrins.h"
  3. #define MAIN_Fosc 11059200UL
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;
  6. void delayms(u16 ms);
  7. void INT2_Isr() interrupt 10
  8. {
  9. while(1)
  10. {
  11.         P33=0;delayms(500);
  12.         P33=1;delayms(500);
  13. }
  14. }
  15. int main ()
  16. {
  17.        
  18.     P0M0 = 0x00; P0M1 = 0x00;
  19.     P1M0 = 0x00; P1M1 = 0x00;
  20.     P2M0 = 0x00; P2M1 = 0x00;
  21.     P3M0 = 0x00; P3M1 = 0x00;
  22.     P4M0 = 0x00; P4M1 = 0x00;
  23.     P5M0 = 0x00; P5M1 = 0x00;
  24.     P6M0 = 0x00; P6M1 = 0x00;
  25.     P7M0 = 0x00; P7M1 = 0x00;
  26.        
  27.         INTCLKO=0x10;
  28.         AUXINTIF=0x10;
  29.         IE2=0x04;
  30.         EA=1;
  31.         while(1);
  32. }
  33. void delayms(u16 ms)
  34.         {
  35.         u16 i;
  36.         do{
  37.                 i = MAIN_Fosc /10000;
  38.                 while(--i);
  39.         }while(--ms);
  40.         }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-15 12:12:14 | 显示全部楼层
一直以为keil里面的大括号可以随便敲
现在搞懂了.把{}放整齐点,可以方便找到相应的程序位置.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-15 14:11:26 | 显示全部楼层
C语言基本的语句,必须学明白,不然单片机不好学

截图202407151410507950.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-15 14:12:20 | 显示全部楼层
C语言运算表达.一定要学明白.

截图202407151411566066.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:529
  • 最近打卡:2025-05-09 00:14:59

10

主题

1163

回帖

5207

积分

论坛元老

积分
5207
发表于 2024-7-15 17:00:38 | 显示全部楼层
vb2*** 发表于 2024-7-11 23:07
可以让程序在中断里面执行,这样的好处就是可以不占用主循环.

我可以很负责任的告诉你,你掉坑里了

   初学者易犯的错:
中断处理程序执行时间过长!
在此期间其它比此更低级是中断都将无法响应,被执行!

   为什么尽量在单片机中断函数中不要使用延时?
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。

所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。


点评

对的  发表于 2024-7-15 17:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1561

回帖

2022

积分

金牌会员

积分
2022
发表于 2024-7-15 18:58:35 | 显示全部楼层
angm*** 发表于 2024-7-15 17:00
我可以很负责任的告诉你,你掉坑里了

   初学者易犯的错:

芭比Q了.
真掉坑里面了.
我记住您的说的重点.重点,标志位.我见很多大神程序里面都强调标志位.

{中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。}
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 03:42 , Processed in 0.184403 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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