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

跟着冲哥学习 STC32位8051单片机原理及C语言程序设计心德

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 15:40:43 | 显示全部楼层
比较器学习心得

通过学习和使用STC比较器,我深刻体会到其在嵌入式系统设计中的重要性。比较器不仅具有简单直观的工作原理,而且通过灵活的配置选项和强大的功能扩展能力,可以适应各种复杂的应用场景。同时,我也认识到在使用比较器时需要注意的一些细节问题,如版本差异、外部元件选型和中断处理等。这些经验和教训将对我未来的学习和工作产生积极的影响。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 15:44:02 | 显示全部楼层
FLASH模拟EEPROM

Flash通常以块(Block)或页(Page)为单位进行擦除和编程,而EEPROM可以单字节或较小的单元进行编程和擦除。
EEPROM在编程和擦除速度上通常比Flash快,特别是在小量数据更新的情况下。
Flash的擦写次数有限(通常为数千至数十万次),而EEPROM的耐用性通常更高。
由于Flash的高密度,它在成本上通常更具优势。

Flash模拟EEPROM的技术实现

通过软件算法和硬件支持,将Flash的大块擦除和编程操作转换为看似单字节或小块的操作。这通常涉及到一个或多个模拟EEPROM的“扇区”在Flash中的实现,每个扇区管理一定数量的数据,并通过软件跟踪每个数据位的状态。
为了延长Flash的寿命,需要实现磨损均衡算法,确保Flash的各个部分被均匀使用,避免某些区域过早达到擦写次数限制。
为了提高模拟EEPROM的性能,可以优化数据访问模式,减少不必要的擦除和编程操作,以及使用缓存技术来减少对Flash的直接访问。

学习Flash模拟EEPROM的过程中,深入理解Flash和EEPROM的技术原理是关键。这有助于我们更好地掌握模拟技术的实现方法和优化策略。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 16:18:51 | 显示全部楼层
软件模拟SPI

1. SPI的四个主要信号线(SCK时钟线、MOSI主出从入数据线、MISO主入从出数据线、CS片选线)的作用及其时序关系。
2. SPI的几种常见工作模式(如CPOL和CPHA的不同组合)以及数据传输方式(如MSB先传或LSB先传)。

编写软件模拟SPI的代码时,要关注以下几个状况:

时钟信号生成:根据SPI的时钟频率和相位/极性要求,通过软件控制GPIO引脚来模拟时钟信号的上升沿和下降沿。
数据发送与接收:在时钟信号的驱动下,通过GPIO引脚发送数据到MOSI线,并从MISO线读取数据。注意数据位的同步和时序对齐。
片选控制:在数据传输前通过CS引脚选择相应的从设备,并在数据传输完成后释放片选。
中断与轮询:根据应用场景选择合适的通信方式(中断或轮询),以提高系统效率或简化代码结构。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 16:42:26 | 显示全部楼层

1

本帖最后由 xnh 于 2024-8-8 16:47 编辑

1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 16:43:46 | 显示全部楼层

2

本帖最后由 xnh 于 2024-8-8 16:47 编辑

2
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 16:46:11 | 显示全部楼层
LED 点亮 按钮的使用 LED闪烁 延迟方法的应用具体代码如下:


  1. #include "stc32g.h"
  2. #include "stc32_stc8_usb.h"
  3. #include "string.h"
  4. #include "stdio.h"
  5. char *USER_DEVICEDESC = NULL;
  6. char *USER_PRODUCTDESC = NULL;
  7. char *USER_STCISPCMD = "@STCISP#";
  8. #define MAIN_Fosc       24000000L   //定义主时钟
  9. #define KEY_P32 P32
  10. #define KEY_P33 P33
  11. #define KEY_P34 P34
  12. #define KEY_P35 P35
  13. // 初始化
  14. void sys_init();
  15. void p20_auto_lighten_extinguish();
  16. void p2_lighten_10m(char p);
  17. char putchar(char c)
  18. {
  19.         char temp[2] = {0};
  20.         temp[0] = c;
  21.         USB_SendData(temp, 1); //发送数据缓冲区,长度
  22.         usb_OUT_done();
  23.         return c;
  24. }
  25. // 延时
  26. //========================================================================
  27. // 函数: void delay_ms(u8 ms)
  28. // 描述: 延时函数。
  29. // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
  30. // 返回: none.
  31. // 版本: VER1.0
  32. // 日期: 2022-6-3
  33. // 备注:
  34. //========================================================================
  35. void delay_ms(u8 ms)
  36. {
  37.     u16 i;
  38.     do{
  39.         i = MAIN_Fosc / 6000;
  40.         while(--i);   //6T per loop
  41.     }while(--ms);
  42. }
  43. void main()
  44. {
  45.         int i = 0;
  46.     P_SW2 |= 0x80;
  47.    
  48.     sys_init();
  49.     usb_init();                                     //USB CDC 接口配置
  50.         EUSB = 1;                                                                   //IE2相关的中断位操作使能后,需要重新设置EUSB
  51.     EA = 1;                                                                     //打开总中断
  52.    
  53.     while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  54.         while (1)
  55.     {
  56.                 if (bUsbOutReady)
  57.         {
  58.             USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  59.             usb_OUT_done();
  60.         }
  61.                 if (KEY_P33 == 0)
  62.                 {
  63.                         delay_ms(10);
  64.                         if (KEY_P33 == 0)
  65.                         {
  66.                                 P21 = 0;
  67.                         }
  68.                 } else {
  69.                                 P21 = 1;
  70.                 }
  71.                 if (KEY_P34 == 0)
  72.                 {
  73.                         delay_ms(10);
  74.                         if (KEY_P34 == 0)
  75.                         {
  76.                                 p20_auto_lighten_extinguish();
  77.                         }
  78.                 }
  79.     }
  80. }
  81. void sys_init()
  82. {
  83.         P0M1 = 0x00;   P0M0 = 0x00;
  84.     P1M1 = 0x00;   P1M0 = 0x00;
  85.     P2M0 = 0x00;   P2M1 = 0x00;
  86.     P3M1 = 0x00;   P3M0 = 0x00;
  87.     P4M1 = 0x00;   P4M0 = 0x00;
  88.     P5M1 = 0x00;   P5M0 = 0x00;
  89.     P6M1 = 0x00;   P6M0 = 0x00;
  90.     P7M1 = 0x00;   P7M0 = 0x00;
  91. }
  92. void p20_auto_lighten_extinguish()
  93. {
  94.         P20 = 0;
  95.         delay_ms(500);
  96.         P20 = 1;
  97.         delay_ms(500);
  98. }
  99. void p2_lighten(char p)
  100. {
  101.         P2 = ~(1 << p);
  102. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-8 17:29:13 | 显示全部楼层
打卡 硬件SPI读写FLASH芯片


1. 理解SPI的基础知识
      SPI通信总线,广泛用于MCUFLASH、传感器等之间的通信。它包含四个主要的信号线:SCK、MOSI、MISO和CS。
      工作模式 时钟极性和相位 (CPOL和CPHA)
2.熟悉FLASH芯片的特性
     不同的FLASH芯片有不同的存储结构和容量,包括页大小、扇区大小
     指令集不同 读取、写入、擦除等
3.SPI通信
   需要根据SPI 芯片要求正确配置
   如屠龙刀 我在代码中 一般配置波特率2400
4.FLASH芯片操作 需要注意优化读写策略  减少不必要的擦除操作。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-9 15:47:29 | 显示全部楼层
打卡 软件模拟IIC 硬件IIC

IIC总线是一种串行、半双工通信协议,主要用于近距离、低速的芯片通信

IIC有两根主要线路 串行数据线和串行时钟线(SDA、SCL) 用于数据传输和通信 的时间同步
IIC的特点 结构简单、成本低

软件模拟

通过通用输入输出(GPIO)口来模拟器SCL和SDAd时序。实现IIC通信
软件模拟的特点 灵活性高  可以在不支持硬件IIC的单片机上模拟实现 同时也存在时间延迟和精度的问题 影响通信的速度和稳定

硬件
硬件实现则是通过单片机内部集成的IIC控制器 直接通过物理线路通信
特点  通常稳定性和速度优于软件模拟 但受限于单片机硬件资源
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-9 18:38:11 | 显示全部楼层
打卡 EEPROM芯片数据读写

51单片机的EEPROM并非传统的EEPROM存储器,是通过DATAFLASH模拟实现的 这种设计使得51单片机不需要外部 EEPROM芯片的情况下能具备数据读写的功能
51单片机 利用IAP技术实现EEPROM读写操作 IAP允许单片机运行时对自身的FLASH存储器进行编程 也就是读写功能
51单片机提供了特殊功能寄存器来管理EEPROM读写操作

读写的流程

读取
1.设置地址寄存器(ISP_ADDRH、ISP_ADDRL)
2.发送读取命令(ISP_CMD=0x01)
3.触发寄存器(ISP_TRIG)进行读取操作 读取的数据存储到数据寄存器(ISP_DATA)中

写入
1.擦除目标扇区数据(注意:51单片机只能将1变为0 不能将0变为1)
2.设置寄存器地址 发送写入命令(ISP_CMD=0x02) 写入数据到寄存器
3.触发寄存器 进行写入操作

擦除

1.设置地址寄存器(注意:通常只设置扇区起始地址的高位部分)
2.发送擦除命令(ISP_CMD=0x03)
3.触发寄存器 执行擦除操作

触发机制

触发存储器(ISP_TRIG)的写入需要连续两次操作 先写入0x46 在写入0xB9 以确保安全性

注意事项
  扇区擦除
    51单片机只能将1变为0 不能将0变为1 因此写入数据之前如果目标地址不是全为1(0xFF) 则需要先执行扇区擦除
  中断管理
    执行EEPROM读写操作时 需要关闭总中断(EA=0) 确保操作连续不被打断


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2024-10-08 14:40:40

3

主题

22

回帖

191

积分

注册会员

积分
191
发表于 2024-8-12 20:58:32 | 显示全部楼层
打卡 PWM1


  • PWM是一种通过改变信号周期内“高电平”的持续时间与总周期的比例来调节模拟量输出的技术。这种技术广泛应用于电机控制、LED亮度调节等领域。
  • 虽然8051 内核不支持直接输出PWM(脉冲宽度调制)功能,但是可以通过软件或者硬件扩展。使得8051 单片机能产生PWM信号。控制电机、LED亮度调节等。

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 22:26 , Processed in 0.129406 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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