【51单片机快速入门指南】1:基础知识和工程创建

目录

  • 简介
  • 命名规则
  • 51单片机的数据类型
    • 总表
    • 扩展数据类型
    • stdint.h
  • 存储器类型关键字
  • 烧录工具
  • 工程的创建
    • 创建项目
    • 添加C文件
    • 配置工程
      • 存储模式配置
      • 输出配置
      • 代码优化配置
  • 编译
  • 烧录

普中51-单核-A2
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


简介

51 单片机是对所有兼容 Intel 8031 指令系统的单片机的统称。
常见品牌
Intel (英特尔):
        i80C31、i80C51、i87C51,i80C32、i80C52、i87C52 等;
ATMEL (艾德梅尔):
        AT89C51、AT89C52、AT89C2051,AT89S51(RC),AT89S52 (RC)等;
STC (国产宏晶):
        STC89C51、STC89C52、STC89C516、STC90C516
Nuvoton (国产新唐):
        N76E003、N76E616、MS51FB9AE
Philips (飞利浦)
Dallas (达拉斯)
Siemens (西门子)等

命名规则

在这里插入图片描述

51单片机的数据类型

总表

类 别数 据 类 型长 度值 域
字符型unsigned char1字节0~255
字符型signed char1字节-128~+127
字符型char1字节-128~+127
整 型unsigned short int2字节0~65535
整 型signed short int2字节-32768~+32767
整 型short int2字节-32768~+32767
整 型unsigned short2字节0~65535
整 型signed short2字节-32768~+32767
整 型short2字节-32768~+32767
整 型unsigned int2字节0~65535
整 型signed int2字节-32768~+32767
整 型int2字节-32768~+32767
长整型unsigned long int4字节0~4294967295
长整型signed long int4字节-2147483648~+2147483647
长整型long int4字节-2147483648~+2147483647
长整型unsigned long4字节0~4294967295
长整型signed long4字节-2147483648~+2147483647
长整型long4字节-2147483648~+2147483647
浮点型float4字节±1.75494E-38~±3.402823E+38
浮点型double4字节±1.75494E-38~±3.402823E+38
位 型bit1位0,1
位 型sbit1位0,1
SFR 型sbit1位0,1
SFR 型sfr1字节0~255
SFR 型sfr162字节0~65535

扩展数据类型

bit
        声明一个普通的位变量。例如:“bit flag;”。
sbit
        声明特殊功能寄存器中的某一位。例如,使用"sbit TI = SCON^0;",就声明了TI为特殊功能寄存器SCON的第0位。
sfr
        声明一个8位寄存器为特殊功能寄存器。例如,将51单片机内存地址0x98处的存储单元声明为8位特殊功能寄存器SCON,可以使用"sfr SCON = 0x98;"语句。
sfr16
        声明一个16位的寄存器为特殊功能寄存器。为了将51单片机内存地址0xCC处开始的连续两个存储单元声明为一个统一的16位特殊功能寄存器T2,可以使用"sfr16 T2 = 0xCC;"语句。

        在Keil中,用sbit、sfr、sfr16声明特殊功能寄存器变量或特殊功能寄存器位变量时,其声明语句都只能放在函数外,而不能放在函数内,否则出现语法错误;
        而用bit声明普通位变量时,声明语句既可放在函数外,也可放在函数内。此外,bit、sbit、sfr、sfr16都不支持指针和数组扩展,因此,不能定义bit、sbit、sfr、sfr16型指针和数组。

stdint.h

        其他平台的单片机大多都有stdint.h头文件统一数据类型,为了便利编程和之后的程序的移植,建议使用如下头文件辅助编程。

/*****************************************************************************/
/* STDINT.H                                                                  */
/* 仅适用于51单片机                                                           */
/*****************************************************************************/#ifndef STDINT_H
#define STDINT_Htypedef          char    int8_t;
typedef unsigned char   uint8_t;
typedef          short  int16_t;
typedef unsigned short  uint16_t;
typedef          long   int32_t;
typedef unsigned long  uint32_t;typedef  int8_t   int_least8_t;
typedef uint8_t  uint_least8_t;
typedef  int16_t  int_least16_t;
typedef uint16_t uint_least16_t;
typedef  int32_t  int_least32_t;
typedef uint32_t uint_least32_t;typedef  int8_t  int_fast8_t;
typedef uint8_t uint_fast8_t;
typedef  int16_t  int_fast16_t;
typedef uint16_t uint_fast16_t;
typedef  int32_t  int_fast32_t;
typedef uint32_t uint_fast32_t;typedef	 int32_t intmax_t;
typedef uint32_t uintmax_t;#define  INT8_MAX   0x7f
#define  INT8_MIN   (-INT8_MAX-1)
#define UINT8_MAX   0xff#define  INT16_MAX  0x7fff
#define  INT16_MIN  (-INT16_MAX-1)
#define UINT16_MAX  0xffff#define  INT32_MAX  0x7fffffff
#define  INT32_MIN  (-INT32_MAX-1)
#define UINT32_MAX  0xffffffff#define  INT_LEAST8_MAX   (INT8_MAX)
#define  INT_LEAST8_MIN   (INT8_MIN)
#define UINT_LEAST8_MAX   (UINT8_MAX)
#define  INT_LEAST16_MAX  (INT16_MAX)
#define  INT_LEAST16_MIN  (INT16_MIN)
#define UINT_LEAST16_MAX  (UINT16_MAX)
#define  INT_LEAST32_MAX  (INT32_MAX)
#define  INT_LEAST32_MIN  (INT32_MIN)
#define UINT_LEAST32_MAX  (UINT32_MAX)#define  INT_FAST8_MAX    (INT8_MAX)
#define  INT_FAST8_MIN    (INT8_MIN)
#define  UINT_FAST8_MAX   (UINT8_MAX)
#define  INT_FAST16_MAX   (INT16_MAX)
#define  INT_FAST16_MIN   (INT16_MIN)
#define  UINT_FAST16_MAX  (UINT16_MAX)
#define  INT_FAST32_MAX  (INT32_MAX)
#define  INT_FAST32_MIN  (INT32_MIN)
#define UINT_FAST32_MAX  (UINT32_MAX)#define  INT8_C(value)  ((int_least8_t)(value))
#define UINT8_C(value)  ((uint_least8_t)(value))
#define  INT16_C(value) ((int_least16_t)(value))
#define UINT16_C(value) ((uint_least16_t)(value))
#define  INT32_C(value) ((int_least32_t)(value))
#define UINT32_C(value) ((uint_least32_t)(value))
#define  INTMAX_C(value) ((intmax_t)(value))
#define UINTMAX_C(value) ((uintmax_t)(value))#endif

存储器类型关键字

在这里插入图片描述

烧录工具

在宏晶科技官网下载烧录工具
在这里插入图片描述
添加型号和头文件到Keil中

在这里插入图片描述
选择文件夹
在这里插入图片描述

工程的创建

普中科技–各型号开发板资料下载

创建项目

在Keil中,选择项目-新uVision项目…
在这里插入图片描述
选择位置创建工程
在这里插入图片描述
选择芯片型号
通用的型号可选择Legacy Device Database内Microchip的型号
在这里插入图片描述

在这里插入图片描述
若使用STC的单片机,并导入了STC的型号,则可选择如下。
在这里插入图片描述

确认
在这里插入图片描述

添加C文件

在这里插入图片描述
在这里插入图片描述
源文件中右键空白处,添加芯片的头文件
经典C52单片机为
在这里插入图片描述
STC的单片机为
在这里插入图片描述

配置工程

在这里插入图片描述

存储模式配置

本节摘自51 small、compact、large模式 —— EmbededCoder
在这里插入图片描述

        RAM在程序运行过程中存放随机变量的数据空间。51单片机默认内部RAM只有128B;52单片机默认256B;STC89C52增加到512B ;

        在Keil中编写程序,总程序中所有变量占用的字节数少于128B时候,并且储存模式为small时,对不定义的变量编译器将默认为0;一旦程序中变量总数量超过128B,必须对所有变量进行初始化,否则未被初始化的变量的默认值将是不确定的。当变量总和超过128B时候,必须重设定存储器的存储模式。

        存储器模式一共有三种,分别为small、compact、large模式。

small模式

        在small模式中,所有默认变量均装入单片机内部的RAM中,例如:uchar a ; float b等变量时候;;该模式下的优点:访问速度快、缺点是空间有限,且对堆栈的分配比较少,难以把握,碰到递归调用时候需要小心。这种模式只适用于小程序。

compact模式

        在compact模式中,所有默认变量均位于单片机的256B RAM中,和在small模式中使用关键字 pdata来定义数据变量的效果一样,如 uchar pdata a[100];在该模式下程序总变量空间不能超过256B。 对于只有128B的单片机来说,使用此模式定义超过128B变量数据时,将发生错误。其优点是觉small模式宽裕,速度较small慢,但是比large块,是一种中间状;’

large模式

        在large模式中,所有默认变量可放在多达64KB的RAM中,包括内部RAM和外部RAM,这和使用关键子xdata 来定义变量的效果一样。该模式的优点是空间大,可存变量多;缺点是:访问速度慢,尤其对于两个以上字节变量访问速度来说更是如此。在large模式下编写程序,定义的变量总数前外不能超过对应单片机的内部最大RAM字节数,因为即使超过了,编译器也不会提示错误,但是程序必然会出错。
在这里插入图片描述
在这里插入图片描述

输出配置

输出中勾选创建HEX文件以生成要烧录进单片机的16进制文件
在这里插入图片描述

在这里插入图片描述

代码优化配置

在这里插入图片描述

编译

在这里插入图片描述
编译后即可在工程路径Objects文件夹下找到可烧录的hex文件
在这里插入图片描述

烧录

打开STC-ISP软件,将开发板连接至电脑,选择对应的串口

在这里插入图片描述
选择要烧录的hex文件
在这里插入图片描述
在这里插入图片描述
点击下载/编程
在这里插入图片描述
有的开发板可直接下载,大部分情况下需要手动断电重启开发板
等待烧录完成:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)

2019独角兽企业重金招聘Python工程师标准>>> 1. 不要看到别人的回复,第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。 2. 初学者请不要看太多的书那会误人…

【51单片机快速入门指南】2:GPIO LED与按键

目录硬知识概念I/O口配置准双向口/弱上拉输出配置开漏输出配置实战延时函数的生成闪烁一个LED灯源码实验现象流水灯源码实验现象按键控制LED灯按键介绍源码实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 概念 …

菜鸟Linux攻略--目录文件权限的查看和修改(详细)

为什么80%的码农都做不了架构师?>>> 链接:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 转载于:https://my.oschina.net/L110/blog/402042

【51单片机快速入门指南】2.1:数码管显示数字、小数 (科学计数法)

目录硬知识数码管简介多位数码管简介数码管动态显示原理74HC245 芯片简介74HC138 芯片简介上机实战源码Tube.cTube.hmain.c效果显示整数正数负数显示小数(保留三位有效数字)正数负数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Develop…

防USB病毒

Windows XP 需要用此步驟。Windows 7 就不需要了。 步驟1. 於「開始/執行」中執行 regedit,進入登錄編輯程式。2. 找到機碼名稱: HKEY_CURRENT_USER\Software\microsoft\Windows\CurrentVersion\Explorer\MountPoints23. 點選該機碼,按右鍵選擇「使用權限…

项目案例分享四:DC升级后Sysvol停止复制,日志报13508

最近在240个站点AD升级项目过程中遇到个别DC升级后Sysvol里面的内容同步到一半就不动了,连续一个星期都没有动静,今天在此跟大家分享此问题的处理方法。1.环境介绍其中DC01和DC02是中国总部的DC,中国地区其他两百多站点通过KCC生成的链路和DC…

【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数

目录源码Tube.cTube.hmain.c效果8位数码管正整数负整数正小数负小数6位数码管正整数负整数正小数负小数4位数码管正整数负整数正小数负小数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码 移植时主要只修改Tube_Num数量、…

【51单片机快速入门指南】2.3:GPIO读取矩阵键盘 8个IO读16键

目录硬知识矩阵键盘介绍测试程序Key_Board.cKey_Board.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》 矩阵键盘介绍 独立按键与单片机连接时,每一个按键…

【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制

目录硬知识IO 口扩展方式-串转并74HC595 芯片介绍硬件设计测试源码HC74595.cHC74595.hmain.h实验现象SPI控制普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》 IO 口扩展方式-串转并 …

【51单片机快速入门指南】3:中断系统

目录硬知识中断概念中断系统中断结构中断优先级中断处理普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》、《STC89C52系列单片机器件手册》 中断概念 中断是为使单片机具有对外部或内…

正能量之项目经理的自我修养

正能量之项目经理的自我修养 作者:张子良 版权所有,转载请注明出处 引子 还记得曾经看过的《喜剧之王》么?还记的那曾经经典的台词么:“我不是死跑龙套的”,“人如果没有理想,和咸鱼又有什么区别呢&#xf…

利用D触发器和异或门实现两个IO解读电机编码器的计数值和方向

目录反转变正转正转变反转iPad Pro 2020 14.8.1 仿真软件:iCircuit 突发奇想,做个记录。应该可以用于诸如51单片机、Arduino或是电赛中可能用到的MSP430G2553这类外设十分稀缺的单片机上。一个想法,啊,不一定对。 黄色波形是编码…

TCP协议的三次握手和四次分手

HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请…

CountDownLatch线程同步辅助

2019独角兽企业重金招聘Python工程师标准>>> http://bughope.iteye.com/blog/2081935 在上一篇文章中写道用一个静态的变量保存线程的执行状态,并用时间等待的方法后来仔细考虑,其实是 线程不安全的.多个线程同时执行这个类时,这个静态变量的值就不能保证了. 用一个…

【51单片机快速入门指南】3.1:配置外部中断触发方式和中断优先级

目录源码EXTI.cEXTI.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码 stdint.h见【51单片机快速入门指南】1:基础知识和工程创建 中断知识见【51单片机快速入门指南】3:中断系统 将…

(转)工厂方法模式

转自:http://www.jellythink.com/archives/62 问题描述 之前讲到了C设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产Pr…

一种父线程阻塞等待子线程的有效方法

最近在做一个查询优化时,考虑到一次查询耗时较多,所以打算用多线程来做,之前是串行查询。比如一个用户查询触发50个线程,在只有一个用户的情况下,性能比串行查询确实提高了许多,但当多个用户同时触发查询的…

C语言利用循环队列实现滑动平均值滤波器,提高计算速度

目录源码Filter.cFilter.h使用效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器:Vofa 1.3.10 网上查到的滑动平均值滤波器在计算平均值的时候还要再for累加一遍,这太浪费时间了&#xff0c…

Exchange Server 2013日记功能

9.6 日记9.6.1 日记功能为什么很重要首先,了解日记功能与存档功能之间的区别十分重要:首先,了解日记功能与存档功能之间的区别十分重要: “日记”可以记录组织中的所有通信(包括电子邮件通信),以…

VB数据库经典实例总结(二)

大家先看一张似图非图的图、 我们先称它为“过程”也许有不对的地方,在我学数据库到这个阶段、到这个刚刚接触、初生牛犊不怕虎的阶段对它的理解是这样的、所有的都是这个过程、只是在这中间掺杂了一些知识点(我们要掌握的)针对有些个别的&am…