




这个是它的一个项目的组织形式
可以看到启动文件和C文件是同级的~
启动文件是用汇编写的
/*--------------------------------------------------------------------------
REG51.H
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;
#endif这个头文件可以说就是一个51单片机的奥秘所在
不同于stm32 msp430这些现代单片机的强大
搞懂51可以说是搞懂其他必走之路.
sfr很少,甚至我要求你背会,知道吧.背会20几个而已.


接着我们看下主要的文件.
其实用了很多的工具,也走过很多的错路.我也慢慢的知道了设计其实是一种减法的过程.对于一个编辑器或者说IDE亦或是源码阅读关系.其实无一不是在做一个事情,就是很明确的指出函数(方法)之间的调用关系或者是彼此之间的界限.有了这个批判标准我们可以说keli其实并不是毛坯房,甚至可以说是恰到好处的感觉.

可能对于写来说,它不友好.但是读.已经很棒了

但是还是差点味道,比如更现代?

我来设置一下字体

很容易的更改

可以看到也是挺不错的




右键互相转

启动代码的注释
该文件是C51编译器软件包的一部分 ; 版权所有(c)1988-2002 Keil Elektronik GmbH和Keil Software,Inc. ; STARTUP.A51:该代码在处理器复位后执行。 ; 要转换此文件,请通过以下调用使用A51: ; A51启动 ; 要将修改后的STARTUP.OBJ文件链接到您的应用程序,请使用以下命令 ; BL51调用: ; BL51 <您的目标文件列表>,STARTUP.OBJ <控件> ; 用户定义的存储器上电初始化 ; 使用以下EQU语句初始化内存 ; 可以在处理器复位时定义:





到这里就是启动代码的结尾了.我后面会专门写这个东西的含义
以及会与汇编语言挂钩

操作的三个端口

MCU就是在操作这些IO口在不同的时间序列上.
也就是说在每个确定的时间点上,IO口的状态是确定的.
so~先要确定IO口的初识状态
接着执行逻辑,这个是单片机的入门.就流式向下运行.
这个地方是位运算的天下,后面值得说关于位运算的骚操作



这就是C的值
