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

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:181
  • 最近打卡:2025-05-17 21:14:35

4

主题

21

回帖

691

积分

高级会员

积分
691
发表于 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
  • 打卡总天数:181
  • 最近打卡:2025-05-17 21:14:35

4

主题

21

回帖

691

积分

高级会员

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


截图202407061313594392.jpg
截图202407061302053091.jpg

截图202407061302255499.jpg






回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:181
  • 最近打卡:2025-05-17 21:14:35

4

主题

21

回帖

691

积分

高级会员

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

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

截图202407061353358843.jpg

截图202407061356594205.jpg

截图202407061408202977.jpg

截图202407061408333684.jpg

截图202407061408478668.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:181
  • 最近打卡:2025-05-17 21:14:35

4

主题

21

回帖

691

积分

高级会员

积分
691
发表于 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
  • 打卡总天数:181
  • 最近打卡:2025-05-17 21:14:35

4

主题

21

回帖

691

积分

高级会员

积分
691
发表于 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-8-27 20:51 , Processed in 0.114225 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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