首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >点灯!!!

点灯!!!

作者头像
云深无际
发布2020-11-03 10:41:16
发布2020-11-03 10:41:16
3930
举报
文章被收录于专栏:云深之无迹云深之无迹

这个是它的一个项目的组织形式

可以看到启动文件和C文件是同级的~

启动文件是用汇编写的

代码语言:javascript
复制
/*--------------------------------------------------------------------------
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的值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档