项目51单片机相关基础知识介绍
- 格式:doc
- 大小:498.50 KB
- 文档页数:17
51单片机基础知识单片机作为一种嵌入式微控制器,具有广泛的应用领域和技术需求。
本文将介绍51单片机的基础知识,包括其概述、硬件结构、编程语言和开发环境等内容。
通过本文的学习,读者可以对51单片机有初步了解,并为之后的学习和应用打下基础。
一、概述51单片机,是指Intel公司开发的一种8位微处理器。
它以其简单、稳定和可靠的特点,成为嵌入式系统开发中最常用的单片机之一。
51单片机由存储器、中央处理器、输入输出端口、计时器/计数器和各种外围设备组成。
二、硬件结构51单片机的硬件结构主要包括中央处理器、存储器、输入输出端口和计时器/计数器。
1.中央处理器51单片机的中央处理器是一种基于哈佛架构的8位微处理器,具有高性能和低功耗的特点。
它可以执行指令、进行算术逻辑运算和控制外围设备的工作。
2.存储器51单片机的存储器包括程序存储器和数据存储器。
程序存储器用来存储运行的程序代码,而数据存储器用于存储程序需要的数据。
3.输入输出端口51单片机通过输入输出端口与外部设备进行通信。
输入端口用于接收外部信号,输出端口用于输出控制信号。
4.计时器/计数器51单片机内置了多个计时器/计数器,用于定时和计数应用。
它们可以实现精确的时间控制,并为系统提供准确的时间基准。
三、编程语言51单片机的常用编程语言有汇编语言和C语言。
汇编语言是51单片机最早的编程语言,它直接与硬件进行交互,执行效率高。
而C语言是一种高级编程语言,具有结构化、可移植等特点,编写的程序更加易读易维护。
1.汇编语言汇编语言是一种低级别的编程语言,需要程序员直接处理寄存器和内存地址。
它的语法相对复杂,但可以更直接地控制硬件资源,实现更高效的程序执行。
2.C语言C语言是一种结构化的高级编程语言,具有简洁、易读和可移植等特点。
C语言程序需要通过编译器将源代码转化为机器指令,然后才能在51单片机上运行。
四、开发环境51单片机的开发环境包括硬件开发工具和软件开发工具。
51单片机初学知识点总结1. 什么是51单片机:51单片机是指Intel公司生产的8位单片机芯片系列。
51单片机由中央处理器单元(CPU)、随机存储器(RAM)、只读存储器(ROM)、输入输出端口以及中断系统等组成。
2. 51单片机的发展历史:51单片机最早在1980年由Intel公司发布,之后逐渐发展壮大。
目前,市面上有很多公司都生产和销售51单片机。
3. 51单片机的架构:51单片机采用Harvard结构,即程序存储器与数据存储器分开。
程序存储器分为片内存储器和片外存储器,数据存储器包括RAM和特殊功能寄存器。
4. 51单片机的寄存器:51单片机有一组特殊功能寄存器,用于存储和控制各种系统状态。
这些寄存器可以分为SFR(Special Function Register)和控制寄存器两种类型。
5.51单片机的引脚和IO口:51单片机有40个引脚,其中一些引脚是I/O(输入/输出)口。
这些I/O口可以配置为输入或输出,并可以被程序控制。
6.51单片机的时钟系统:51单片机需要一个时钟源来提供时钟信号。
时钟源可以是外部晶体振荡器或者片内RC振荡器。
7.51单片机的存储器:51单片机具有不同类型的存储器,包括内存区域、堆栈区域和特殊功能寄存器。
内存区域包括RAM和ROM,堆栈区域用于保存中断处理和函数调用的返回地址。
8.51单片机的指令集:51单片机具有丰富的指令集,可以执行各种操作,例如算术运算、逻辑运算、位操作和跳转等。
9.51单片机的中断系统:51单片机具有中断系统,可以响应外部中断和定时器中断。
中断可以打断当前执行的程序,并转移到中断处理函数。
10.51单片机的编程和调试:51单片机的编程可以使用汇编语言或高级语言(如C语言)进行。
调试可以使用模拟器或者仿真器进行。
11.51单片机的应用领域:51单片机广泛应用于各种控制系统和嵌入式系统,例如家用电器控制、电动工具、汽车电子等。
12.51单片机的扩展接口:51单片机可以与其他外设连接,例如LCD显示屏、键盘、温度传感器等。
C51单片机基础学习教程C51单片机是一种常用的8位单片机,广泛应用于工业控制、家用电器和电子产品等领域。
若想学习C51单片机,首先需要掌握C语言的基础知识。
以下是一个C51单片机基础学习教程,介绍了C语言的相关内容,并给出了一个简单的例子。
一、C语言基础1.数据类型:C语言中主要有整型、字符型、浮点型等数据类型。
可以使用关键字来定义变量并赋值。
示例:int num = 10;char ch = 'A';float f = 3.14;2.运算符:C语言中有算术运算符、逻辑运算符、关系运算符等。
可以用于对变量进行运算和比较。
示例:int a = 10, b = 5;int sum = a + b;int result = (a > b) ? a : b;3.控制语句:C语言中有顺序结构、分支结构和循环结构。
可以用于控制程序的执行流程。
示例:if (num > 0)printf("The number is positive.");} else if (num < 0)printf("The number is negative.");} elseprintf("The number is zero.");4.函数:C语言中可以使用函数将代码模块化,并且可以通过参数和返回值传递数据。
示例:int add(int a, int b)return a + b;二、C51单片机入门2. 创建新项目:在Keil软件中创建一个新的项目,并选择C51单片机作为目标芯片。
3. 编写程序:在新建的项目中打开main.c文件,编写C语言程序。
可以使用C语言的代码编写方式。
示例:#include <reg51.h>//定义LED端口sbit LED = P1^0;void mai//设置LED口为输出LED=0;while (1)//LED闪烁LED=~LED;//延时for (int j = 0; j < 100; j++)}}}5. 调试程序:在Keil软件中打开调试窗口,可以对程序进行单步调试,查看程序的执行流程和变量的值。
51单片机基本知识汇总51单片机是一种常见的微控制器,广泛应用于各种电子设备中。
本文将对51单片机的基本知识进行汇总,包括其特点、应用领域、工作原理以及相关开发工具等内容。
一、51单片机的特点51单片机是一种8位微控制器,具有体积小、功耗低、价格便宜等特点。
它采用哈佛结构,具有较好的实时性能和嵌入式系统特性。
此外,51单片机还具备较强的扩展性,可通过外部器件和接口扩展其功能。
二、51单片机的应用领域由于其成本低、易学易用的特点,51单片机在各种电子设备中被广泛应用。
比如家用电器、汽车电子、工控设备、通信设备等领域。
在家用电器中,51单片机可以用于控制空调、洗衣机、电视等设备的运行;在汽车电子方面,它可以用于控制车载音响、车灯等;在工控设备中,51单片机可用于控制机械手臂、传感器等;在通信设备方面,它可以用于控制无线路由器、手机等。
三、51单片机的工作原理51单片机的工作原理可以简单概括为:通过外部输入设备(如按键、传感器)获取输入信号,经过A/D转换后输入到单片机内部;单片机根据预先设定的程序进行运算、判断和控制,然后通过输出端口控制外部输出设备(如LED灯、电机)工作。
整个过程是通过时钟信号进行同步控制的。
四、51单片机的开发工具为了方便开发人员进行程序设计和调试,51单片机有一系列的开发工具可供选择。
常用的开发工具有Keil C51、Proteus、IAR等。
Keil C51是一种集成开发环境,提供了编译、调试、仿真等功能,可以方便地编写和调试51单片机的程序。
Proteus是一种虚拟电子电路设计与仿真软件,可用于模拟51单片机的工作过程。
IAR是一种集成开发环境,也是一种常用的编译器,适用于多种单片机开发。
总结:本文对51单片机的基本知识进行了汇总,包括其特点、应用领域、工作原理以及相关开发工具等内容。
51单片机作为一种常见的微控制器,具有广泛的应用前景。
掌握了51单片机的基本知识,可以更好地应用于各种电子设备的开发与控制。
51单片机教程单片机作为嵌入式系统的关键元素之一,具有广泛的应用前景。
本教程将为大家介绍51单片机的基本知识、应用案例以及编程技巧。
通过学习本教程,读者将能够掌握51单片机的原理和基本操作,为进一步深入学习和应用打下坚实的基础。
一、简介51单片机指的是Intel公司推出的一种经典的8位单片机,广泛应用于电子产品中。
它使用的是哈弗小端字节序,运行稳定可靠,并具备强大的扩展性,便于工程师进行开发和应用。
二、基本原理1. 51单片机的结构51单片机包括中央处理器、存储器和各种外设。
中央处理器由ALU、寄存器组、程序计数器、指令译码器等组成。
存储器包括片内RAM和片内ROM,外设包括I/O口、定时器等。
2. 时序控制51单片机的时序控制通过晶振、分频器和定时器来实现。
晶振提供时钟信号,分频器控制时钟信号的频率,定时器用于定时和计数。
三、编程环境搭建1. 安装编程软件在学习51单片机之前,我们需要安装相应的编程软件。
常用的有Keil C51、WinAVR等。
根据自己的需求选择一个适合的软件进行安装。
2. 设置开发板将开发板与计算机连接,并进行相应的设置。
确认开发板的连接方式和COM口设置正确。
四、基本操作1. 点亮LED灯首先,我们从最简单的实验开始,通过51单片机控制LED灯的点亮和熄灭。
连接好电路后,编写相应的程序,即可实现LED灯的亮灭控制。
2. 按键输入与输出通过接入按键开关,我们可以实现通过按键输入不同的命令,控制LED灯的亮灭。
通过读取按键输入的状态,编写相应的程序进行判断和控制。
五、应用案例1. 温度检测系统通过连接温度传感器,我们可以使用51单片机对周围环境的温度进行检测,并通过LED灯或LCD显示屏来显示当前的温度数值。
2. 蜂鸣器控制将蜂鸣器与51单片机连接,通过编写程序控制蜂鸣器的频率和节奏,可以实现不同的音乐或警报声音。
六、编程技巧1. 中断编程中断编程是51单片机常用的一种编程方式。
引言概述:51单片机是一种常见的单片机型号,它具有广泛的应用领域和较高的使用率。
本教程旨在为初学者提供51单片机的入门知识和基础操作指南。
本文将介绍51单片机的基本概念,硬件配置,编程语言,程序以及常见问题解答。
通过学习本教程,读者可以对51单片机有一个全面的了解,并在实践中掌握其基本应用。
正文内容:1.51单片机基本概念介绍单片机的定义和类型,包括其基本构成和特点。
详细解释51单片机的命名由来,并介绍其典型应用场景。
探讨51单片机与其他单片机型号的区别和优势。
2.51单片机硬件配置介绍51单片机开发板的主要组成部分和功能。
讲解51单片机的复位电路、晶振电路以及外部扩展接口。
提供常见的硬件错误排查方法,如常见的电路连接问题和芯片供电问题。
3.51单片机编程语言简要介绍51单片机所支持的主要编程语言。
详细解释汇编语言和C语言在51单片机编程中的应用。
提供汇编语言和C语言的编译和调试方法,以及注意事项。
4.51单片机程序介绍不同的程序方法,如串口、ISP以及仿真器。
解释如何选择合适的方法和调试工具。
提供常见错误和解决方法,如速度慢、失败等问题。
5.51单片机常见问题解答回答常见的初学者问题,如51单片机如何上电启动、如何设置端口输入输出、如何控制LED等。
解决常见的编程问题和错误,如程序死循环、程序崩溃等。
提供进一步学习资源和推荐书籍,以帮助读者更深入地理解和掌握51单片机。
总结:通过本教程的学习,读者获得了对51单片机的基本概念、硬件配置、编程语言、程序以及常见问题解答等方面的全面了解。
无论是初学者还是有一定经验的工程师,都可以通过实践操作和进一步学习,掌握51单片机的基本应用和进阶技巧。
希望本教程能给读者带来实际帮助,并激发更多的学习兴趣和创造力。
引言概述:本文主要介绍了51单片机入门教程。
51单片机是一种非常常见的单片机,广泛应用于各种电子设备和嵌入式系统中。
本文将详细介绍51单片机的基本原理、开发环境、编程语言以及常用功能及应用等方面的内容。
51单片机知识点总结
51单片机是一种常用的单片机芯片,广泛应用于嵌入式系统和微控制器领域。
在学习和应用51单片机时,掌握以下知识点是必不可少的:
1. 51单片机的基本知识:了解51单片机的基本结构、引脚定义、特点和工作原理。
2. 51单片机的编程语言:掌握51单片机的编程语言,如C语言、汇编语言等。
3. 51单片机的编程环境:了解51单片机的编程环境,如Keil C、SDCC等,以及如何搭建开发环境。
4. 51单片机的烧录技术:了解51单片机的烧录技术,如ISP烧录、JTAG烧录等。
5. 51单片机的IO口控制:掌握51单片机的IO口控制,包括输入输出、上拉下拉、检测和控制等。
6. 51单片机的中断系统:了解51单片机的中断系统,包括中断类型、中断优先级、中断向量等。
7. 51单片机的定时器和计数器:掌握51单片机的定时器和计数器,包括定时器的工作原理、使用方法和应用场景等。
8. 51单片机的串口通信:了解51单片机的串口通信,包括UART、SPI、I2C等协议,以及如何实现串口通信。
9. 51单片机的PWM控制:了解51单片机的PWM控制,包括PWM的原理、使用方法和应用场景等。
10. 51单片机的ADC采集:掌握51单片机的ADC采集,包括ADC的原理、使用方法和应用场景等。
总之,掌握这些51单片机的基本知识和技能,能够为我们在嵌入式系统和微控制器领域的应用和开发提供有力的支持。
C51单片机是一种基于C语言的微控制器,具有强大的处理能力和灵活的编程特性。
以下是一些关于C51单片机的基础知识:
硬件结构:C51单片机采用冯·诺依曼结构,由运算器、控制器、存储器、输入输出设备等组成。
存储器:C51单片机内部有一个程序存储器(Flash ROM)、一个数据存储器(RAM)和一个特殊功能寄存器(SFR)。
程序存储器用于存储程序,数据存储器用于存储变量和临时数据,特殊功能寄存器用于控制各种外设和功能。
指令系统:C51单片机的指令系统类似于C语言,包括算术指令、逻辑指令、数据传输指令、程序控制指令等。
外设:C51单片机有多种外设,如定时器/计数器、串行通信接口、中断控制器、I/O端口等。
这些外设可以通过特殊功能寄存器进行配置和控制。
开发环境:C51单片机的开发环境通常包括编译器、调试器和集成开发环境(IDE)。
编译器将C语言代码转换为单片机可执行的机器码,调试器用于在单片机上进行程序调试和仿真,IDE提供了代码编写、编译、调试和下载的一体化环境。
应用领域:C51单片机广泛应用于各种嵌入式系统,如智能仪表、家电控制、通信设备、工业自动化等领域。
总之,C51单片机是一种功能强大、易于编程的微控制器,通过学习和掌握其基础知识,可以开发出各种高效的嵌入式应用系统。
51单片机教程51单片机是一种常用的微控制器,学习51单片机的教程可以帮助初学者快速入门。
在本篇教程中,将介绍51单片机的基本知识和编程技巧。
1. 概述51单片机是基于哈佛体系结构的8位微控制器。
它具有丰富的外设和接口,适用于各种嵌入式应用。
在学习51单片机之前,需要了解单片机的基本结构、寄存器和指令集等重要概念。
2. 开发环境搭建搭建合适的开发环境对学习51单片机至关重要。
可以选择Keil C51或者SDCC等集成开发环境,并安装相应的编译器和调试器。
此外,还需要连接51单片机与电脑,才能进行程序下载和调试。
3. 程序编写与调试使用C语言编写51单片机的程序是最常见的方法。
首先,需要了解51单片机的IO口、定时器、中断等基本知识,以及相应的编程方法。
然后,可以通过编写简单的程序,例如LED闪烁、计数器等,来测试和调试开发板。
4. 外设和接口的应用51单片机具有丰富的外设和接口,例如串口、SPI、I2C等。
学习如何使用这些外设和接口,可以帮助实现更多功能。
例如,可以使用串口进行与计算机的通信,或者通过SPI接口与外部设备进行数据交换。
5. 项目实践通过完成具体的项目,可以深入理解51单片机的应用。
例如,可以设计一个温度测量系统、一个电子钟或者一个自动控制系统等。
在实践过程中,可以遇到各种问题和挑战,通过解决问题,可以提高面对实际问题的能力。
总结:通过本篇教程,介绍了51单片机的基本知识和编程技巧。
希望读者可以通过学习,掌握51单片机的应用和开发方法。
在学习过程中,需要勤加练习,不断积累经验,才能更好地应用单片机技术。
单片机基础一、 单片机基础知识1.1 51系列单片机简介:51系列单片机是单片机领域中的一类,也是影响最为深远,使用最为广泛的单片机系列。
51单片机是指Intel的MCS‐51系列及和其具有兼容内核的单片机。
51系列单片机最早由Intel公司发展起来,随后将51内核授权给其他各个厂商。
因此,现在MCS‐51兼容的单片机种类繁多,如:Atmel公司的AT889C系列、AT89S系列、Silicon Laboratories的C8051F 系列以及STC的单片机等。
这些系列的单片机都有着十分接近的指令系统和硬件结构,在开发起来很方便移植。
1.2 STC系列单片机:STC89C51RC系列单片机是STC推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择,HD版本和90C版本内部集成MAX810专用复位电路。
特征:1) 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可任意选择,指令代码完全兼容传统80512)工作电压:5.5V ‐ 3.3V (5V单片机) / 3.8V ‐ 2.0V (3V单片机)3) 工作频率范围:0~40MHz,相当于普通8051的 0~80MHz,实际工作频率可达48MHz.4)用户应用程序空间:4K / 8K / 13K / 16K / 32K / 64K字节5)片上集成1280字节或512字节RAM6)通用I/O口(35/39个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O 口);P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7)ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(RxD/P3.0, TxD/P3.1)直接下载用户程序,数秒即可完成一片8)有EEPROM功能9)看门狗10)内部集成MAX810专用复位电路(HD版本和90C版本才有),外部晶体20M以下时,可省外部复位电路。
51单片机知识点51单片机是一种广泛应用于嵌入式系统中的微控制器,它具有体积小、功耗低、易于编程等优点,因此在各种电子设备中得到了广泛的应用。
本文将从51单片机的基本概念、编程语言、IO口、定时器、中断等方面进行介绍。
一、基本概念51单片机是一种基于哈佛结构的微控制器,它由CPU、存储器、IO口、定时器、中断等组成。
其中,CPU是单片机的核心部件,它负责执行程序指令;存储器包括ROM和RAM,ROM用于存储程序代码,RAM用于存储数据;IO口用于与外部设备进行通信;定时器用于计时和延时;中断用于处理外部事件。
二、编程语言51单片机可以使用多种编程语言进行编程,如汇编语言、C语言、BASIC语言等。
其中,汇编语言是最基础的编程语言,它可以直接控制单片机的硬件资源,但编写难度较大;C语言是一种高级语言,它可以简化编程过程,提高编程效率;BASIC语言则是一种易于学习的语言,适合初学者使用。
三、IO口51单片机的IO口包括输入口和输出口,它们可以与外部设备进行数据交换。
输入口可以接收外部设备的信号,输出口可以向外部设备发送信号。
在编程时,可以通过设置IO口的状态来实现与外部设备的通信。
四、定时器51单片机的定时器可以用于计时和延时。
在编程时,可以设置定时器的计数值和工作模式,从而实现不同的计时和延时功能。
定时器可以用于控制LED灯的闪烁、蜂鸣器的发声等。
五、中断51单片机的中断可以用于处理外部事件,如按键、传感器等。
在编程时,可以设置中断的触发条件和处理函数,从而实现对外部事件的响应。
中断可以提高单片机的响应速度和处理效率。
51单片机是一种广泛应用于嵌入式系统中的微控制器,它具有体积小、功耗低、易于编程等优点。
在编程时,可以使用多种编程语言进行编程,通过设置IO口、定时器和中断等硬件资源,实现与外部设备的通信和控制。
51单片机及C语言入门教程一、了解51单片机1.硬件介绍2.体系结构3.编程语言二、掌握C语言基础C语言是一种结构化的高级编程语言,易于学习和应用。
以下是C语言的基础知识。
1.数据类型C语言支持多种数据类型,包括整型、浮点型、字符型等。
根据需要选择合适的数据类型进行变量的声明和使用。
2.运算符C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。
熟悉并正确使用这些运算符是进行编程的关键。
3.控制语句控制语句是C语言中用于控制程序流程的重要语法结构。
常见的控制语句有条件语句(if-else)、循环语句(for、while、do-while)等。
4.函数函数是C语言中的基本代码单位,可以实现代码的模块化和复用。
编写函数时,需要明确函数的返回类型、参数列表和函数体。
三、开发环境搭建在进行51单片机和C语言的开发之前,需要准备好相应的开发工具和环境。
1.集成开发环境(IDE)2.单片机编程器3.相关资料在学习和开发过程中,需要查阅相关的资料和教程。
可以通过互联网相关的电子书籍、论坛和博客等。
四、编写第一个程序在搭建好开发环境之后,可以编写并运行第一个C语言程序。
1.创建工程使用IDE创建一个新的工程,并选择适合的目标单片机型号。
2.编写代码在IDE中,创建一个新的C语言源文件,并编写代码。
例如,可以编写一个led闪烁的程序。
```#include<reg51.h>void mainP1=0x00;//设置P1口为输出while(1)P1 = 0xff; // P1口所有引脚输出高电平P1=0x00;//P1口所有引脚输出低电平}```五、进阶知识学习通过掌握51单片机基本知识和C语言基础,可以进行更复杂的开发和项目实践。
1.中断处理中断是一种异步的事件处理机制,在51单片机中具有重要的意义。
学习如何使用中断来处理各种外部事件和信号。
2.存储器扩展3.通信接口总结:本文介绍了51单片机和C语言的入门教程。
1、单片机的机器周期、状态周期、振荡周期和指令周期之间是什么关系?答:一个机器周期恒等于6个状态周期或12个振荡周期,即1M=6S=12P。
2、存储器中有几个保留特殊功能的单元用做入口地址?作用是什么?答:MCS-51系列单片机的存储器中有6个保留特殊功能单元;作用:0000H为复位入口、0003H为外部中断0入口、000BH为T0溢出中断入口、0013H为外部中断1入口、001BH为T1溢出中断入口、0023H为串行接口中断入口。
3、开机复位后,CPU使用是的哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?答:开机复位后,CPU使用的是第0组工作寄存器。
它们的地址是00H~07H。
CPU通过对程序状态字PSW中RS1、RS0的设置来确定和改变当前工作寄存器组。
如:RS1、RS0为00则指向第0组;为01则指向第1组;为10则指向第2组;为11则指向第3组。
4、MCS-51的时钟周期、机器周期、指令周期的如何分配的?当振荡频率为8MHz时,一个单片机时钟周期为多少微秒?答:MCS-51的时钟周期是最小的定时单位,也称为振荡周期或节拍。
一个机器周期包含12个时钟周期或节拍。
不同的指令其指令周期一般是不同的,可包含有1~4个机器周期。
当振荡频率为8MHz时,一个单片机时钟周期为0.125μs 。
5、EA/V引脚有何功用?8031的引脚应如何处理?为什么?PP答:EA/V是双功能引脚:PP(1)EA接高电平时,在低4KB程序地址空间(0000H~0FFFH),CPU执行片内程序存储器的指令,当程序地址超出低4KB空间(1000H~FFFFH)时,CPU将自动执行片外程序存储器的指令。
(2)EA接低电平时,CPU只能执行外部程序存储器的指令。
8031单片机内部无ROM,必须外接程序存储器。
因此,8031的EA引脚必须接低电平。
在对8751单片机内部的 EPROM编程时,此引脚V外接+12V电压,用于固化EPROM程PP序。
51单片机基础知识必备一. 基础知识必备1 . 单片机复位引脚——RST当输入连续两个机器周期以上的高电平时为有效,用来完成单片机复位的初始化操作,复位后的程序计数器PC = 0000H,即复位后将从程序存储器的0000H单元读取第一条指令代码。
通俗的讲,就是单片机从头开始执行程序。
2.PSEN 全称是程序储存器允许输出控制端。
在读取外部程序储存器时,PSEN低电平有效,以实现外部程序储存器的读操作。
(内存足够了,没必要)3.电平重要知识点CMOS电路中不使输入端悬空,否则会造成逻辑混乱。
CMOS电平能驱动TTL电平,但是TTL电平不能驱动CMOS电平,需加上拉电阻4. 51系类扩展数据类型sfr——特殊功能寄存器的数据声明,声明一个8位寄存器。
sfr16 ——16位特殊功能寄存器的数据声明。
sbit ——特殊功能位声明,就是声明某一个特殊功能寄存器中的某一位。
bit ——位变量声明,当定义一个位变量时,可使用此符号。
5. 电阻的标志读数如果标称是103,就是10*10^3欧姆,150表示15*10^0欧姆,三位数表示5%精度,四位数表示1%精度6.要牢记,51MCU上电时,如果没有人为的控制IO状态,它所有的IO口都将是高电平,因此,我们没有必要写一句让锁存端置于高电平的语句7.和MCU有关的周期(1)时钟周期,也称震荡周期,定义为时钟频率的倒数。
MCU中最小的事件单位(2)状态周期,他是时钟周期的两倍(3)机器周期,MCU的基本操作周期,在一个操作周期内,MCU完成一个基本操作,如读取指令,储存器的读写。
它由12个时钟周期(6个状态周期组成)(4)指令周期,他是指MCU执行一条命令所需要的事件,一般一个指令周期含有1~4个机器周期8.“消影”——P0 = 0xff每次送完段选数据之后,在送入为选数据之前,需加上P0 = 0xff。
9 中断概念51内部有5个终端源,也就是说有5种情况发生,会使得单片机去处理终端程序。
一、单片机基础知识1.1介绍:单片机,简称MCU.内部集成了CPU,RAM,ROM,定时器,终端系统,通讯接口等一系列电脑的常用硬件功能1.1.1点亮一个LED:安装好stc-isp与Keil5C51,配置USB驱动;建立一个新工程,选择AT89C52型号添加新文件选择C语言(通常情况下)通过调节P20的电压实现点亮/熄灭写好程序勾选创建HEX文件,再次编译;配置芯片型号(带RC选RC)与串口点击打开程序文件打开HEX文件下载到单片机;查找时重启单片机电源;成功点亮1.1.2LED闪烁:可从此处进行延时函数复制(系统频率一般默认为12Hz)#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay500ms() //@12.000MHz{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);}void main(){while(1){P2 = 0xFE;//1111 1110 There is a pressure drop across the diode Delay500ms();P2 = 0xFF;//1111 1111 There isn't a pressure drop across the diode Delay500ms();}}使用此函数进行LED闪烁;1.1.3LED流水灯:通过控制P2管脚的十六进制数值改变对应LED灯的压降,实现亮/灭;P2实际上为8位一体的导线;P2_X则可以操作单独的LED控件#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay1ms(unsigned int xms) //@12.000MHz{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){P2=0xFE;//1111 1110 D1Delay1ms(500);P2=0xFD;//1111 1101 D2Delay1ms(500);P2=0xFB;//1111 1011 D3Delay1ms(500);P2=0xF7;//1111 0111 D4Delay1ms(500);P2=0xEF;//1110 1111 D5Delay1ms(500);P2=0xDF;//1101 1111 D6Delay1ms(500);P2=0xBF;//1011 1111 D7Delay1ms(500);P2=0x7F;//0111 1111 D8Delay1ms(500);}}1.2独立按键控制LED亮灭:通过查询原理图发现,K1独立按键对应P3_1;#include<REGX52.H>//The Definitionvoid main(){while(1){if(P3_1){//UPP2_0=1;//D1 Dark}else{//DOWNP2_0=0;//D1 Light}}}1.2.1独立按键控制LED状态:按键抖动:对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会立刻断开,开关闭合/断开时往往伴随着波动#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);P2_0=~P2_0;}}}消除误差1.2.2独立按键控制LED显示二进制unsigned char 用来表示一个寄存器#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber = 0;while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);LEDNumber++;P2=~LEDNumber;}}}对P2进行取反操作则为计算二进制数值1.2.3独立按键控制LED移位:#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber=0;P2=~0x01;//Rename the character while(1){if(!P3_0){//K2 DOWN Moving RightDelay(20);while(!P3_0);Delay(20);LEDNumber++;if(LEDNumber>=8){LEDNumber=0;}P2=~(0x01<<LEDNumber);}if(!P3_1){//K1 DOWN Moving LeftDelay(20);while(!P3_1);Delay(20);if(!LEDNumber){LEDNumber=7;}else{LEDNumber--;}P2=~(0x01<<LEDNumber);}}}包括左移(K1)和右移(K2);if语句中为消除误差+移动计算;通过改变P2总导线压降,来控制对应LED灯的亮灭首先对P2进行初始化0000 0001 D1亮0x01<<00000 0010 D2 亮0x00<<1....1000 0000 D8亮0x00<<81.3静态数码管显示:确定静态数码管显示时,先根据所选型号与待输出数据确定位选(3.8引脚的高低电平)与段码(剩下引脚的高低电平)通过此两排端口进行控制,下方端口由P0控制通过138译码器实现仅一位LED为1的操作(其余为0),通过观察真值表确定端口: 三端口为P2引脚.C B A Y0 0 0 70 0 1 60 1 0 50 1 1 41 0 0 31 0 1 21 1 0 11 1 1 0DIR控制数据传输方向DIR通过J24控制电平高低.当DIR接高电平时,从左向右传输数据#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){ switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];}void main(){unsigned int location = 1, number = 0;while(1){if(location > 8){location = 1;number = 0;}Delay(1000);Nixie(location,number);location++;number++;}}1.3.1动态数码管显示在实现显示多个数据时,清零上一个数据,实现消影#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];Delay(1);P0=0x00;//Creat Last digit.}void main(){while(1){Nixie(1,5);Nixie(2,2);Nixie(3,0);}}1.3.2LCD1602调试工具LCD_Init();//初始化LCD_ShowChar(1,1,'A');//显示一个字符LCD_ShowString(1,3,"Hello");//显示字符串LCD_ShowNum(1,9,123,3);//显示十进制数字LCD_ShowSignedNum(1,13,-66,2);//显示有符号十进制数字LCD_ShowHexNum(2,1,0xA8,2);//显示十六进制数字LCD_ShowBinNum(2,4,0xAA,8);//显示二进制数字1.4矩阵键盘:矩阵按键按列扫描P引脚均为弱上拉,即同时输入1&&0,输出0添加如下文件:#include <REGX52.H>#include "Delay.h"unsigned char MatrixKey(){unsigned char KeyNumber=0;//先判断列数,再判断行数,避免电平错位P1=0xFF;//全部置为高电平P1_3=0;//仅启动P1_3--即第一列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=1;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=5;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=9;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=13;}P1=0xFF;//全部置为高电平P1_2=0;//仅启动P1_2--即第二列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=2;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=6;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=10;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=14;}P1=0xFF;//全部置为高电平P1_1=0;//仅启动P1_1--即第三列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=3;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=7;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=11;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=15;}P1=0xFF;//全部置为高电平P1_0=0;//仅启动P1_0--即第四列if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=4;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=8;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=12;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=16;}return KeyNumber;}1.4.1矩阵键盘密码锁main函数:#include <REGX52.H>#include "Delay.h"#include "LCD1602.h"#include "MatrixKey.h"unsigned int KeyNumber;unsigned int PassWord,Count;//密码,位数void main(){LCD_Init();LCD_ShowString(1,1,"PassWord:");while(1){KeyNumber=MatrixKey();if(KeyNumber){if(KeyNumber<=10){//将10变成0,仅考虑0~9范围内if(Count<4){PassWord*=10;//每输入一位密码,当前密码左移一位 PassWord+=KeyNumber%10;//获取一位密码Count++;//计次}LCD_ShowNum(2,1,PassWord,4);//输出密码}if(KeyNumber==11){//清零Count=0;//清零次数PassWord=0;//清零密码LCD_ShowNum(2,1,PassWord,4);//更新显示}if(KeyNumber==12){//确认LCD_ShowString(1,12," ");if(PassWord==1976){LCD_ShowString(1,12,"OK");}else{LCD_ShowString(1,12,"ERROR");}//清零Count=0;PassWord=0;LCD_ShowNum(2,1,PassWord,4);//更新显示}}}}1.5定时器1.5.1按键控制LED流水灯模式TMOD:定时器寄存器:配置M1,M2为1 0-更改为16定时器模式0~65535:溢出时才进行中断判断每隔1us计数加一,总共定时时间65535us;赋初值64535-1000us(1ms)后计数器溢出,进行中断操作快捷生成定时器模块该函数未配置中断与中断优先级,且定时器时钟模式不需要定义定时器函数://1ms定时器void Timer0_Init(){//模式寄存器,高四位为计时器1,低四位为计时器2//高四位不变,低四位清零:10101100&11110000=10100000TMOD&=0xF0;//高四位不变,低四位赋1:10101100|00000001=10100001TMOD|=0x01;//控制寄存器;能单独对部分赋值TF0=0;//中断标志TR0=1;//运行控制位;1时运行T0进行计数//给定时器赋初值TH0=0xFC;//64535高八位TL0=0x18;//64535低八位//配置中断ET0=1;EA=1;//优先级选取PT0=0;}中断函数://定时器中断函数void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//1ms中断一次,中断1000次则为1s //具体操作T0Count=0;P2_0=~P2_0;//闪烁}}主函数:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "Key.h"unsigned char KeyNumber,LEDMode;void main(){P2=0xFE;//点亮D1,给予循环移位初值Timer0_Init();//启用定时器while(1){KeyNumber=Key();if(KeyNumber){//按下独立按键if(KeyNumber==1){//S1为模式改变按键LEDMode++;if(LEDMode>=2){//仅有0|1两种模式LEDMode=0;}}}}}//中断操作void Timer0_Rountine() interrupt 1{ static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=500){//0.5s操作一次T0Count=0;if(LEDMode){//模式1P2=_cror_(P2,1);//右移一位}else{//模式0P2=_crol_(P2,1);//左移一位}}}1.5.2定时器时钟:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "LCD1602.h"unsigned char Second,Minute,Hour;void main(){LCD_Init();//显示屏初始化LCD_ShowString(1,1,"Clock:");Timer0_Init();//启用定时器while(1){LCD_ShowNum(2,1,Hour,2);LCD_ShowString(2,3,":");LCD_ShowNum(2,4,Minute,2);LCD_ShowString(2,6,":");LCD_ShowNum(2,7,Second,2);}}//中断操作void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//0.5s操作一次T0Count=0;Second++;if(Second==60){Minute++;Second=0;if(Minute==60){Hour++;Minute=0;if(Hour==25){Hour=Minute=Second=0;}}}}}1.6串口:1.6.1串口通信:配置波特率:1.6.2交互数据传输:#include <REGX52.H>//串口函数******************void UART_Init(){//配置串行控制寄存器,调整工作模式1SCON=0x50;//允许双向传输,REN置为1,配置使能//配置波特率选择位--需要配置定时器PCON|=0x80;//最高位置1,波特率加倍//定时器模式寄存器式//使用双八位模式(复位与计数分开)提高精度//清除定时器1模式位TMOD&=0x0F;//设定定时器1为八位自动重装方式TMOD|=0x20;//256溢出一次TL1=0xF4;//设定定时器初值TH1=0xF4;//设定定时器重装值ET1=0;//禁止定时器1中断TR1=1;//启动定时器1//使能中断EA=1;ES=1;}//发送函数void UART_SendByte(unsigned char Byte){SBUF=Byte;//发送数据到SBUF缓存器中即可进行传输//检测是否完成while(!TI);TI=0;}#ifndef __UART_H__#define __UART_H__/*串口函数输入:void输出:void功能:实现串口使用的初始化*/void UART_Init();/*串口发送函数输入:void输出:void功能:通过串口发送数据至接收端*/void UART_SendByte(unsigned char Byte);#endifmain:#include <REGX52.H>#include "Delay.h"#include "UART.h"void main(){UART_Init();while(1){}}//使能中断函数;发送/接收中断函数void UART_Routine() interrupt 4{if(RI==1){//限制仅为接收中断才进行后续操作P2=~SBUF;//外部设备传输数据存放在SBUF缓存器内 UART_SendByte(SBUF);//输出传入数据RI=0;}}1.7LED点阵屏:通过74HC595三个引脚控制八个LED 显示(新版板子是没有该八位LED 的)通过控制75HC595进行数据传输: #include <REGX52.H>//重新进行声明sbit RCK = P 3^5; //RCLKsbit SCK = P 3^6; //SRCLKsbit SER = P 3^4;//移位寄存器输入数据void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}void main(){//初始化SCK=0;RCK=0;_74HC595_WriteByte(0xF0);while(1){}}1.7.1LED点阵屏显示动画:使用该软件进行数据读取MatrixLED_ShowColumn.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"//移位寄存器输入数据,控制段选void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}//LED点阵屏void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data){ _74HC595_WriteByte(Data);//段选MATRIX_LED_PORT=~(0x80>>Column);//位选0时出现压降,导通Delay(1);MATRIX_LED_PORT=0xFF;//位清零}//初始化void MatrixLED_Init(){SCK=0;RCK=0;}MatrixLED_ShowColumn.h:#ifndef _MATRIXLED_H__#define _MATRIXLED_H__//重新进行声明sbit RCK= P3^5;//RCLKsbit SCK= P3^6;//SRCLKsbit SER= P3^4;#define MATRIX_LED_PORT P0/*移位寄存器函数输入:Byte-点阵屏行数据输出:void功能:通过输入数据对LED点阵屏行(即位选)进行调整范围:0~7*/void _74HC595_WriteByte(unsigned char Byte);/*LED点阵屏函数输入:Column-位选 Data-段选输出:void功能:通过输入位选与段选实现LED点阵屏的动画演示*/void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data);/*LED点阵屏初始化函数输入:void输出:void功能:对LED相关参数进行初始化*/void MatrixLED_Init();#endifmain.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"unsigned char code Animation[]={//存放在flash内存中,避免占用RAM内存0x00,0x40,0x20,0x1F,0x20,0x40,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x76,0x91,0x89,0x6E,0x00,0x00,0x00,0x00,0x7F,0x88,0x88,0x70,0x00,0x00,};void main(){//只要是局部变量的定义都要放在所在函数体内的第一行unsigned char j,Offset,Count;MatrixLED_Init();while(1){for(j=0;j<8;j++){MatrixLED_ShowColumn(j,Animation[j+Offset]);}Count++;if(Count>10){//扫描十遍偏移一次Count=0;Offset+=8;Delay(200);if(Offset>32){//防止溢出Offset=0;}}}}1.8DS1032定时时钟:从上到下依次存储不同的时间左边两列为其地址命令字第六位:1-RAM;0-CK,对时钟进行操作(有横线代表低电平有效)仅改变前七位,最后一位恒为1前一个字节是命令字,后一个是数据重新定义该三个端口1.8.1DS1302固定时钟主函数:#include <REGX52.H>#include "Delay.h"#include "DS1302.h"#include "LCD1602.h"void main(){LCD_Init();DS1302_Init();LCD_ShowString(1,1," - - ");LCD_ShowString(2,1," : : ");DS1302_SetTime();//设置时间//DS1302芯片内部自动会进行时间进位,不需要手动设置,只需要输入初始时间即可while(1){DS1302_ReadTime();//读入时间LCD_ShowNum(1,1,DS1302_Time[0],2);LCD_ShowNum(1,4,DS1302_Time[1],2);LCD_ShowNum(1,7,DS1302_Time[2],2);LCD_ShowNum(2,1,DS1302_Time[3],2);LCD_ShowNum(2,4,DS1302_Time[4],2);LCD_ShowNum(2,7,DS1302_Time[5],2);}}DS1302.c:#include <REGX52.H>#include "Delay.h"//重新定义端口名称,便于模块化集成sbit DS1302_SCLK=P3^6;sbit DS1302_IO=P3^4;sbit DS1302_CE=P3^5;#define DS1302_SECOND 0x80#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_DATE 0x86#define DS1302_MONTH 0x88#define DS1302_DAY 0x8A#define DS1302_YEAR 0x8C#define DS1302_WP 0x8E//Year,Month,Day,Hour,Minute,Second,Weekdayunsigned char DS1302_Time[]={22,5,22,21,19,55,7};//DS1302初始化,将使能端置0,SCLK置0void DS1302_Init(void){DS1302_CE=0;DS1302_SCLK=0;}//写入操作void DS1302_WriteByte(unsigned char Command, unsigned char Data){ //写入预操作//Command的第零位赋予IO口,第零位是标志位,判断读/写//Command与Data都是通过上升沿进行判断,因此总共有16个脉冲unsigned char i;DS1302_CE=1;//进行Command判断for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//进行电平变化,产生上升沿与下降沿DS1302_SCLK=1;Delay(1);//一般需要增加延时,具体参考芯片手册DS1302_SCLK=0;}//进行数据写入for(i=0;i<8;i++){DS1302_IO=Data&(0x01<<i);DS1302_SCLK=1;Delay(1);DS1302_SCLK=0;}//写入末操作DS1302_CE=0;}unsigned char DS1302_ReadByte(unsigned char Command){//读入预操作unsigned char i;unsigned char Data=0x00;Command|=0x01;//此处将最低位,置成1,使输入的写Command变成读Command DS1302_CE=1;//读入的Command是上升沿,而Data是下降沿,因此总共有15个脉冲for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//调整位置确保脉冲与Data一致DS1302_SCLK=0;DS1302_SCLK=1;}//读入数据//IO口默认为0,因此输入的数据为1时,for(i=0;i<8;i++){DS1302_SCLK=1;DS1302_SCLK=0;if(DS1302_IO){Data|=(0x01<<i);}}//读入末操作DS1302_CE=0;DS1302_IO=0;return Data;}unsigned char ChangeToDec(unsigned char Number){return (Number/16*10+Number%16);}。
51单片机知识总结51单片机是一种常见的微控制器,广泛应用于各种嵌入式系统。
以下是关于51单片机的知识总结:1. 概述:51单片机是指基于Intel的8051微控制器核的微控制器。
它具有40个引脚,采用CHMOS工艺,功耗低,可靠性强。
51单片机内部集成了数据存储器、程序存储器、定时器/计数器、串行通信接口等模块。
2. 结构特点:一个8位处理器。
具有布尔处理能力和位处理功能。
4k字节的ROM/EPROM,可进行在线编程和擦除。
256字节的RAM。
外部总线接口。
时钟和定时器模块。
3. 应用领域:工业自动化控制。
智能仪表和传感器接口。
家电控制(如空调、冰箱、洗衣机等)。
通信设备(如调制解调器、路由器等)。
汽车电子(如发动机控制、安全系统等)。
4. 开发环境:常用的51单片机开发环境有Keil、IAR Embedded Workbench等,这些开发环境支持C/C++语言编程,方便用户进行程序开发和调试。
5. 编程语言:常用的编程语言有汇编语言和C语言。
汇编语言是一种低级语言,可以直接控制硬件,但代码量大且可读性差;C语言则是一种高级语言,代码量小且易于读懂和维护,但在编程时需要了解一些硬件相关的知识。
6. 开发流程:系统需求分析:明确系统的功能需求和控制要求。
硬件电路设计:根据需求选择合适的单片机型号和外设器件,设计电路原理图和PCB板。
软件编程:使用开发环境编写程序代码,进行仿真和调试。
系统集成与测试:将硬件和软件集成在一起,进行系统测试和功能验证。
7. 注意事项:在应用51单片机时,需要注意单片机的电源电压范围、时钟频率选择、I/O口的使用和配置等问题,同时还要注意避免电磁干扰和过流过压等问题。
8. 未来发展:随着技术的发展,51单片机逐渐面临被淘汰的命运,但其在嵌入式系统中的地位仍然非常重要。
未来,随着物联网技术的发展,51单片机有望在智能家居、智能农业等领域得到更广泛的应用。
同时,随着技术的进步,51单片机的性能和功能也将得到进一步提升和完善。
51单片机知识基础51单片机是一种非常常见的嵌入式系统开发平台,广泛应用于各个领域,如工业控制、智能家居、物联网等。
要想在嵌入式系统开发中熟练运用51单片机,我们首先需要了解它的基础知识。
本文将从51单片机的概念、特点、原理、编程语言等方面展开论述,以帮助读者全面掌握51单片机的基础知识。
第一部分:51单片机概述51单片机是指Intel公司研发的一种8位单片微控制器,意为“Intel 80系列单片机”。
它由CPU、内存、输入输出端口、定时器、串口等组成,具有较强的数据处理和控制能力。
作为一种非常成熟的单片机,51单片机以其稳定性、成本低、易于使用等特点,受到了广大嵌入式系统开发者的青睐。
第二部分:51单片机特点1. 8位架构:51单片机采用8位架构,即其CPU的位数为8位。
这使得51单片机非常适合于一些对计算能力要求不高的控制应用。
2. 强大的IO口:51单片机内置了大量的IO口,可以方便地与其他设备进行通信,实现各种输入输出功能。
此外,51单片机还支持中断功能,可以提高系统的响应速度。
3. 丰富的外设:51单片机内部集成了多个定时器、串口等外设,可用于实现各种功能,如定时、计数、通信等。
4. 低功耗设计:51单片机在设计时考虑到了功耗的问题,采取了一系列的低功耗技术,可以大大降低系统的能耗。
5. 软件支持:针对51单片机,有丰富的软件开发工具和开发库可供选择,如Keil C51、SDCC等,大大降低了开发的难度。
第三部分:51单片机工作原理51单片机的工作原理主要包括指令执行周期、数据通信、中断机制等。
1. 指令执行周期:51单片机通过时钟控制来执行指令。
每个指令执行周期由若干个机器周期组成,一个机器周期通常为12个时钟周期。
2. 数据通信:51单片机通过内部总线进行数据通信。
在执行指令时,需要从内存或寄存器中读取数据,对数据进行处理,并将处理结果写回内存或寄存器。
3. 中断机制:51单片机支持中断机制,可以在特定条件下触发中断请求,从而暂停当前的程序执行,转而执行中断服务程序。
从零开始入门学习51单片机教程51单片机是一种经典的通用型单片机,广泛应用于嵌入式系统开发中。
入门学习51单片机需要从基础知识开始,逐步深入学习各种功能和应用。
本篇文章将从以下几个方面介绍如何从零开始入门学习51单片机。
一、基础知识1.了解单片机的概念和基本原理,包括什么是单片机、单片机的工作原理以及单片机的分类等。
2.学习基本的电子元器件的知识,如电阻、电容、二极管、晶体等。
二、软硬件环境搭建1.了解51单片机的硬件开发环境,如开发板、仿真器、编程器等。
2. 学习搭建51单片机开发环境,包括安装Keil C语言开发环境和Proteus仿真软件。
三、C语言基础1.学习C语言的基本语法和程序设计思想,包括变量、数据类型、运算符、控制语句、函数等。
2.掌握C语言的常用库函数,如输入输出函数、字符串处理函数、数学函数等。
四、51单片机编程基础1.学习51单片机的内部结构和寄存器的使用,了解各个寄存器的功能和地址。
2.学习如何编写简单的51单片机程序,包括LED点亮、按键输入、数码管显示等。
五、扩展功能学习1.学习使用外部中断、定时器、串口通信等扩展功能,掌握其使用方法和应用场景。
2.学习使用各种外设模块,如LCD液晶显示屏、ADC模数转换、DAC数模转换等。
六、综合实践项目1.完成一些简单的实践项目,如LED呼吸灯、温度测量、遥控器等。
2.深入学习一些复杂的实践项目,如多功能数字钟、智能温控系统等。
七、优化与调试1.学习如何调试51单片机程序,包括使用调试器、查看寄存器值、打印调试信息等。
2.学习如何进行程序优化,提高程序的执行效率和资源利用率。
总结希望通过本篇文章的介绍,你能够了解到从零开始入门学习51单片机的基本步骤和内容。
入门学习51单片机需要系统性的学习和实践,不仅要学习基础知识,还需要深入理解其原理和应用。
通过反复实践和项目练习,不断提升编程能力和硬件调试技巧,才能够熟练掌握51单片机的开发和应用。
一、概述1、结合8051介绍单片机C语言的优越性:·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;·不懂得单片机的指令集,也能够编写完美的单片机程序;·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;·提供small、compact、large等编译模式,以适应片上存储器的大小;·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。
C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏·提供常用的标准函数库,以供用户直接使用;·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。
·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;2、HEX文件建立了第一个单片机C语言项目,但为了让编译好的程序能通过编程器写入51芯片中,要先用编译器生成HEX文件3、C 编译器所支持的注释语句:一种是以“//”符号开始的语句,符号之后的语句都被视为注释,直到有回车换行。
另一种是在“/*”和“*/”符号之内的为注释。
注释不会被 C 编译器所编译。
4、main函数:一个 C 应用程序中应有一个 main 主函数,main 函数能调用别的功能函数,但其它功能函数不允许调用 main 函数。
工程一51单片机相关基础知识介绍目标学习本工程后,学生应能:●了解单片机的功能及应用。
●了解51单片机的标号信息、封装类型及外部引脚。
●了解C51中的基本数据类型和运算符。
●了解学习单片机所需的软硬件资源。
走进电子市场或电器维修部或打开某些智能化电器产品的后盖,你会发现如图1-1-1所示的电路板及其电子元器件。
电路板上常用电子元器件有电阻器、电容器、发光二极管、集成块等,你知道这两块板上标有“STC”的两个集成块叫什么吗?六位数码管电子时钟超声波测距仪图1-1-1常用电路板标有“STC”的两个集成块就是我们要学习的———单片机。
那么什么是单片机?单片机能做什么?单片机的外形、引脚、封装及内部结构又是怎样的呢?下面就让我们一起走进51单片机,学习51单片机的相关基础知识。
任务一了解单片机的功能及应用1.什么单片机从图1-1-1所示电路板中的单片机外形可以看出,单片机是一块集成芯片。
但它又不是完成某一逻辑功能的芯片,它是把一个计算机系统集成到某一个芯片上,即在一块硅片上集成了微处理器、存储器及输入/输出接口的芯片。
它实际上是一个简单却又是完整的计算机系统,麻雀虽小,五脏俱全。
但这块集成芯片具有特殊的功能。
它的功能的实现是要靠我们使用者编程来完成的。
我们编程的目的就是控制这块芯片的各个引脚在不同时间输出不同的电平(高电平或低电平),进而控制与单片机各个引脚相连的外围电路的电气状态。
编程时,我们可选择C语言或汇编语言。
2.单片机的功能及应用单片机是一种可通过编程控制的微处理器,单片机芯片自身不能单独运用于某项工程或产品上,它必须要靠外围电路才可发挥其身身的强大功能,所以,我们在学习单片机时不能仅仅学习单片机的一种芯片,还要循序渐进地学习它外围的数字及模拟电路知识,还要学习常用的外围电路的设计与调试方法等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”。
如智能型洗衣机。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
综上所述,目前单片机的应用领域已非常广泛,可归类如下;①工业自动化。
如数据采集、测控技术。
②智能仪器仪表。
如数字示波器、数字信号源、数字万用表、感应电流表等。
③消费类电子产品。
如洗衣机、电冰箱、空调机、电视机、微波炉、IC卡、汽车电子设备等。
④通信方面。
如调制解调节器、程控交换技术、手机、小灵通等。
⑤武器装备。
如飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。
这些电子器件内部无一不用到单片机,而且大多数电器内部的主控芯片就是一块单片机来控制的,可以说,凡是与控制或简单计算机有关的电子设备都可以用单片机来实现。
科技越发达,智能化的东西就越多,使用的单片机就越多。
任务二了解51单片机标号信息、封装类型及外部引脚目前单片机很多,有8051、PIC、MS430、A VR等。
单片机虽然型号不同,但是芯片内部的资源种类都差不多,而且这些资源的使用方法也大同小异。
可以说学会一种,其他种类融会贯通。
8051系列是老型号,这种单片机虽不是目前功能最强大,但却是用得最广泛的,教案资源最多,软件支持和硬件开发都很成熟。
世界上不同国家的很多芯片厂商都生产各种单片机,以51单片机为例,如表1-1-1所示。
表1-1-1 51单片机芯片厂商产品列表由于厂商及芯片型号比较多,我们不能一一举出,以上所提到的都是51内核扩展出来的单片机,即通常我们所说的51单片机。
1.标号信息每一块单片机上都会标有型号说明。
下面我们以如图1-1-2所示Atmel公司生产的AT89S52—24PC 0314 芯片为例,对单片机的标号信息解释如下。
图1-1-2 AT89S52—24PC 0314 芯片AT89系列单片机型号由三个部分组成,它们分别是前缀、型号、后缀,其格式为:AT89C(LV、S)XXXX—XXXX。
AT—前缀,表示该芯片为Atmel公司生产的产品。
89S52—型号,型号由89SXXXX或89CXXXX或89LVXXXX表示。
其中,8—表示该芯片为8052内核芯片。
9—表示芯片内部含Flash存储器。
S—表示该芯片含有可串行下载功能的Flash存储器,即具有ISP可在线偏程功能。
C—表示该器件为CMOS产品。
LV—表示该芯片为低电压产品(通常为3.3V电压供电)。
5—固定不变。
2—表示该芯片内部程序存储空间的大小。
1为4KB,2为8KB,3为12KB,即该数乘上4KB就是该芯片内部的程序存储空间大小。
程序空间大小决定了一个芯片所能装入执行代码的多少。
一般来说,程序存储空间越大,芯片价格也越高,所以我们在选择芯片时要根据自己硬件设备实现功能所需代码的大小来选择价格合适的芯片,只要程序能装得下,同类芯片的不同型号不会影响其功能。
24PC—后缀。
后缀由“XXXX”四个参数组成,与产品型号间用“—”隔开。
后缀中第一个参数“X”表示速度。
其中,X=12,表示速度为12MHz。
X=20,表示速度为20MHz。
X=24,表示速度为24MHz。
后缀中第二个参数“X”表示封装。
其中,X=P,表示塑料直插双列DIP封装。
X=J,表示带引线J的塑料芯片封装。
后缀中第三个参数“X”表示温度范围。
其中,X=C,表示商业用产品,温度范围为0°C~+70°C。
X=I,表示工业用产品,温度范围为-40°C~+85°C。
X=A,表示汽车用产品,温度范围为-40°C~+125°C。
X=M,表示军用产品,温度范围为-55°C~+150°C。
后缀中第四个参数“X”表示产品的处理情况。
其中,X为空,表示处理工艺是标准工艺。
X=/883,表示处理工艺采用MIL-STD-883标准。
则单片机型号为“AT89S52—24PC 0314”,表示该单片机是Atmel公司生产的,含有可串行下载功能的Flash存储器,速度为24MHz,封装为塑料直插双列DIP,是商业用产品,按标准处理工艺生产。
另外“0314”表示本批芯片生产日期为03年的第14周。
关于芯片上的标号,其他厂商大同小异,若大家还想详细了解,请上网搜索相关资料。
2.封装类型(1)DIP(DualIn-line Package)双列直插式封装DIP是指采用双列直插式封装的集成电路芯片,绝大多数中小规模集成电路(IC)均采用这种封装形式,其引脚数一般不超过100个。
采用DIP封装的CPU 芯片有两排引脚,需要插入到具有DIP结构的芯片插座上。
当然,也可以直接插在有相同焊孔数和几何排列的电路板上进行焊接,如图1-1-3所示。
图1-1-3 DIP封装图1-1-4 PLCC封装(2)PLCC(Plastic Leaded Chip Carrier)带引线的塑料芯片封装PLCC指带引线的塑料芯片封装载体,它是表面贴型封装之一,外形呈现正方形,引脚从封装的四个侧面引出,呈丁字形,是塑料制品,外形尺寸比DIP封装小得多。
PLCC封装适合用SMT表面安装技术在PCB上安装布线,具有外形尺寸小、可靠性高的优点,如图1-1-4所示。
(3)QFP(Quad Flat Package)塑料方型扁平式封装和PFP(Plastic Flat Package)塑料扁平组件式封装QFP与PFP两者可统一为PQFP(Plastic Quad Flat Package),QFP封装的芯片引脚之间距离很小,引脚很细,一般大规模或超大规模集成电路都采用这种封装形式,其引脚数一般在100个以上。
用这种形式封装的芯片必须采用SMD (表面安装设备技术)将芯片与主板焊接起来。
采用SMD安装的芯片不必在主板上打孔,一般在主板表面上有设计好的相应引脚的焊点。
PFP封装的芯片与QFP 方式基本相同,它们唯一的区别是QFP一般为正方形,而PFP既可以是正方形,也可以是长方形,如图1-1-5所示。
图1-1-5 PQFP封装3.外部引脚图1-1-6(a)、1-1-6(b)所示分别是AT89S52单片机的实物图和引脚图。
(a)AT89S52实物(b) DIP封装引脚图图1-1-6 AT89S52单片机实物与引脚图由图1-1-6可知,AT89S52的DIP封装芯片共有40个引脚,采用引脚复用技术(即一个引脚可有两种功能,一个称为第一功能,另一个称为第二功能),满足单片机引脚数目不够而功能较多的需要。
40个引脚我们按其功能类别将它们分成三类。
(1)电源和时钟引脚。
如VCC、GND、XTAL1、XTAL2。
VCC(40脚)、GND(20脚):单片机电源引脚。
不同型号单片机接入对应电源电压,常压为+5V,低压为+3. 3V,大家在使用时要查看其芯片的对应文档。
XTAL1(19脚)、XTAL2(18脚):外接时钟引脚。
XTAL1为片内振荡电路的输入端,XTAL2为片内振荡电路的输出端。
8051的时钟有两种方式,一种是片内时钟振荡方式,需在这两个引脚外接石英晶体和振荡电容,振荡电容的值一般取10P~30P,如图1-1-7所示。
另一种是外部时钟方式,即XTAL2将接地,外部时钟信号从XTAL1脚输入,如图1-1-8所示。
这种方式主要用于解决单片机系统中的同步问题。
图1-1-7 片内时钟振荡方式图1-1-8 外部时钟方式(2)I/O口引脚。
如P0、P1、P2、P3,4组8位I/O口。
P0口(P0.0~P0.7):双向8位三态I/O口,每个口可独立控制。
第一功能作为基本输入/输出,内部没有上拉电阻,为高阻状态,所以不能正常地输出高低电平,因此该组I/O口在使用时务必要外接上拉电阻,一般我们选择接入10kΩ的上拉电阻。
第二功能是为扩展系统分时提供数据总线和低8位地址总线。
P1口(P1.0~P1.7):准双向8位I/O口,内带上拉电阻,每个口可独立控制。
第一功能作为基本输入/输出,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
因为该口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可正确读出外部信号,也就是要使其先有个“准”备的过程,所以才称为准双向口。
对52单片机P1.0引脚的第二功能为T2定时器/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。
P2口(P2.0~P2.7):准双向8位I/O口,内带上拉电阻,每个口可独立控制。
第一功能作为基本输入/输出,与P1口相似。