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

学《STC USB型 真1T 8051 单片机原理及应用-STC8H8K64U》 视频学习打卡 学习笔记

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-28 20:20:32

4

主题

21

回帖

675

积分

高级会员

积分
675
发表于 2024-7-4 11:57:20 | 显示全部楼层
第十一集 单片机C语言程序设计导入

截图202407041028339011.jpg
截图202407041028501053.jpg
截图202407041029158377.jpg
截图202407041033254052.jpg
截图202407041037157354.jpg
截图202407041041251031.jpg
截图202407041043338384.jpg
截图202407041046159877.jpg
截图202407041143218645.jpg
截图202407041146381682.jpg
截图202407041147441290.jpg
截图202407041148554869.jpg
截图202407041150301658.jpg
截图202407041151273324.jpg




















































截图202407041037192814.jpg
截图202407041037208737.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-28 20:20:32

4

主题

21

回帖

675

积分

高级会员

积分
675
发表于 2024-7-6 13:18:04 | 显示全部楼层
第十二集 单片机C语言程序设计导入二
课程主要讲了如何使用EEPROM
截图202407061310233742.jpg
截图202407061255315093.jpg
截图202407061314343245.jpg


截图202407061313594392.jpg
截图202407061302053091.jpg

截图202407061302255499.jpg






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-28 20:20:32

4

主题

21

回帖

675

积分

高级会员

积分
675
发表于 2024-7-6 14:16:59 | 显示全部楼层
第十三集 中断原理及工作机制一

当中断被出发时,当前进程被冻结,保护现场,跳出中断后恢复现场
截图202407061351302302.jpg

截图202407061353358843.jpg

截图202407061356594205.jpg

截图202407061408202977.jpg

截图202407061408333684.jpg

截图202407061408478668.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-28 20:20:32

4

主题

21

回帖

675

积分

高级会员

积分
675
发表于 2024-7-6 21:12:02 | 显示全部楼层
第十四集 中断原理及工作机制二

截图202407062053103657.jpg
截图202407062054119850.jpg

截图202407062054262580.jpg

截图202407062054443042.jpg

截图202407062056022895.jpg

截图202407062057011056.jpg

截图202407062058408768.jpg

截图202407062100501961.jpg

截图202407062106286002.jpg



中断服务


中断服务程序从入口地址开始执行,直到执行返回指令RETI为止。RETI指令表示中断服务程序的结束,CPU执行该指令,一方面清除中断响应时所置位的优先级有效触发器,一方面由栈顶弹出断点地址送程序计数器PC,从而返回主程序。中断服务程序由四个部分组成,即保护现场、中断服务恢复现场以及中断返回。
由于在主程序中一般都会用到累加器A和程序状态字寄存器PSW,所以在现场保护时一般都需要保护A和PSW,其他寄存器根据使用情况决定是否需要保护。在编写中断服务程序时应注意以下两点:
1)单片机响应中断后,不会自动关闭中断系统。如果用户程序不希望出现中断嵌套,则必须在中断服务程序的开始处关闭中断,从而禁止更高优先级的中断请求中断当前的服务程序。
2)为了保证保护现场和恢复现场能够连续进行,在保护现场和恢复现场之前应先关中断,当现场保护或现场恢复结束后,再根据实际需要决定是否需要开中断。
中断应用开发举例

  1. #include "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
  2. #define MAIN_Fosc       24000000L   //定义主时钟
  3. typedef     unsigned char   u8;
  4. typedef     unsigned int    u16;
  5. typedef     unsigned long   u32;
  6. #define EX2 0x10
  7. #define EX3 0x20
  8. #define EX4 0x40
  9. #define DIS_DOT     0x20
  10. #define DIS_BLACK   0x10
  11. #define DIS_        0x11
  12. /****************************** 用户定义宏 ***********************************/
  13. #define     Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 中断频率, 1000次/秒
  14. /*****************************************************************************/
  15. /*************  本地常量声明    **************/
  16. u8 code t_display[]={                       //标准字库
  17. //   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  18.     0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  19. //black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
  20.     0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
  21.     0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
  22. u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //位码
  23. /*************  IO口定义    **************/
  24. /*************  本地变量声明    **************/
  25. u8  LED8[8];        //显示缓冲
  26. u8  display_index;  //显示位索引
  27. u8  INT0_cnt, INT1_cnt; //测试用的计数变量
  28. u8  INT2_cnt, INT3_cnt, INT4_cnt; //测试用的计数变量
  29. void    delay_ms(u8 ms);
  30. void    DisplayScan(void);
  31. /********************** 主函数 ************************/
  32. void main(void)
  33. {
  34.     u8  i;
  35.    
  36.     P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能
  37.     P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
  38.     P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
  39.     P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
  40.     P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
  41.     P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
  42.     P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
  43.     P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
  44.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  45.     display_index = 0;
  46.     for(i=0; i<8; i++)  LED8[i] = DIS_BLACK;    //全部消隐
  47.    
  48.     INT0_cnt = 0;
  49.     INT1_cnt = 0;
  50.     IE1  = 0;   //外中断1标志位
  51.     IE0  = 0;   //外中断0标志位
  52.     EX1 = 1;    //INT1 Enable
  53.     EX0 = 1;    //INT0 Enable
  54.     IT0 = 1;        //INT0 下降沿中断      
  55. //  IT0 = 0;        //INT0 上升,下降沿中断  
  56.     IT1 = 1;        //INT1 下降沿中断      
  57. //  IT1 = 0;        //INT1 上升,下降沿中断  
  58.     //INT2, INT3, INT4 实验板上没有引出测试按键,供需要时参考使用
  59. //    INTCLKO = EX2;  //使能 INT2 下降沿中断
  60. //    INTCLKO |= EX3; //使能 INT3 下降沿中断
  61. //    INTCLKO |= EX4; //使能 INT4 下降沿中断
  62.     EA = 1;     //允许总中断
  63.     while(1)
  64.     {
  65.         delay_ms(1);    //延时1ms
  66.         DisplayScan();
  67.     }
  68. }
  69. /**********************************************/
  70. //========================================================================
  71. // 函数: void delay_ms(u8 ms)
  72. // 描述: 延时函数。
  73. // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
  74. // 返回: none.
  75. // 版本: VER1.0
  76. // 日期: 2021-3-9
  77. // 备注:
  78. //========================================================================
  79. void delay_ms(u8 ms)
  80. {
  81.      u16 i;
  82.      do{
  83.           i = MAIN_Fosc / 10000;
  84.           while(--i);   //10T per loop
  85.      }while(--ms);
  86. }
  87. /********************* INT0中断函数 *************************/
  88. void INT0_int (void) interrupt 0      //进中断时已经清除标志
  89. {
  90.     INT0_cnt++; //中断+1
  91. }
  92. /********************* INT1中断函数 *************************/
  93. void INT1_int (void) interrupt 2      //进中断时已经清除标志
  94. {
  95.     INT1_cnt++; //中断+1
  96. }
  97. /********************* INT2中断函数 *************************/
  98. void INT2_int (void) interrupt 10     //进中断时已经清除标志
  99. {
  100.     INT2_cnt++; //中断+1
  101. }
  102. /********************* INT3中断函数 *************************/
  103. void INT3_int (void) interrupt 11     //进中断时已经清除标志
  104. {
  105.     INT3_cnt++; //中断+1
  106. }
  107. /********************* INT4中断函数 *************************/
  108. void INT4_int (void) interrupt 16     //进中断时已经清除标志
  109. {
  110.     INT4_cnt++; //中断+1
  111. }
  112. /********************** 显示扫描函数 ************************/
  113. void DisplayScan(void)
  114. {   
  115.     P7 = ~T_COM[7-display_index];
  116.     P6 = ~t_display[LED8[display_index]];
  117.     if(++display_index >= 8)
  118.     {
  119.         display_index = 0;  //8位结束回0
  120.         LED8[0] = INT0_cnt / 100;
  121.         LED8[1] = (INT0_cnt % 100)/10;
  122.         LED8[2] = INT0_cnt % 10;
  123.         LED8[3] = DIS_BLACK;
  124.         LED8[4] = DIS_BLACK;
  125.         LED8[5] = INT1_cnt / 100;
  126.         LED8[6] = (INT1_cnt % 100)/10;
  127.         LED8[7] = INT1_cnt % 10;
  128.     }
  129. }
复制代码












截图202407062109132236.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-28 20:20:32

4

主题

21

回帖

675

积分

高级会员

积分
675
发表于 2024-7-6 21:55:02 | 显示全部楼层
第十五集 定时器原理及STC拓展

定时/计数器的应用在自动控制系统或者自动检测系统中,经常要用到定时器或者计数器,用于定时完成相关的任务,或者对外部事件进行计数,这可以通过单片机集成的定时/计数器实现。
截图202407062142171469.jpg

截图202407062142562976.jpg

截图202407062144374842.jpg



TH0 TL0 TH1 TL1
T2H T2L T3H T3L T4H T3L
截图202407062146389485.jpg
建议使用模式0 16位自动重装载模式
截图202407062149232167.jpg

截图202407062150301004.jpg

截图202407062151195076.jpg

截图202407062152291245.jpg

截图202407062153531783.jpg

截图202407062154095547.jpg

截图202407062154345879.jpg



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 03:36 , Processed in 0.114677 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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