1 单片机定义与结构
1.1 什么是单片机
单板机:将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。单板机的I/O设备简单,软件资源少,使用不方便。早期主要用于微型计算机原理的教学及简单的测控系统,现在已很少使用。
单片机:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 Intel公司推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。
1.2 单片机的内部结构
单片机内部结构示意图如下图所示,它由微处理器CPU、随机存取存储器RAM、只读存储器ROM、基本输入/输出(I/O)接口电路、定时器/计数器和中断系统等部件组成,并把它们制作在一块大规模集成电路芯片上,就构成一个完整的单片微型计算机。
1.3 51单片机标识信息
通常我们所说的51单片机是指以51内核扩展出的单片机。生产51单片机的厂商很多,51单片机的型号也很多。下表列出了一些51单片机的厂商和型号。
以上提到的单片机都是51内核扩展出来的单片机,只要学会了51单片机的应用,这些单片机也就基本都能使用了。单片机都是相通的,不管是51单片机还是其它单片机,都是用户编程控制来实现一定的功能。
2 51单片机外部引脚介绍
2.1 标识解释
STC-----前缀,表示芯片为STC公司生产的产品。其他前缀还有如AT,i,Winbond,SST等。
8---------表示该芯片为8051内核芯片。
9---------表示内部含Flash E^2PROM储存器。还有如80C51中的0表示内部含Mask ROM(掩模ROM)存储器;如87C51中7表示内部含ERPOM存储器(紫外线可擦除ROM)。
C--------表示该器件为CMOS产品。还有如89LV52和89LE58中的LV和LE都表示该芯片为低电压产品(通常为3.3V供电);而89S52中的S表示该芯片含有可串行下载功能的Flash存储器,即具有ISP可在线编程功能。
5---------固定不变。
1---------表示该芯片内部程序存储空间的大小,1为4KB,2为8KB,3为12KB,即该数乘上4KB就是芯片内部程序存储空间大小。
40--------表示该芯片外部晶振最高可接入40MHz。对AT单片机数值一般为24,表示其外部晶振最高为24MHz。
C---------产品级别,表示芯片使用温度范围。C表示商业级,温度范围为0℃~+70℃。
芯片上标号对应温度范围
PDIP---产品封装型号PDIP表示双列直插式。
0707---表示本批芯片生产日期为07年第7周。
CU8138.00D-----不详。
2.2 区分芯片引脚号
首先找到单片机表面凹进去的小圆坑,或这个使用颜色标识的小标记(圆点或三角或其他小图形),这个小圆坑或者小标记所对应的引脚就是这个芯片的第1引脚,然后逆时针方向数下去。
按照上图为例介绍单片机各个引脚的功能(40个引脚):
① 电源和时钟引脚。如Vcc、GND、XTAL1、XTAL2(需掌握)
VCC(40脚)、VSS(20脚)—单片机的电源引脚,不同型号的单片机需要接入对应的电源电源电压。开发板上配带的单片机的供电电压为5V,低压单片机的电压为3.3V,用户在使用时要查看芯片手册,确保接入正确的电压。
XTAL1(19脚)、XTAL2(18脚)—外部时钟引脚,XTAL1为内部振荡电路的输入端,XTAL2为内部振荡电路的输出端。8051的时钟有两种振荡方式,一种是片内时钟振荡方式,需要在这两个引脚上外接石英晶体和振荡电容,振荡电容的值一般为10pf~30pf;另一种是外部时钟方式,需要将XTAL1接地,外部时钟信号由XTAL2脚输入。
② 编程控制引脚。如RST、PSEN、ALE/PROG、EA/VPP,了解即可。
RST(9脚)—单片机复位引脚。当输入连续两个机器周期以上为高电平时为有效,用来完成单片机的复位初始化操作,复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码,通俗的讲,就是单片机从头开始执行程序。
PSEN(29脚)—程序存储器允许输出控制端。在读外部程序存储器时PSEN低电平有效,以实现外部程序存储器单元的读操作,由于现在我们使用的单片机内部已经有足够大的ROM,所以几乎没有人再去扩展外部ROM,因此这个引脚大家只需了解即可。
ALE/PROG(30脚)—在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。ALE有可能是高电平也可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号会跳变(即由正变负)将P0口上低8位地址信号送入锁存器;当ALE是低电平时,P0口上的内容和锁存器输出一致。关于锁存器的内容,我们后面会有详细介绍。在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器时,以1/12振荡周期输出(即12分频)。从这里可以看到,当系统没有进行扩展时,ALE会以1/6振荡周期的固定频率输出,因此可以作为外部时钟,或作为外部定时脉冲使用。PROG为编程脉冲的输入端,单片机的内部有程序存储器(ROM),它的作用是用来存放用户需要执行的程序,那么我们怎样才能将写好的程序存入这个ROM中呢?实际上,我们是通过编程脉冲输入才写进去的,这个脉冲的输入端口就是PROG。现在有很多单片机都已经不需要编程脉冲引脚往内部写程序了,比如我们用的STC单片机,它可以直接通过串口往里面写程序,只需要三条线与计算机相连即可。而且现在的单片机内部都已经带有丰富的RAM,所以也不需要再扩展RAM了,因此ALE/PROG这个引脚的用处也已经不大。
EA(31脚)— EA接高电平时,单片机读取内部程序存储器。当扩展有外部ROM时,当读取完内部ROM后自动读取外部ROM。EA接低电平时,单片机直接读取外部ROM。8031单片机内部是没有ROM的,所以在使用8031单片机时,这个引脚是一直接低电平的。8751单片机烧写内部EPROM时,利用此引脚输入21V的烧写电压。因为现在我们用的单片机都有内部ROM,所以一般在设计电路时此引脚始终接高电平。
③ I/O口引脚。如P0、P1、P2、P3、,4组8位I/O(需掌握)
P0口(32脚~39脚)—双向8位三态I/O口,每个口可独立控制。51单片机P0口内部没有上拉电阻,为高阻状态,所以不能正常地输出高/低电平,因此该组I/O口在使用时务必要外接上拉电阻,一般我们选择接入10k欧的上拉电阻。
P1口(1脚~8脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。之所以称它为“准双向”是因为该口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可正确读出外部信号,也就是要使其先有个“准”备过程,所以才称为准双向口。单片机P1.0引脚的第二功能为T2定时器/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。
P2口(21脚~28脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,与P1口相似。
P3口(10脚~17脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,作为第一功能使用时就当做普通I/O口,与P1口相似,作为第二功能使用时,各引脚的定义如下表所示。值得强调的是,P3口的每一个引脚均可独立定义为第一功能的输入/输出或第二功能。
3 电平特性
数字电路中只有两种电平:高电平和低电平
单片机为TTL电平:
高电平:5V或者3.3V,取决单片机电源。
低电平:0V
计算机串口的RS232电平:
高电平:-12V
低电平:+12V
所以当我们用单片机跟电脑通信的时候,我们要通过各种元器件将单片机的电平转换为计算机可识别的电平才能跟电脑进行通信。
4 二进制逻辑运算
① 按位取反: ~ 每一位上的0和1互换;
② 左移: << 左移运算运算符左边是移位对象,右边是整型表达式,代表左移的位数。左移时,右端(低位)补0;左端(高位)移出的部分舍弃。
③ 右移: >> 右移时,右端(低位)移出的二进制舍弃,左端(高位)移入的二进制分两种情况:对于无符号整数和正整数,高位补0;对于负数,高位补1。
short int a =-8,b;
b=a>>2;
//a的二进制码:1111111111111000
//移位后 :1111111111111110
④ 按位与: & 全1为1,其它为0;
⑤ 按位异或: ^ 不同为1,其它为0;
⑥ 按位或: | 有1为1,其它为0;
5 单片机的基础知识介绍
5.1 80C51系列介绍
80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。当前常用的80C51系列单片机主要产品有:
①Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;
②ATMEL的:89C51、89C52、89C2051等;
③Philips、华邦、Dallas 、STC、Siemens(Infineon)等公司的许多产品 。
80C51的引脚封装
P3口第二功能各引脚功能定义
总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data Bus), 地址总线 AB(Address Bus)和控制总线 CBControl Bus)。
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。
5.2 单片机工作的基本时序
机器周期和指令周期
①振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,我们开发板上为12MHZ。
②状态周期: 每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。
③机器周期: 一个机器周期包含 6 个状态周期S1~S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。
④指令周期: 它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。
5.3 利用C语言开发单片机
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。
一个简单的单片机C程序要有什么?
#include void main() //程序主函数 { while(1) { } } C-51的基本语句 if-else语句: //如果表达式的值为真(非0),则执行语句1,否则执行语句2 if(表达式) {语句1;} else {语句2;} while语句: //while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。 while(表达式) {语句;} do-while 语句: //这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。 do {语句;} while(表达式); for语句: //它的执行过程如下: //1)先求解表达式1。 //2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。 //3)求解表达式3。 //4)转回上面第2)步继续执行。 //循环结束,执行for语句下面的一个语句。 for(表达式1;表达式2;表达式3) {语句} switch语句: //其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。 switch(表达式) { case常量表达式1:语句1; case常量表达式2:语句2; … case常量表达式n:语句n; default :语句n+1; } 函数的定义: 返回变量类型 函数名(输入变量类型) { 函数体; } unsigned char read(unsigned char addr) { unsigned char dat; //定义一个变量存放返回值 (do anything you want); //函数中的程序。 return dat; //返回函数的返回值 } 函数的调用:在函数调用之前要在主函数前面加入上该函数的声明。(或者你可以放在头文件里面,包含该头文件时,就可以声明了。) 5.4 C51中的基本数据类型 大家在 C 语言的书籍上还能看到有short int, long int, signed short int 等数据类型, 在单片机的C 语言中我们默认的规则如下: short int 即为 int, long int 即为 long, 前面若无 unsigned 符号则一律认为是 signed 型。 5.5 C51 数据类型扩充定义 单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般我们会根据寄存器功能的不同给寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这样编译器在以后的程序中才可认知这些名称所对应的寄存器。对于大多数初学者来讲, 这些寄存器的声明已经完全被包含在 51 单片机的特殊功能寄存器声明头文件 " reg51.h" 中了, 初学者若不想深入了解,完全可以暂不操作它。 ①sfr—(sfr 变量名=地址值;)—特殊功能寄存器的数据声明,声明一个8位的寄存器。 ②sfr16—(sfr16 变量名=地址值;)—16位特殊功能寄存器的数据声明。 ③sbit—(sbit 变量名=地址值;)— 特殊功能位声明, 也就是声明某一个特殊功能寄存器中的某一位。 ④bit—(bit 变量名=地址值;)—位变量声明,当定义一个位变量时可使用此符号。 sfr SCON = Ox98; SCON 是单片机的串行口控制寄存器, 这个寄存器在单片机内存中的地址为 Ox98 。 这样声明后 , 我们在以后要操作这个控制寄存器时, 就可以直接对 SCON 进行操作, 这时编译器也会明白 , 我们实际要操作的是单片机内部Ox98 地址处的这个寄存器,而 SCON 仅仅是这个地址的一个代号或是名称而已,当然,我们也可以定义成其他的名称。 sfr16 T2 = OxCC; 声明一个16位的特殊功能寄存器, 它的起始地址为 OxCC 。 sbit TI =SCON^1; SCON 是一个 8 位寄存器, SCON ^ 1 表示这个 8 位寄存器的次低位, 最低位是 SCON^O;SCON^7 表示这个寄存器的最高位。该语句的功能就是将 SCON 寄存器的次低位声明为 TI,以后若要对 SCON 寄存器的次低位操作, 则可直接操作 Tl。 5.6 C51 常用到的一些预处理命令 #define: #define A P0(注意后面不用加分号) #typedef: typedef unsigned char uint;(后面要加分号) 重新定义一些常用的关键词,可以增强程序的可移植 性,因为在不同的编译软件上面,C语言的数据类型 的关键词的位宽是不一样的。 #ifndef…#endif:
上一篇:STC51-Keil使用及流水灯设计
下一篇:《初学者C51自学笔记》之定时器四种工作方式(二)
推荐阅读最新更新时间:2024-11-13 11:01
设计资源 培训 开发板 精华推荐
- 适用于ST25DV04K双接口EEPROM的14 mm x 14 mm双层天线参考板
- LTM4648IY 3.3V 至 5V Vin、2.5Vout at 8A 设计的典型应用电路,频率增加 650kHz
- 温湿度控制器
- KEA128和MC10XS3425照明控制和电子开关
- 使用 LatticeECP3 视频协议板和 HDMI 夹层卡的 HDMI/DVI 视频接口参考设计
- FE1.1s-USB一拖四集线器
- 步进电机驱动器将L6474安装在大功率PowerSO封装中
- LT6654BHS6-4.096 具有升压输出电流和电流限制的电压基准的典型应用
- AD5313 双轨至轨电压输出、10 位 DAC 的典型应用
- LT1085CT-12、12V/7.5A 并联低压差稳压器的典型应用电路