51单片机EEPROM

51单片机EEPROM
51单片机EEPROM

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

8051单片机的内部结构

8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器(CPU)是整个单片机的核心 部件,是8位数据宽度的处理器,能处理 8位二进制数据或代码,CPU负责控制、 指挥和调度整个单元系统协调的工作,完 成运算和控制输入输出功能等操作。 ·数据存储器(RAM): 8051内部有128个8位用户数据存储 单元和128个专用寄存器单元,它们是统 一编址的,专用寄存器只能用于存放控制 指令数据,用户只能访问,而不能用于存 放用户数据,所以,用户能使用的的RAM 只有128个,可存放读写的数据,运算的 中间结果或用户定义的字型表。 ·程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 ·定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ·并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。 ·全双工串行口: 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以 用作异步通信收发器,也可以当同步移位器使用。 ·中断系统: 8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可 满足不同的控制要求,并具有2级的优先级别选择。 ·时钟电路: 8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051 单片机需外置振荡电容。

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机CPU的内部结构

51单片机CPU的内部结构 在前面的课程中,我们已知道了单片机内部有一个8位的CPU,同时知道了CPU 内部包含了运算器,控制器及若干寄存器。在这节课,我们就与大家一起来讨论一下51单片机CPU的内部结构及工作原理。 从上图中我们可以看到,在虚线框内的就是CPU的内部结构了,8位的MCS-51单片机的CPU内部有数术逻辑单元ALU(Arithmetic Logic Unit)、累加器A (8位)、寄存器B(8位)、程序状态字PSW(8位)、程序计数器PC(有时也称为指令指针,即IP,16位)、地址寄存器AR(16位)、数据寄存器DR(8位)、指令寄存器IR(8位)、指令译码器ID、控制器等部件组成。 1、运算器(ALU)的主要功能 A)算术和逻辑运算,可对半字节(一个字节是8位,半个字节就是4位)和单字节数据进行操作。 B)加、减、乘、除、加1、减1、比较等算术运算。 C)与、或、异或、求补、循环等逻辑运算。 D)位处理功能(即布尔处理器)。 由于ALU内部没有寄存器,参加运算的操作数,必须放在累加器A中。累加器A 也用于存放运算结果。 例如:执行指令 ADD A,B 执行这条指令时,累加器A中的内容通过输入口In_1输入ALU,寄存器B通过内部数据总线经输入口In_2输入ALU,A+B的结果通过ALU的输出口Out、内部

数据总线,送回到累加器A。 2、程序计数器PC PC的作用是用来存放将要执行的指令地址,共16位,可对64K ROM直接寻址,PC低8位经P0口输出,高8位经P2口输出。也就是说,程序执行到什么地方,程序计数器PC就指到哪里,它始终是跟蹿着程序的执行。我们知道,用户程序是存放在内部的ROM中的,我们要执行程序就要从ROM中一个个字节的读出来,然后到CPU中去执行,那么ROM具体执行到哪一条呢?这就需要我们的程序计数器PC来指示。 程序计数器PC具有自动加1的功能,即从存储器中读出一个字节的指令码后,PC自动加1(指向下一个存储单元)。 3、指令寄存器IR 指令寄存器的作用就是用来存放即将执行的指令代码。 在这里我们先简单的了解下CPU执行指令的过程,首先由程序存储器(ROM)中读取指令代码送入到指令寄存器,经译码器译码后再由定时与控制电路发出相应的控制信号,从而完成指令的功能。关于指令在单片机内部的执行过程,我们在后面将会以另一节课来进行详细的讲解。 4、指令译码器ID 用于对送入指令寄存器中的指令进行译码,所谓译码就是把指令转变成执行此指令所需要的电信号。当指令送入译码器后,由译码器对该指令进行译码,根据译码器输出的信号,CPU控制电路定时地产生执行该指令所需的各种控制信号,使单片机正确的执行程序所需要的各种操作。 5、地址寄存器AR(16位) AR的作用是用来存放将要寻址的外部存储器单元的地址信息,指令码所在存储单元的地址编码,由程序计数器PC产生,而指令中操作数所在的存储单元地址码,由指令的操作数给定。从上图中我们可以看到,地址寄存器AR通过地址总线AB与外部存储器相连。 6、数据寄存器DR 用于存放写入外部存储器或I/O端口的数据信息。可见,数据寄存器对输出数据具有锁存功能。数据寄存器与外部数据总线DB直接相连。 7、程序状态字PSW 用于记录运算过程中的状态,如是否溢出、进位等。 例如,累加器A的内容83H,执行: ADD A,#8AH ;累加器A与立即数8AH相加,并把结果存放在A中。 指令后,将产生和的结果为[1]0DH,而累加器A只有8位,只能存放低8位,即0DH,元法存放结果中的最高位B8。为些,在CPU内设置一个进位标志位C,当执行加法运算出现进位时,进位标志位C为1。 8、时序部件 由时钟电路和脉冲分配器组成,用于产生微操作控制部件所需的定时脉冲信号在后面的课程中我们将会安排一节课来讲解这些专用的寄存器。

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/9016126866.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/9016126866.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.360docs.net/doc/9016126866.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

51单片机模块化编程设计与实例要点分析

模块化编程设计题 一、简述模块化编程的必要性(模块化的优点) 参考答案: 大多数的编程学习者一开始接触和学习到的程序很小,代码量很少,甚至只有几十行。对于这样短小的程序进行模块化设计不是完全必要的。很多情况下程序模块化设计需要“浪费”很多时间,例如增加了代码的数量,增加了构思的时间。把所有的程序代码都写在一个main()函数中程序完全可以运行。 但是随着学习的深入,代码量的增加,将所有的代码都放在同一个.C文件中的做法越发使得程序结构混乱,虽然可以运行,但是可读性、可移植性变差。即使是自己写的程序,时间长以后对程序的阅读和修改也要花一些时间。模块化编程使得程序的组织结构更加富有层次感,立体感和降低程序的耦合度。 在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。几乎所有商用程序都必须使用模块化程序设计理念。在程序的设计过程中各个开发者分工合作,分别完成某一模块特定的功能,减少开发时间等。 二、模块化编程设计步骤 (1)、创建头文件 在模块化编程中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C 文件中,由于需要对外提供接口,因此还必须有一些函数或者是变量提供给外部其它文件进行调用。对于每一个模块都有相应的.c文件和.h文件,为了阅读调试方便,原则上.c文件和.h文件同名,如和。 (2)防重复包含 例如文件 #ifndef__DELAY_H__ #define__DELAY_H__ void delay(uint t); #endif 假如有两个不同源文件需要调用delay(uint t)这个函数,他们分别都通过#include “”把这个头文件包含了进去。在第一个源文件进行编译时候,由于没有定义过因此#ifndef__DELAY_H__条件成立,于是定义_DELAY_H_ 并将下面的声明包含进去。在第二个文件编译时候,由于第一个文件包含时候,已经将_DELAY_H_定义过了。因此#ifndef__DELAY_H__不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语句,那么两个文件都包含了delay(uint t);就会引起重复包含的错误。所以在.h文件中,为了防止出现错误都进行防重复包含。 (3)代码封装 将需要模块化的进行代码封装 头文件的作用可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里(不需要外部调用的函数不在头文件中申明),而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里(需要被外部调用的函数一定要在头文件中申明),否则,外界就无法正确的调用我们提供的接口功能。

51单片机的内部结构

51单片机的内部结构 MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、 并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: ·中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位 二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控 制输入输出功能等操作。 ·数据存储器(RAM): 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据, 所以,用户能使用的的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义 的字型表。 ·程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 ·定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ·并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。 ·全双工串行口: 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 ·中断系统: 8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

51单片机应用开发案例精选

1.发光二极管流水灯 2.交通灯控制器 3.单片机演奏音乐 4.液晶显示复杂自制图形 5.电子万年历 6.实时时钟(年月日时分秒,含定时计时) 7.液晶显示字符(PC计算发送) 8.四路抢答器 9.数字化语音存储与回放(低频) 10.数字温度传感器 11.宽带数控放大器 12.超声波测距 13.基于单片机的电压表设计 14.基于单片机的称重显示仪表设计 15.基于单片机的车轮测速系统 16.步进电机控制 17.控制微型打印机 18.简易智能电动车 19.多种模型发生器 20.相位差测试仪 21.简易红外遥控器或红外通信 22.PC与单片机通信 23.单片机间多机通信 24.无线数据传输 25.单片机实现PWM信号 26.低频信号频谱分析仪 27.单片机USB接口 28.单片机实现TCP/IP 29.单片机读写U盘 30.高精度实时时钟芯片的应用 31.SD卡读写 32.LED数码管点阵显示(支持显示10个汉字) 33.低频数字示波器 34.频率计 35.GPS系统设计(实现GPS模块接口,获取当前定位信息) 36.I2C接口(实现串行EEPROM读写) 37.键盘扩展(增加16个按键,实现队按键的控制) 38.条形码应用 51单片机应用开发案例精选 第1章51单片机开发基础 1.1单片机开发流程 1.2开发工具

1.3测试方法和工具 第2章51单片机开发入门实例 2.1点亮发光二极管实例 2.2跑马灯实例 2.3流水灯实例 2.4查0~9平方表实例 2.5受控输出实例 2.6比较输入数大小实例 2.7交通灯控制器实例 2.8蜂鸣器发音实例 2.9单片机演奏音乐实例 2.10软件陷阱实例 第3章输入和显示 3.1独立式键盘输入实例 3.2行列式键盘输入实例 3.3扫描方式键盘输入实例 3.4定时中断方式键盘输入实例 3.5LED静态显示实例 3.6LED动态显示实例 3.7实时时钟实例 3.8简单液晶显示实例 3.9液晶显示复杂自制图形实例 3.10电子万年历实例 第4章数据采集 第5章数据通信 第6章全球定位系统的设计与开发51单片机应用开发范例大全 第1章单片机C语言开发基础 1.1 MCS-51单片机硬件基础 1.1.1 8051引脚 1.1.2 51单片机功能结构 1.1.3 中央处理器(CPU) 1.1.4 存储器结构 1.1.5 定时/计数器 1.1.6 并行端口 1.1.7 串行端口 1.1.8 中断系统 1.1.9 总线 1.2 Keil mVision2 1.2.1 Keil mVision2集成开发环境介绍 1.2.2 使用Keil mVision2进行开发 1.2.3 dScope for Windows的使用

51单片机存储器内部结构

MCS-51单片机在物理结构上有四个存储空间: 1、片内程序存储器 2、片外程序存储器 3、片内数据存储器 4、片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1、片内外统一编址的64K的程序存储器地址空间(MOVC) 2、256B的片内数据存储器的地址空间(MOV) 3、以及64K片外数据存储器的地址空间(MOVX) 在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。 程序内存ROM 寻址范围:0000H ~ FFFFH 容量64KB EA = 1,寻址内部ROM;EA = 0,寻址外部ROM 地址长度:16位 作用:存放程序及程序运行时所需的常数。 七个具有特殊含义的单元是: 0000H ——系统复位,PC指向此处; 0003H ——外部中断0入口 000BH —— T0溢出中断入口 0013H ——外中断1入口 001BH —— T1溢出中断入口 0023H ——串口中断入口 002BH —— T2溢出中断入口 内部数据存储器RAM 物理上分为两大区:00H ~ 7FH即128B内RAM 和 SFR区。 作用:作数据缓冲器用。 下图是8051单片机存储器的空间结构图

程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。 MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。 当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。 当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。 8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意: 其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从

80C51单片机内部结构和工作原理

第2章80C51单片机内部结构和工作原理 本章要点 80C51系列单片机内部结构 外部引脚功能 存储空间配置和功能 片内RAM结构和功能 特殊功能寄存器的用途和功能 程序计数器PC的作用和基本工作方式 I/O端口结构、工作原理及功能 时钟和时序 复位电路、复位条件和复位后状态 低功耗工作方式的作用和进入退出的方法 §2-1 内部结构和引脚功能 一、 二、引脚功能 40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。

⒈电源: ⑴VCC - 芯片电源,接+5V; ⑵VSS - 接地端; ⒉时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊控制线:控制线共有4根, ⑴ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ①ALE功能:用来锁存P0口送出的低8位地址 ②PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 ⑵PSEN:外ROM读选通信号。 ⑶RST/VPD:复位/备用电源。 ①RST(Reset)功能:复位信号输入端。 ②VPD功能:在Vcc掉电情况下,接备用电源。 ⑷EA/Vpp:内外ROM选择/片内EPROM编程电源。 ①EA功能:内外ROM选择端。 ②Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 ⒋I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。 P3.0 ——RXD:串行口输入端; P3.1 ——TXD:串行口输出端; P3.2 ——INT0:外部中断0请求输入端; P3.3 ——INT1:外部中断1请求输入端; P3.4 ——T0:定时/计数器0外部信号输入端; P3.5 ——T1:定时/计数器1外部信号输入端; P3.6 ——WR:外RAM写选通信号输出端; P3.7 ——RD:外RAM读选通信号输出端。 §2-1 存储空间配置和功能 80C51的存储器组织结构可以分为三个不同的存储空间,分别是: ⑴64KB程序存储器(ROM),包括片内ROM和片外ROM; ⑵64KB外部数据存储器(外RAM); ⑶256B内部数据存储器(内RAM) (包括特殊功能寄存器)。 80C51存储空间配置图 一、程序存储器(ROM) 地址范围:0000H~FFFFH,共64KB。其中:

51单片机C语言程序设计经典案例

项目三C51程序设计语言基础 任务1 C51程序的识读 1.C51程序结构 例3-1 P_test /********************* //注释,还可用//注释掉一行 File name:P_test.c Chip name:STC89C51RC Clock frequency:1.20MHz ***********************/ #include “reg52.h”//预处理命令,文件包含预处理命令,后缀名都是.h,标准的MCS-51单片机头文件为”reg51.h”,STC89系列单片机头文件为”reg52.h” #define unit unsigned int //宏定义预处理命令 sbit BZ=P3`7 ; sbit key=P1`0; void delay(unit ms) { unit i; while( ms --) { for(i=0;i<120;i++); } } void main(void) { while(1) { if(key==0) { BZ=0x0; delayms(10); BZ=0x1; delayms(50); P0=0xFF; } else { P0=~P0; delayms(500); } } } 2.C51的数据类型

位变量型bit 字符型无符号字符型unsigned char 有符号字符型signed char C51的数据类型整数型无符号整数型unsigned int 基本类型有符号整数型signed int 长整数型无符号长整数型unsigned long int 有符号长整数型signed long int 实数型(浮点型)单精度浮点型float 双精度浮点型double 数组类型array 结构体类型struct 构造类型共用体union 枚举enum 指针类型 空类型(void) 表3-1 C51基本数据类型的长度和值域 类型长度/bit 长度/byte 范围 位变量型bit 1 0 ,1 无符号字符型unsigned char 8 单字节0-255 有符号字符型signed char 8 单字节-128-127 无符号整数型unsigned int 16 双字节0-65536 有符号整数型signed int 16 双字节-32768-32767 无符号长整数型unsigned long int 32 四字节 有符号长整数型signed long int 32 四字节 单精度浮点型float 32 四字节 双精度浮点型double 32 四字节 一般指针类型24 三字节 3.C51的标识符和关键字 标识符是由字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线,不超过32个字符。 表3-2 C51中的关键字 关键字用途说明 auto 存储种类声明用来声明局部变量 bdata 存储器类型说明可位寻址的内部数据存储器 break 程序语句退出最内层循环体 bit 位变量语句位变量的值是1(true)或0(flase)case 程序语句switch语句中的选择项 char 数据类型的声明单字节整数型或字符型数据

基于proteus的51单片机仿真实例六十、8位数码管显示实例

基于proteus的51单片机仿真实例六十、8位数码管显示实例 1、本例实现在8位数码管上同时显示多个不同字符。 2、本例使用了8只集成式7段共阳数码管(pruteus中元件标识为7seg-mpx8-ca-blu,共阳为ca,共阴为cc),所有8个数码管的段码引脚a,b,c,d,e,f,g,dp都是分别并联在一起,任何时候发送的段码均会传送到所有数码管上,所有的数码管的共阳极是独立的,本例中个数码管的共阳极分别与8只NPN三极管射极相连,程序运行时,任意时刻仅允许一只数码管的共阳极连接+5V,当向连接段码的端口发送段码值时,相应数字只会显示在某一只数码管上。 3、为了使不同数码管显示不同字符,本例使用的是集成式多位数码管常用的动态扫描显示技术,他利用了人的视觉暂留特征,选通第一只数码管时,发送1的段码;选通第二只数码管时,发送2的段码,...每次仅选通一只数码管,发送相应的段码,每次切换选通下一数码管并发送相应段码的时间间隔非常短,视觉惰性使人感觉不到字符是一个接一个显示在不同的数码管上的,而会觉得所有的字符很稳定的同时显示在不同数码管上。 在控制两位数码管选通的时间间隔时,要注意全屏的扫描频率要高于视觉暂留频率 16-20Hz。对于程序中的点亮一位数码管的延时时间,我们可以尝试将延时时间改为其他数值,观察会出现什么样的效果。 4、在keil c51中新建工程ex48,编写如下程序代码,编译并生成ex48hex文件 /***************************************************************************** * LED数码管显示演示程 序 * * 在8个LED数码管上依次显示 1,2,3,4,5,6,7,8 *

AT89C51单片机的基本结构

A T89C51单片机的主要工作特性: ·内含4KB 的FLASH 存储器,擦写次数1000次; ·内含28字节的RAM ; ·具有32根可编程I/O 线; ·具有2个16位可编程定时器; ·具有6个中断源、5个中断矢量、2级优先权的中断结构; ·具有1个全双工的可编程串行通信接口; ·具有一个数据指针DPTR; ·两种低功耗工作模式,即空闲模式和掉电模式; ·具有可编程的3级程序锁定定位; AT89C51的工作电源电压为5(1±0.2)V 且典型值为5V,最高工作频率为24MHz. AT89C51各部分的组成及功能: 1. 中央处理器 1.单片机的中央处理器(CPU )是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。 振荡器和时钟电路 数据存储器 128字节 程序存储器 14KB CPU 两个16位定时器 计数器 中断 控制 总线扩展控制器 并行可编程 I/O 口 可编程 串行口 内部总线 外部中断 扩展控制 P0 P1 P2 P3 RXD TXD B 寄存AC 暂存器2 暂存器1 片内ROM 地址寄存器 PC 增量器 程序计数器 指令指令定时PSEN ALE

(1)运算器 运算器主要用来实现算术、逻辑运算和位操作。其中包括算术和逻辑运算单元ALU、累加器ACC、B寄存器、程序状态字PSW和两个暂存器等。 ALU是运算电路的核心,实质上是一个全加器,完成基本的算术和逻辑运算。算术运算包括加、减、乘、除、增量、减量、BCD码运算;逻辑运算包括“与”、“或”、“异或”、左移位、右移位和半字节交换,以及位操作中的位置位、位复位等。 暂存器1和暂存器2是ALU的两个输入,用于暂存参与运算的数据。ALU的输出也是两个:一个是累加器,数据经运算后,其结果又通过内部总线返回到累加器;另一个是程序状态字PSW,用于存储运算和操作结果的状态。 累加器是CPU使用最频繁的一个寄存器。ACC既是ALU处理数据的来源,又是ALU运算结果的存放单元。单片机与片外RAM或I/O扩展口进行数据交换必须通过ACC来进行。 B寄存器在乘法和除法指令中作为ALU的输入之一,另一个输入来自ACC。运算结果存于AB寄存器中。 (2)控制器 控制器是识别指令并根据指令性质协调计算机内各组成单元进行工作的部件,主要包括程序计数器PC、PC增量器、指令寄存器、指令译码器、定时及控制逻辑电路等,其功能是控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。AT89C51单片机中,PC是一个16位的计数器,可对64KB程序存储器进行寻址。复位时PC的内容是0000H. (3)存储器 单片机内部的存储器分为程序存储器和数据存储器。AT89C51单片机的程序存储器采用4KB的快速擦写存储器Flash Memory,编程和擦除完全是电器实现。 (4)外围接口电路 AT89C51单片机的外围接口电路主要包括:4个可编程并行I/O口,1个可编程串行口,2个16位的可编程定时器以及中断系统等。 AT89C51的工作原理: 1.引脚排列及功能 AT89C51的封装形式有PDIP,TQFP,PLCC等,现以PDIP为例。 (1)I/O口线 ·P0口 8位、漏极开路的双向I/O口。 当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。在编程时,P0口可用于接收指令代码字节;程序校验时,可输出指令字节。P0口也可做通用I/O口使用,但需加上拉电阻。作为普通输入时,应输出锁存器配置1。P0口可驱动8个TTL负载。 ·P1口 8位、准双向I/O口,具有内部上拉电阻。 P1口是为用户准备的I/O双向口。在编程和校验时,可用作输入低8位地址。用作输入时,应先将输出锁存器置1。P1口可驱动4个TTL负载。 ·P2 8位、准双向I/O口,具有内部上拉电阻。 当使用外存储器或外扩I/O口时,P2口输出高8位地址。在编程和校验时,P2口接收高字节地址和某些控制信号。 ·P3 8位、准双向I/O口,具有内部上拉电阻。 P3口可作为普通I/O口。用作输入时,应先将输出锁存器置1。在编程/校验时,P3口接收某些控制信号。它可驱动4个TTL负载。 (2)控制信号线

51单片机实例(含详细代码说明)

1 ?实验任务 如图4.1.1所示:在端口上接一个发光二极管L1,使L1在不停地一亮一灭, 亮一灭的时间间隔为秒。 2. 电路原理图 图 4.1.1 3. 系统板上硬件连线把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上 4. 程序设计内容 (1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行 某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢下面具体介绍其原理: 1 ?闪烁灯 13 FO OJADQ FO 1 /AD] FO.2/AD2 FCi 3j*AOTi PO 4/AE>4 FtJ.6fAO& i^U.7/AD7 五尿5¥尸二 7/Jk 1 J5 尸N G/-A 1 ■* J - i/JL U P2 /IfA 1 J RZ W 1 1 g 3劇in P3 L/A91 F3 G/AH F-Ji CJ/I2CD I rTZK G pj 3/1H T1 P^JS/T 1 £/暫冠 理 监 居 . ■ V 11111111 PPP沪厂JLH甘 r3Hb

如图4.1.1所示的石英晶体为12MHz因此,1个机器周期为1微秒机器周期微秒 = ___________ ___________ MOV R6,#20 2 个2 L ______ D1: MOVR7,#248 2 个2 2+ 2X 248= 498 20X =— DJNZ R7,$ 2 个2X 248 (498 DJNZ R6,D1 2 个2X 20= 40 10002 因此,上面的延时程序时间为。 由以上可知,当R6= 10、R7= 248时,延时5ms R6= 20、R7= 248时, 延时10ms,以此为基本的计时单位。如本实验要求秒=200ms 10m X R5 =200ms贝U R5= 20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET

51单片机应用实例小制作

51单片机应用实例小制作16x16点阵显示屏、蜂鸣器、独立键盘 制作:赵建业 2016/12/1

原理图(芯片)

功能说明: 1、通电后进入问候界面。 2、四个按键(实时有效): 1> GIF :按下后进入动画显示模式。 2> WORLD :按下后进入文字显示模式。 3> MUSIC :按下后进入音乐模式,由于51硬件限制,暂时不能同时显示16x16点阵。 4> NEXT :按下后,切换当前模式的下一个内容。为循环播放。 3、滑动变阻器:音乐模式下调节音量大小。 注意事项: 1、程序代码由于在world 中保存格式原因,复制到编译软件后可能会出现错误。或可以向本人索要源代码。 2、由于本程序内容较多,占用内存较大,89c51的内存放不下,因此需要用89c52或更高版本芯片。它们只是内存大小不容。 原理图(16x16LED 点阵)

程序代码: main.c #include #include #include"yinfu.h" //自定义音符头文件 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define KEY P2 sbit sound=P1^6; sbit MOSIO = P1^0; sbit R_CLK = P1^1; sbit S_CLK = P1^2; unsigned char Keymun1,Keymun2;//存按键序号 unsigned char Keystay;//按键状态,有按键按下为1,无按键按下为0 unsigned int C; unsigned char x,y; uchar code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00}; uchar code hi[]={ 0,0,0,0,0,0,3,12,2,12,2,0,2,0,58,14,70,8,66,8,66,8,66,8,66,8,231,62,0,0,0,0 };//开机问候语:“hi” uchar code jif1[22][32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,192,3,64,2,64,2,192,3,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,224,7,32,4,160,5,160,5,32,4,224,7,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,240,15,16,8,208,11,80,10,80,10,208,11,16,8,240,15,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,248,31,8,16,232,23,40,20,168,21,168,21,40,20,232,23,8,16,248,31,0,0,0,0,0,0, 0,0,0,0,252,63,4,32,244,47,20,40,212,43,84,42,84,42,212,43,20,40,244,47,4,32,252,63,0,0,0,0, 0,0,254,127,2,64,250,95,10,80,234,87,42,84,170,85,170,85,42,84,234,87,10,80,250,95,2,64,254,127,0,0, 255,255,1,128,253,191,5,160,245,175,21,168,213,171,85,170,85,170,213,171,21,168,245,175,5,160,253,191,1,128,255,255, 128,1,128,1,128,1,128,1,128,1,128,1,128,1,255,255,255,255,128,1,128,1,128,1,128,1,128,1,128,1,128,1, 1,128,3,192,6,96,12,48,24,24,48,12,96,6,192,3,128,1,192,3,96,6,48,12,24,24,12,48,6,96,3,192, 128,1,128,1,128,1,128,1,128,1,128,1,128,1,255,255,255,255,128,1,128,1,128,1,128,1,128,1,128,1,128,1, 1,128,3,192,6,96,12,48,24,24,48,12,96,6,192,3,128,1,192,3,96,6,48,12,24,24,12,48,6,96,3,192, 128,1,128,1,128,1,128,1,128,1,128,1,128,1,255,255,255,255,128,1,128,1,128,1,128,1,128,1,128,1,128,1, 1,128,3,192,6,96,12,48,24,24,48,12,96,6,192,3,128,1,192,3,96,6,48,12,24,24,12,48,6,96,3,192, 128,1,128,1,128,1,128,1,128,1,128,1,128,1,255,255,255,255,128,1,128,1,128,1,128,1,128,1,128,1,128,1, 64,2,64,2,64,2,64,2,64,2,64,2,127,254,0,0,0,0,127,254,64,2,64,2,64,2,64,2,64,2,64,2, 32,4,32,4,32,4,32,4,32,4,63,252,0,0,0,0,0,0,0,0,63,252,32,4,32,4,32,4,32,4,32,4,

相关文档
最新文档