分享

单片机从入门到送走.第一天上

 云深无际 2022-01-09

今天这文章写的很水,看官莫喷。最近写NXP的东西感觉力不从心,重新把51撸一次找找感觉。起名字好难。

就这板子

STC51(点灯+五向开关)

STC51(LCD1602全解析.上)

价值3.8元8位单片机STM8S003F3P6

中景园STC89C52资料

STC89C52数据手册详解.1

STC89C52数据手册详解.5(寻址相关概念)

基于STC89-90xx飞控源码分析(1)

技术资料连接,敬请下载:链接:
https://pan.baidu.com/s/1esryJhne-oYHOAImTc0gvA 提取码:8888

原理图

去官网还看见了这

还有招聘

手贱搜索了一下这个东西:

提问

开始喷

这,单片机这种东西学会一个,再学一个就没有什么难度了

这里放郭老师得板子资料(我现在的一个群里就有郭老师。。。天天发视频,不知道该怎么说)

STC89C52RC+,妥了

然后添加一下头文件

C:\Keil_v5\C51\INC\STC

接着在这里就可以看到了

选择的时候就会有了

添加一下启动头在里面

STARTUP.A51 这个文件有什么用,有必要添加到工程吗?


  如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就无法去控制了,当然这在大部分情况下没什么关系。但是如果你想你的程序在复位后,内存里面的信息依然还保存着(所说的“热复位”),那么你就需要添加该启动文件,并且去里面修改内存初始化部分,不要初始化你需要保留的部分内存。

  启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数。这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。

  有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量,但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。 

Startup code:启动代码。

在Keil中,启动代码在复位目标系统后立即被执行。启动代码主要实现以下功能:

(1)       清除内部数据存储器

(2)       清除外部数据存储器

(3)       清除外部页存储器

(4)       初始化small模式下的可重入栈和指针

(5)       初始化large模式下的可重入栈和指针

(6)       初始化compact模式下的可重入栈和指针

(7)       初始化8051硬件栈指针

(8)       传递初始化全局变量的控制命令或者在没有初始化全局变量时给main函数传递命令。

关于书籍我推荐一本:

微信可读。

ISP功能是串口传输程序的功能

看TX,RX

ISP就是检测P3.0这个口子是不是有合法的下载命令流

接的晶振

(小声bb,我不是学这东西出身的。。。)

数据类型
位数
取值范围
释义
bit
1
0~1

sbit
10~1
位寻址
sfr
8
0~255
字节寻址
sfr16
16
0~65535
字寻址

寻址的意思就是定位一个要操作的地址。

位类型是定义位变量,就0,1.,可以坐函数的入口参数和返回值。

sfr,8个字节位一位,定义内部的所有的8位特殊功能寄存器,占用一个内存单元。

取值为0~255.

sfr16的占用两个内存单元。

sbit的三种用法:

  1. 位地址,绝对地址

  2. 特殊功能寄存器^位地址(第几位0~7之间的常数)

  3. 字节地址(常数作为基地址),在这个基础上定义一个位变量

DATA区,数据段使用,直接寻址,访问速度快,但是哇有点小

SMELL模式,都在内部存储区,速度快,地方小。二是紧凑模式,变量都在XDATA内,大大模式,访问有点慢。

内部有4个不同的工作寄存器组,每组里面8个(R0~R7),运行的时候只有一组寄存器在用,发生中断的时候,切换寄存器的组,然后为了当前的寄存器组不发生数据覆盖。相当于我6个电脑,一个软件开一个电脑。实现了现场保护和恢复断点的功能。

记得添加

#include "STC89C5xRC.H"void main(){ P0 = 0xFE; while (1) ;}

写自己的晶振数

HEX打勾

STC官方的烧录工具

是我土狗了,需要开关电源才可以下载。

#include "STC89C5xRC.H"
void delay(unsigned int t);void main(){ while (1) { P2 = 0xFC; // p2.0~p2.1 delay(500); P2 = 0xFF; // p2口全低电平 delay(500); };}void delay(unsigned int t){ unsigned int x, y; for (x = t; x > 0; x--) { for (y = 110; y > 0; y--) { } }}

可以调试,哪些看不起51的人,我也不知道咋想的。。。

本文的参考资料:

https://www.stcmcudata.com/
https://blog.csdn.net/dldw8816/article/details/42266193
http://www.stcmcudata.com/datasheet/stc/STC-AD-PDF/STC89C51RC-RD.pdf
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.88L.zip
https://github.com/wongsyrone/STC89C52RC

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多