MCS-51 microcontroller

发布时间 2023-09-11 11:34:32作者: AmorFati404

常用原件记录

  • 数码管

    • SEG
    • 7SEG-MPX1-CA 8个引脚
    • 7SEG-MPX4-CA 多位数码管
    • 7SEG-COM-ANODE(共阳
  • 上拉电阻

    • RESPACK-8
  • 锁存器

    • 74HC573
  • 三极管

    • NPN
  • 电阻

    • 10WATT100R

    • 排阻

      • RES16DIPIS
  • 按键

    • button
  • 电容

    • C1808C161MZGACTU
  • 拓展芯片

    • 拓展输出
      • CD4094
      • 74LS164
    • 拓展输入
      • CD4014
      • 74LS165

学习过程中的问题

为什么数据类型多用unsigned

  • 省内存

  • C51设计之初,不支持有符号操作

    前人在学习时,早期的代码示例是unsigned,后人学习也就成了习惯

sbit和bit 的区别

  • 都是C51的拓展的变量类型
  • bit
    • 动态分配
    • 外部或内部
    • 更像是数据类型
  • sbit
    • 绝对地址
    • 只能外部
    • 主要用于寄存器
    • 为分配内存空间的变量取一个别名

bit i = 0;意思就是在内存中划一块空间给i,让他存储0这个数据位,没有这个语句之前,内存里面任何一个地址空间都没有i这个变量存在。

sbit Flag = P0^1;意思就是给P0^1取一个别名,ta叫做Flag,没有这个语句之前,P0^1这个数据位已经有一个明确的地址空间,ta就是0x80的第二位数据位。

多分支管理

  • 基础版本同时需要扩展多种验证方案的工程
  • 相同框架同时扩展多种组合需求方案的工程
  • 一套软件有不同配置需求的工程
  • 同个业务逻辑,不同底层驱动的工程
  • 这会让你的作品看起来更由条理,更容易管理

IO端口

  • P0端口:引脚P0.0~P0.7,输入八路信号,输出八路信号

    • I/O输出时,输出0为低电平,输出1为高阻态
    • I/O输入时,不需要接上拉电阻,但要先置1,使端口处于高阻浮空状态
  • P1端口

    • 当时老师给的资料也没相关的介绍

    • 反正,我理解的就是

      输出 输入
      1亮 0不亮 0亮 ,1不亮
  • P2端口:引脚P2.0~P2.7,输入8路信号,输出8路信号

    • 当使用外部存储器时,还可以与P0口配合使用,作为16位地址总线的高8位
  • P3端口:引脚P3.0~P3.7,输入8路信号,输出8路信号

    • P3.0,RXD,串行数据接收
    • P3.1,TXD,串行数据发送
    • P3.2,INT0,外部中断0申请P3.3,INT1,外部中断1申请
    • P3.4,T0,定时器/计数器0计数输入
    • P3.5,T1,定时器/计数器1计数输入
    • P3.6,WR,外部RAM写选通
    • P3.7,RD,外部RAM读选通

锁存器,静态显示,动态显示

幕布内容来源于网络

中断

图片源于肖谧老师的课件

计时器/定时器

参考资料

串口通信

注意事项

新建项目

Keil uVision5 + VScode,VScode插件:keil assistant + C++/C + ...

  • Keil新建项目,勾选生成hex选项,添加源文件

    不在keil中加的话,build的时候可能会有warning,生成的hex文件,在Proteus中也无法使用

    至于具体原因自己也没有复盘?

命名规范

  • 变量命名

    • 见名知意(少用拼音
    • 每个单词首字母缩写(可缩写
    • 风格统一(我可能采取下划线的方式)
  • 函数命名

    • 专有名词全部大写

    • 函数名_功能

      char UART_IsTxBuffFull();

  • 代码风格

    全靠编译器

烧录

  • stc-isp烧录时,一直显示“正在检测目标单片机”

    直接冷启动,引导区到程序区