51单片机基础知识(很重要哦)

合集下载

51单片机基础知识

51单片机基础知识

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单片机初学知识点总结

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显示屏、键盘、温度传感器等。

MCS-51单片机实验基础知识介绍

MCS-51单片机实验基础知识介绍

MCS-51单片机实验基础知识介绍一、MCS-51单片机(51子系列) (2)1. 基本结构 (2)DIP封装管脚描述 (2)存储器 (3)输入/输出口 (4)中断系统 (4)定时器/计数器(T/C) (5)2.寻址方式 (5)3.指令系统(3大类共111条) (6)指令系统介绍要点 (7)助记符、操作数形式,对标志位的影响 (7)数据传送(两个操作数、源操作数不变) (8)数据传送(堆栈操作) (8)数据传送(交换) (9)算术运算 (9)逻辑运算 (10)控制程序转移 (10)4.汇编语言程序编程 (11)简单例程 (11)伪指令 (12)指令格式 (13)程序基本格式 (13)中断服务子程序格式 (14)5.源程序编译→机器语言目标程序 (14)二.EXP-51实验板 (15)三. 接口方法 (16)实验2 ADC/DAC (17)实验3 键盘与数码显示接口 (17)实验4 串行口通信 (18)四. 单片机开发系统 (19)1.单片机的开发 (19)2.单片机开发工具、AEDK (19)3.单片机开发系统组成 (20)4.AEDK使用方法简介 (21)5.程序编辑/调试主要步骤 (21)一、MCS-51单片机(51子系列)1.基本结构DIP封装管脚描述存储器包括程序存储器(内/外64K)、内RAM和专用寄存器(SFR)内部RAM128字节工作寄存器区1-3,由程序状态字(PSW)的RS1/RS0两位定义。

专用寄存器(不包括PC)专用寄存器复位状态:除Pn(n=0,3)寄存器和SP寄存器外,其它皆为00H输入/输出口中断系统定时器/计数器(T/C)2.寻址方式3.指令系统(3大类共111条)指令系统介绍要点助记符、操作数形式,对标志位的影响其中标志C(即CY)、OV、AC,均是程序状态字PSW中的位。

数据传送(两个操作数、源操作数不变)数据传送(堆栈操作)对DPTR的堆栈操作通过PUSH DPH 和PUSH DPL两条指令完成。

51单片机学习总结(史上最全版,自己总结)

51单片机学习总结(史上最全版,自己总结)

51单⽚机学习总结(史上最全版,⾃⼰总结)单⽚机学习总结Lesson1 预备知识与点亮⼀个⼆极管⼀、预备知识与流⽔灯1、CPU ROM RAM STC I/O⼝2、电平特性:⾼与低,TTL电平:⾼+5v,低0v;RS232电平:⾼-12v,低+12v,计算机与单⽚机通讯时要加电平转换芯⽚max232(实验板上左下⾓)3、⼆进制:遇⼆进⼀;⼗六进制:⼗进制中的0-15分别表⽰为⼗六进制的0、1....9、A、B、C、D、E、F,⼀般把四个⼆进制数放在⼀起转换为⼀个⼗六进制数,转换时先把⼆进制数转换成⼗进制数,再把⼗进制数转换成⼗六进制数。

0001B>1H;1010B>AH;0010 1100>2CH(这⾥B表⽰的是⼆进制,H表⽰的⼗六进制)。

0x表⽰⼗六进制。

4、⼆进制的逻辑运算:“与”、“?”、“&”;“或”、“+”、“|”;“⾮”“A”;“异或”“⊕”,相同为0,不同为1。

按位与&,按位或|,按位异或~,按位取反~5、芯⽚缺⼝⽅向,芯⽚插反会导致短路。

⼆、80C51系列介绍1、80C51的引脚封装:总线型:有4组⾮总线型:只有20个引脚,送数据时,数据在总线上跑2、C51知识:sfr,特殊功能寄存器声明;sfr16,sfr的16位数据声明;sbit,特殊功能位声明;bit,位变量声明。

例如sfr SCON=0X98,sfr16 T2=0xCC,sbit 0V=PSW^2(第2位定义为ov)。

单⽚机都是从0开始记值。

3、C-51的运算符:4、单⽚机掌握⼏点:5、stc-isp的使⽤就德飞莱单⽚机⽽⾔,单⽚机类型为stc90c516RD+,com类型为com4,在下载程序时,⼀定要先把开发板上的电源断掉,过2秒钟再打开,顺序不能颠倒。

如果此界⾯长期没有变化,考虑以下⼏点:6、Keil的使⽤:(1)、先建⼯程,⽂件名没有后缀名,保存,选择atmel中的80c52(2)、再建⽂件,有后缀名,后缀名.c(c语⾔)或.asm(汇编语⾔)(3)、将⽂件添加在⼯程⾥,在左⽅,右击(5)、先下载程序,后打开电源(6)、注释的⽅式有两种,⼀是//,换⾏⽆效;⼆是/* */,但是注释的语句不编译。

51单片机基本知识汇总

51单片机基本知识汇总

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单片机的硬件结构1. 硬件结构框图说明:○1微处理器(CPU):51单片机含一个8位CPU,与通用的CPU功能基本相同,含运算器和控制器,不仅可以字节处理,还可以位处理。

例如:未处理、查表、状态检测、中断处理等。

○2数据存储器(RAM):51为128B,52为256B;片外最大可扩展到64K。

○3程序存储器(ROM/EPROM):8031没有,8051有4K的ROM,8751有4K的EPROM;片外可扩展至64K。

○4中断系统:5个中断源,2级优先权。

○5定时器/计数器:2个16位定时/计数器,四种工作方式。

○6串行口:1个全双工串行口,四种工作方式。

可进行串口通信,扩展并行I/O口,多机通信等。

○7P1、P2、P3、P0口:四个8位并行I/O口。

○8特殊功能寄存器(SFR):共21个,对片内部件进行管理、控制、监视;实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

2. 引脚排列(1)电源及时钟引脚○1电源引脚:Vcc(40脚)解5V电源、Vss(20脚)接地。

○2时钟引脚:两个始终引脚XTAL1、XTAL2外接晶振,或接晶体与片内反相放大器构成振荡器。

XTAL1(19脚):内部反相放大器的输入端。

若接晶振则应接地;XTAL2(18脚):内部反相放大器的输出端。

若采用外部时钟振荡器,该引脚接收时钟振荡信号。

(2)控制引脚○1RST/Vpd(9脚):复位信号输入,高电平有效。

单片机运行时,此脚持续2个机器周期(24个时钟振荡周期)的高电平,就可复位。

平时应为0.5V低电平;Vpd为第二功能,备用电源输入端。

○2:ALE为地址锁存允许,正常工作时,ALE不断输出正脉冲信号。

当访问外部存储器时,ALE输出信号的负跳变沿用作低8位地址的锁存信号;PROG’为编程脉冲输入端。

○3PSEN’(Program Strobe Enable,29脚):程序存储器允许输出控制端。

低电平是外部程序存储器选通。

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单片机的入门知识和基础操作指南。

本文将介绍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单片机知识点总结
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单片机基础知识

c51单片机基础知识

C51单片机是一种基于C语言的微控制器,具有强大的处理能力和灵活的编程特性。

以下是一些关于C51单片机的基础知识:
硬件结构:C51单片机采用冯·诺依曼结构,由运算器、控制器、存储器、输入输出设备等组成。

存储器:C51单片机内部有一个程序存储器(Flash ROM)、一个数据存储器(RAM)和一个特殊功能寄存器(SFR)。

程序存储器用于存储程序,数据存储器用于存储变量和临时数据,特殊功能寄存器用于控制各种外设和功能。

指令系统:C51单片机的指令系统类似于C语言,包括算术指令、逻辑指令、数据传输指令、程序控制指令等。

外设:C51单片机有多种外设,如定时器/计数器、串行通信接口、中断控制器、I/O端口等。

这些外设可以通过特殊功能寄存器进行配置和控制。

开发环境:C51单片机的开发环境通常包括编译器、调试器和集成开发环境(IDE)。

编译器将C语言代码转换为单片机可执行的机器码,调试器用于在单片机上进行程序调试和仿真,IDE提供了代码编写、编译、调试和下载的一体化环境。

应用领域:C51单片机广泛应用于各种嵌入式系统,如智能仪表、家电控制、通信设备、工业自动化等领域。

总之,C51单片机是一种功能强大、易于编程的微控制器,通过学习和掌握其基础知识,可以开发出各种高效的嵌入式应用系统。

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单片机基础知识 (问答题)

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单片机基础知识必备

51单片机基础知识必备

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种情况发生,会使得单片机去处理终端程序。

51单片机知识总结

51单片机知识总结

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单片机的基础知识。

第一部分: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单片机是一种经典的通用型单片机,广泛应用于嵌入式系统开发中。

入门学习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单片机的开发和应用。

51单片机的基础知识

51单片机的基础知识

MCS-51 单 片 机 基 础
EA 控 制 RST N ALE 和 指 寄 定 存 时 器 OSC
RAM
P0口锁存器
P2口锁存器
EPROM/ROM
程序地址 寄存器 栈指示器SP 缓冲器 B寄存器 TMP2 TMP1 PC值 递增器 ALU 口 PSW 器 PC
ACC
DPTR
P1口锁存器
P3口锁存器
T1
MCS-51 单 片 机 基 础
定时/计数器 定时 计数器
并行接口
串行接口
中断系统
TXD RXD
INT0 INT1
P0 P1 P2 P3
MCS-51单片机的基本结构 单片机的基本结构
湘潭大学职业技术学院 李志斌
P0.0 ~ P0.7
P2.0 ~ P2.7
P0口驱动器
P2口驱动器
RAM 地址 寄存器
湘潭大学职业技术学院 李志斌
MCS-51
湘潭大学职业技术学院
李志斌
P3口各位的第二功能
P3口引脚 口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD(串行口输入端) (串行口输入端) TXD(串行口输出端) (串行口输出端) INT0(外部中断 输入 外部中断0输入 外部中断 输入) INT1(外部中断 输入 外部中断1输入 外部中断 输入) T0(定时器0外部输入) (定时器 外部输入) 外部输入 T1(定时器 外部输入) 外部输入) (定时器1外部输入 WR(外部数据存储器写脉冲输出) (外部数据存储器写脉冲输出) RD(外部数据存储器读脉冲输出) (外部数据存储器读脉冲输出)
P1口驱动器
P3口驱动器
P1.0 ~ P1.7

51单片机基础知识

51单片机基础知识

一、单片机基础知识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单片机知识点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口、定时器和中断等硬件资源,实现与外部设备的通信和控制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章习题参考答案一、填空题:1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。

2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

3、当使用8751且EA=1,程序存储器地址小于 1000H 时,访问的是片内ROM。

4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。

5、MCS-51有4组工作寄存器,它们的地址范围是 00H~1FH 。

6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。

7、PSW中RS1 RS0=10时,R2的地址为 12H 。

8、PSW中RS1 RS0=11时,R2的地址为 1AH 。

9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第 0 组,8个寄存器的单元地址为 00H ~ 07H 。

10、PC复位后为 0000H 。

11、一个机器周期= 12 个振荡周期= 6 个状态周期。

12、PC的内容为将要执行的指令地址。

13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为 2us 。

14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为 26H 。

15、若A中的内容为63H,那么,P标志位的值为 0 。

16、8051单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW=00H 。

这时当前的工作寄存器区是第 0 工作寄存器区。

17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。

18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区和用户RAM区。

19、通过堆栈操作实现子程序调用,首先就要把 PC 的内容入栈,以进行断点保护。

调用返回时,再进行出栈保护,把保护的断点送回到 PC 。

20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC 的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为 64 KB。

21、MCS-51单片机片内RAM的寄存器共有 32 个单元,分为 4 组寄存器,每组 8个单元,以R0~R7作为寄存器名称。

22、但单片机的型号为8031/8032时,其芯片引线EA一定要接低电平。

二、选择题:1、当MCS-51复位时,下面说法正确的是( A )。

A、 PC=0000HB、 SP=00HC、 SBUF=00HD、P0=00H2、PSW=18H时,则当前工作寄存器是( D )。

A、 0组B、 1组C、 2组D、3组3、MCS-51上电复位后,SP的内容应是( B )。

A、 00HB、 07HC、 60HD、70H4、当ALE信号有效时,表示( B )。

A、从ROM中读取数据B、从P0口可靠地送出低8位地址C、从P0口送出数据D、从RAM中读取数据5、MCS—51单片机的CPU主要的组成部分为( A )。

A、运算器、控制器B、加法器、寄存器C、运算器、加法器D、运算器、译码器6、单片机上电复位后,PC的内容和SP的内容为(B)。

A、0000H,00HB、0000H,07HC、0003H,07HD、0800H,08H7、单片机8031的ALE引脚是( B )。

A、输出高电平B、输出矩形脉冲,频率为fosc的1/6C、输出低电平D、输出矩形脉冲,频率为fosc的1/28、访问外部存贮器或其它接口芯片时,作数据线和低8位地址线的是( A )。

A、P0口B、P1口C、P2口D、P0口和 P2口9、PSW中的RS1和RS0用来( A )。

A、选择工作寄存器区号B、指示复位C、选择定时器D、选择工作方式10、上电复位后,PSW的值为( D )。

A、1B、07HC、FFHD、011、单片机上电复位后,堆栈区的最大允许范围是( B )个单元。

A、64B、 120C、128D、25612、单片机上电复位后,堆栈区的最大允许范围是内部RAM的( D )。

A、00H—FFHB、00H—07HC、07H—7FHD、08H—7FH13、对于8031单片机,其内部RAM( D )。

A、只能位寻址B、只能字节寻址C、既可位寻址又可字节寻址D、少部分能位寻址14、8031 单片机若晶振频率为fosc=12MHz,则一个机器周期等于( C )µS。

A、1/12B、1/ 2C、1D、215、MCS—51单片机的数据指针DPTR是一个16位的专用地址指针寄存器,主要用来( B )。

A、存放指令B、存放16位地址,作间址寄存器使用C、存放下一条指令地址D、存放上一条指令地址16、ALU表示( D )。

A、累加器B、程序状态字寄存器C、计数器D、算术逻辑部件17、单片机上电后或复位后,工作寄存器R0是在( A )。

A、0区00H单元B、0区01H单元C、0区09H单元D、SFR18、单片机8051的XTAL1和XTAL2引脚是( D )引脚。

A、外接定时器B、外接串行口C、外接中断 D、外接晶振19、8051单片机的V SS(20)引脚是( B )引脚。

A.主电源+5V B.接地 C.备用电源 D.访问片外存贮器20、8051单片机的VCC(40)引脚是( A )引脚。

A.主电源+5V B.接地 C.备用电源 D.访问片外存贮器21、8051单片机中,输入/输出引脚中用于专门的第二功能的引脚是( D )。

A、P0B、P1C、P2D、P322、MCS—51复位后,程序计数器PC=( B )。

即程序从( B )开始执行指令。

A、0001HB、0000HC、0003HD、0023H23、MCS—51的专用寄存器SFR中的堆栈指针SP是一个特殊的存贮区,用来( C ),它是按后进先出的原则存取数据的。

A、存放运算中间结果B、存放标志位C、暂存数据和地址D、存放待调试的程序24、单片机的堆栈指针SP始终是指示( B )。

A、堆栈底B、堆栈顶C、堆栈地址D、堆栈中间位置25、MCS—51单片机复位后,专用寄存器ACC的状态是( C )。

A、0000HB、07HC、00HD、0FFH26、当程序状态字寄存器PSW状态字中RS1和RS0分别为0和1 时,系统先用的工作寄存器组为( B )。

A、组0B、组 1C、组2D、组327、8051单片机中,唯一一个用户可使用的16位寄存器是( D )。

A、PSWB、ACCC、SPD、DPTR28、8051的程序计数器PC为16位计数器,其寻址范围是( D )。

A、8KB、16KC、32KD、64K29、单片机应用程序一般存放在( B )中。

A、RAMB、ROMC、寄存器D、CPU三、判断题1、当MCS-51上电复位时,堆栈指针SP=00H。

(× ) SP=07H2、PC存放的是当前正在执行的指令。

(× )是将要执行的下一条指令的地址3、MCS-51的特殊功能寄存器分布在60H~80H地址范围内。

(× ) 80H~FFH4、在MCS-51系统中,一个机器周期等于1.5us。

(× )若晶振频率为8MHz,才可能为1.5us5、8031的CPU是由RAM和EPROM所组成。

(× ) CPU由运算器和控制器组成6、PC可以看成使程序存储器的地址指针。

(√ )7、判断以下有关PC和DPTR的结论是否正确?A、DPTR是可以访问的,而PC不能访问。

(√ )B、它们都是16位的存储器。

(√ )C、它们都有自动加“1”的功能。

(× )PC有自动加“1”的功能,而DPTR的加“1”则需通过指令INC DPTR 来完成。

D、DPTR可以分为两个8位的寄存器使用,但PC不能。

(√ )8、程序计数器PC不能为用户编程时直接使用,因为它没有地址。

(√ )9、内部RAM的位寻址区,只能供位寻址使用,而不能供字节寻址使用。

(× )位寻址区既可以供位寻址使用,又可以供字节寻址使用。

10、8031共有21个特殊功能寄存器,它们的位都是可以用软件设置的,因此,是可以进行位寻址的。

(× )特殊功能寄存器中其单元地址能被8整除的才可以进行位寻址。

11、MCS—51单片机是高档16位单片机。

(× )12、MCS—51的产品8051与8031的区别是:8031片内无ROM。

(√ )13、8051的累加器ACC是一个8位的寄存器,简称为A,用来存一个操作数或中间结果。

(√ )14、8051的程序状态字寄存器PSW是一个8位的专用寄存器,用于存程序运行中的各种状态信息。

(√ )15、MCS—51的数据存贮器在物理上和逻辑上都分为两个地址空间:一个是片内的256字节的RAM,另一个是片外最大可扩充64K 字节的 RAM。

(√ )16、单片机的复位有上电自动复位和按钮手动复位两种,当单片机运行出错或进入死循环时,可按复位键重新启动。

(√ )17、单片机的一个机器周期是指完成某一个规定操作所需的时间,一般情况下,一个机器周期等于一个时钟周期组成。

(× )18、单片机的指令周期是执行一条指令所需要的时间。

一般由若干个机器周期组成。

(√)19、单片机系统扩展时使用的锁存器,是用于锁存高8位地址。

(× )20、MCS—51单片机上电复位后,片内数据存储器的内容均为00H。

(× )21、MCS—51单片机的数据存贮器是指外部存贮器。

(× )22、MCS—51单片机的特殊功能寄存器集中布置在片内数据存贮器的一个区域中。

(√ )23、当8051单片机的晶振频率为12MHZ时,ALE地址锁存信号端的输出频率为2MHZ的方脉冲。

(√ )四、问答题1、80C51 ROM空间中,0000H~0023H有什么用途?用户应怎样合理安排?答:0000H~0023H是80C51系统专用单元,其中0000H为CPU复位地址,0003H~0023H是5个中断源中断服务程序入口地址,用户不能安排其他内容。

一般来讲,从0030H以后,用户可自由安排。

2、80C51如何确定和改变当前工作寄存器区?答:80C51是根据程序状态字寄存器PSW中工作寄存器区选择控制位RS1、RS0(PSW.4、PSW.3)来确定和改变当前工作寄存器区: RS1、RS0=00——0区(00H~07H)RS1、RS0=01——1区(08H~0FH)RS1、RS0=10——2区(10H~17H)RS1、RS0=11——3区(18H~1FH)3、简述读外ROM和读写外RAM用到的控制信号。

答:读外ROM的控制线有3条:①ALE:控制锁存低8位地址信号。

②PSEN:控制外ROM输出。

③EA:确定读外ROM。

读写外RAM控制信号分别为:①RD:控制外RAM输出。

②WR:控制外RAM输入。

相关文档
最新文档