赞
踩
作者 | 将狼才鲸 |
---|---|
创建日期 | 2022-09-29 |
本仓库相关网址:
CSDN文章地址
Gitee工程和源码地址
相关仓库:
嵌入式整体介绍,里面也描述了部分8051的内容:
才鲸嵌入式 / 嵌入式知识图谱WiKi
C语言框架讲解,让你对C语言要学哪些东西有一个完整的了解:
embedded_programming_skills/ 0_doc / 02-C语言框架讲解.md
工程名 | 作用 |
---|---|
01_Hello_world | 直接从Keil调试窗口中输出Hello world |
02_Keil_boot_annotation | 对Keil自带的汇编boot源码进行注释 |
03_Assemble_register | 展示8051真正的程序入口, 和添加自定义寄存器头文件 |
04_Macro_func_and_irq | 展示汇编宏定义函数和中断处理 |
05_Assemble_hello_world | 用汇编从Keil调试窗口中输出Hello world |
06_uart0_loopback | Keil调试输出窗口串口回环 |
… | … |
一是在Keil官网注册账号并下载Keil C51安装,但是安装好的软件只支持编译2K以内的程序。
https://www.keil.com/demo/eval/c51.htm
二是安装破解的Keil C51。
51单片机——如何安装Keil5(保姆级教程)
【嵌入式学习】单片机入门——1.Keil安装(51版本)
Keil官网上显示支持98家公司的9500款芯片(截止到2022-09-29),其中一半基于ARM核,一半基于8051核,少量基于其它核。
点击Legacy Device List查看所有器件
参考网址
厂商列表 MDK5 Device List:https://www.keil.com/dd2/
器件列表 Legacy Device List:https://www.keil.com/dd/
除了Keil,其它的8051模拟器还有:
emu8051:
https://github.com/jarikomppa/emu8051
https://www.cnblogs.com/jikexianfeng/p/6357529.html
EdSim51:
http://edsim51.com/
https://zhuanlan.zhihu.com/p/371060362
Keil A51汇编代码中支持很多常用的伪指令,需要掌握,写汇编时经常会用到,这些伪指令可以在A51相关的英文文档里看到所有的描述;国内网站上没找到有人完整的翻译所有的伪指令,但是能在Keil官网上找到英文原版的,我没有仔细去翻找,但是应该在C51用户手册里面的一系列文档中的某些章节里面。
Keil汇编伪指令介绍详见同级目录下的文档[《Keil A51汇编伪指令》](./02_doc/Keil A51汇编伪指令.md)
不使用Keil自带的GB2312中文编码,而是使用UTF-8中文编码,这样在用Git进行版本管理时能正常显示中文,在Linux和Windows之间来回切换工程后也不容易产生乱码,导致中文信息丢失无法恢复,步骤如下:
打开工程–>点击左上角“Edit”–>点击弹出菜单最下方Configuration–>
在弹出页面最左侧Editor页面中点击"Encoding"–>
从ANSI改为UTF-8,点击“OK”,这样可以输入中文。
Keil将Tab设置为固定4个空格(为了和Linux内核还有Git Tab以8个字节显示进行兼容,空格能让显示格式固定)
Configuration–>Editor–>C/C++ Files–>Tab size: 4
地址 | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 |
---|---|---|---|---|---|---|---|---|
通用寄存器 | 0组R0 | 0组R1 | 0组R2 | 0组R3 | 0组R4 | 0组R5 | 0组R6 | 0组R7 |
地址 | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F |
1组R0 | 1组R1 | 1组R2 | 1组R3 | 1组R4 | 1组R5 | 1组R6 | 1组R7 | |
地址 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 |
2组R0 | 2组R1 | 2组R2 | 2组R3 | 2组R4 | 2组R5 | 2组R6 | 2组R7 | |
地址 | 0x18 | 0x19 | 0x1A | 0x1B | 0x1C | 0x1D | 0x1E | 0x1F |
3组R0 | 3组R1 | 3组R2 | 3组R3 | 3组R4 | 3组R5 | 3组R6 | 3组R7 | |
地址 | 0x20 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 |
位地址 | 00H~06H | 07H~0FH | 10H~16H | 17H~1FH | 20H~26H | 27H~2FH | 30H~36H | 37H~3FH |
地址 | 0x28 | 0x29 | 0x2A | 0x2B | 0x2C | 0x2D | 0x2E | 0x2F |
40H~46H | 47H~4FH | 50H~56H | 57H~5FH | 60H~66H | 67H~6FH | 70H~76H | 77H~7FH | |
地址 | 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 |
剩下都是 | 用户RAM | 一般开辟 | 成堆栈 | …… | ||||
地址 | 0x38 | 0x39 | 0x3A | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F |
地址 | …… | …… | …… | …… | …… | …… | …… | …… |
地址 | 0x78 | 0x79 | 0x7A | 0x7B | 0x7C | 0x7D | 0x7E | 0x7F |
地址 | 0x80 | 0x81 | 0x82 | 0x83 | 0x84 | 0x85 | 0x86 | 0x87 |
---|---|---|---|---|---|---|---|---|
描述 | P0 IO口锁存器 | SP 堆栈指针 | DPL 数据地址低8位 | DPH 数据地址高8位 | WDTREL | PCON | ||
地址 | 0x88 | 0x89 | 0x8A | 0x8B | 0x8C | 0x8D | 0x8E | 0x8F |
TCON Timer控制 | TMOD Timer方式 | TL0 Timer0低8位 | TL1 Timer1低8位 | TH0 Timer0高8位 | TH1 Timer1高8位 | CKCON | ||
地址 | 0x90 | 0x91 | 0x92 | 0x93 | 0x94 | 0x95 | 0x96 | 0x97 |
P1 IO口锁存器 | DPS | DPC | PAGESEL | D_PAGESEL | ||||
地址 | 0x98 | 0x99 | 0x9A | 0x9B | 0x9C | 0x9D | 0x9E | 0x9F |
S0CON串口控制 | S0BUF串口锁存 | IEN2 | S1CON | S1BUF | S1RELL | |||
地址 | 0xA0 | 0xA1 | 0xA2 | 0xA3 | 0xA4 | 0xA5 | 0xA6 | 0xA7 |
P2 IO口锁存器 | DMAS0 | DMAS1 | DMAS2 | DMAT0 | DMAT1 | DMAT2 | ||
地址 | 0xA8 | 0xA9 | 0xAA | 0xAB | 0xAC | 0xAD | 0xAE | 0xAF |
IE0 中断允许 | IP0 | S0RELL | ||||||
地址 | 0xB0 | 0xB1 | 0xB2 | 0xB3 | 0xB4 | 0xB5 | 0xB6 | 0xB7 |
P3 IO口锁存器 | DMAC0 | DMAC1 | DMAC2 | DMASEL | DMAM0 | DMAM1 | ||
地址 | 0xB8 | 0xB9 | 0xBA | 0xBB | 0xBC | 0xBD | 0xBE | 0xBF |
IP 中断优先级 IEN1 | IP1 | S0RELH | S1RELH | IRCON2 | ||||
地址 | 0xC0 | 0xC1 | 0xC2 | 0xC3 | 0xC4 | 0xC5 | 0xC6 | 0xC7 |
IRCON | CCEN | CCL1 | CCH1 | CCL2 | CCH2 | CCL3 | CCH3 | |
地址 | 0xC8 | 0xC9 | 0xCA | 0xCB | 0xCC | 0xCD | 0xCE | 0xCF |
T2CON | CRCL | CRCH | TL2 | TH2 | RTCSEL | |||
地址 | 0xD0 | 0xD1 | 0xD2 | 0xD3 | 0xD4 | 0xD5 | 0xD6 | 0xD7 |
PSW 程序状态字 | IEN4 | I2C2DAT | I2C2ADR | I2C2CON | I2C2STA | SMB2_SEL | SMB2_DST | |
地址 | 0xD8 | 0xD9 | 0xDA | 0xDB | 0xDC | 0xDD | 0xDE | 0xDF |
ADCCON | P5 IO口 | I2CDAT | I2CADR | I2CCON | I2CSTA | SMB_SEL | SMB_DST | |
地址 | 0xE0 | 0xE1 | 0xE2 | 0xE3 | 0xE4 | 0xE5 | 0xE6 | 0xE7 |
ACC 累加器 | SPSTA | SPCON | SPDAT | SPSSN | P6 IO口 | |||
地址 | 0xE8 | 0xE9 | 0xEA | 0xEB | 0xEC | 0xED | 0xEE | 0xEF |
P4 IO口 | MD0 | MD1 | MD2 | MD3 | MD4 | MD5 | ARCON | |
地址 | 0xF0 | 0xF1 | 0xF2 | 0xF3 | 0xF4 | 0xF5 | 0xF6 | 0xF7 |
B 寄存器 | ||||||||
地址 | 0xF8 | 0xF9 | 0xFA | 0xFB | 0xFC | 0xFD | 0xFE | 0xFF |
8051的指令集和boot原理介绍,含指令集中完整256条指令的表格:
embedded-knowledge-wiki/ documents / 2.3.1.1_c51编程.md - https://gitee.com/langcai1943/embedded-knowledge-wiki/blob/develop/documents/2.3.1.1_c51编程.md
其它8051资源描述的网页链接:
8051单片机内部RAM低128单元划分为哪三个部分?各有什么特点?
8051基础之三:数据存储类型
8051内部RAM位寻址区
8051系列单片机
R8051XC2的寄存器描述在网上没搜到,但是创建完R8051XC2工程后,在Keil中进入debug模式后,View–>Symbols Windows里面能看到所有寄存器地址。
Keil调试时“Register”窗口有最简单的寄存器:r0~r7、a、b、sp、sp_max、PC $、dpspl、dptr07、dpc07、states、sec、psw(p、f1、ov、rs、f0、ac、cy)。
Keil调试时“Symbols”窗口中有Virtual Registers寄存器:PPAGE、XPAGE、XTAL、CLOCK、INTPINS、INT0PIN、INT1PIN、PORT03O、PORT03I、SO1IN、S01OUT、SO1TIME、T01PIN、SWD、I2S、SPI、RTC。
Keil调试时“Symbols”窗口中有Special Function Registers:SP、PSW、ACC、A、B、DPL、DPH、DPS、DPC、CKCON、PCON、IEN04、IP01、IRCON、IRCON2、P0P3、S01CON、SO1BUF、SO1RELL、SO1RELH、ADCON、IEN2、TCON、TMOD、TL01、TH01、T2CON、TL2、TH2、CRCL、CRCH、CCEN、CCL13、CCH13、WDTREL、MD05、ARCON、I2CDAT、I2CADR、I2CCON、I2CSTA、I2C2ADR、I2C2CON、I2C2STA、SPSTA、SPCON、SPDAT、SPSSN、DMAS02、DMAT02、DMAC0~2、DMASEL、DMAM0、DMAM2、SRST、RTCSEL、RTCDAT
参考网址:
r8051中文资料,r8051xc所有寄存器描述
8051单片机21个特殊功能寄存器和指令汇总
R8051XC 数据表(PDF)
ATT7035A_7037A_7037B用户手册 - 钜泉
Toolchain Extensions for R8051XC/R8051XC2 Core
特殊功能寄存器(SFR)详解 ——以8051单片机为例
实验二 8051单片机IO口输出操作实验
本工程主要演示使用Keil创建一个R8051XC2的默认工程,使用Keil自带的Boot汇编文件,然后新建一个main.c文件,写一个printf函数 + 简单的串口0驱动,并能从软件窗口上看到printf的结果。
创建工程的步骤详见章节“二、环境准备及知识储备”中“Keil创建工程”小节中的内容,你可以省掉这步,直接打开现有的工程。
工程路径:本文档同级目录/01_proj_and_src/01_Hello_world/
你可以直接双击打开 ./01_proj_and_src/01_Hello_world/01_Hello_world.uvproj工程
然后编译:点击软件上面状态栏第三排左侧两个向下小箭头的图标。看到.\Objects\01_Hello_world" - 0 Error(s)表示编译通过。
然后开始运行:点击软件上面状态栏第二排右侧黑色放大镜+红色“d”的小图标;如果你的软件是官网下载的未破解的评估版,会出现一个弹窗,关掉那个弹窗不管它;程序会停在main()函数的第一行,先不要继续运行。
输出的结果会在Keil Debug状态下的UART #1窗口中;这个窗口Keil不会主动为你打开,你需要点击在软件上面第三排图标中的小串口带一个黑色串口的图标旁边的小三角形,选中里面的UART #1,然后软件右下角就会出现UART #1窗口。
继续运行:点击软件左上角一个向下箭头的图标,UART #1窗口中出现了Hello world!的输出。
额外的知识:
*参考网址 *
keil C51 重定向printf到串口
本工程主要演示使用Keil创建一个默认工程,然后添加串口0的回环收发用例,在Keil的调试串口进行串口收发,并且可以使用虚拟串口,通过SSOM32与Keil通信来进行串口收发。
工程文件:本文档同级目录/06_uart0_loopback/06_uart0_loopback.uvproj
将Keil的UART #1调试输出串口与SSCOM32等串口软件绑定的话,需要用到VSPD软件。
参考网址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。