单片机基础教程 一、单片机概念 1、单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。 CPU( Central Processing Unit ):由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM( Random-Access Memory ):用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据; ROM (Read-Only Memory):用以存放程序、一些原始数据和表格; I/O(input/output)口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C (timer/counter):两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式; Intel公司1980年推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。 80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。 主要的80C51单片机 Intel:80C31、80C51、80C32、80C52、87C52 ATMEL:AT89C51、AT89C52、AT89C2051等; STC:89C51、89C52、90C51、STC15w Philips:P80C54、P80C58、P87C54 华邦:W78C54、W78C58、W78E54 Siemens:C501-1R、C513A-H 等公司的许多产品 。 芯片封装简介 单片机用途 凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,80C51,arm等 工业自动化:数据采集、测控技术。 智能仪器仪表:数字示波器、数字信号源、数字万用表、感应电流表等。 消费类电子产品:洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。 通讯方面:调制解调器、程控交换技术、手机、小灵通等。 武器装备:飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。
电平特性 数字电路中只有两种电平:高和低 单片机为TTL电平: 高 +5V 低 0V RS232电平:计算机的串口 高 -12V 低+12V 所以计算机与单片机之间通讯时需要加电平转换芯片max232等其他芯片 二进制 数字电路中的两种电平特性决定了它使用二进制运算
十进制 |
十六进制 |
二进制 |
十进制 |
十六进制 |
二进制 |
0 |
0x0 |
0000 |
1 |
0x1 |
0001 |
2 |
0x2 |
0010 |
3 |
0x3 |
0011 |
4 |
0x4 |
0100 |
5 |
0x5 |
0101 |
6 |
0x6 |
0110 |
7 |
0x7 |
0111 |
8 |
0x8 |
1000 |
9 |
0x9 |
1001 |
10 |
0xA |
1010 |
11 |
0xB |
1011 |
12 |
0xC |
1100 |
13 |
0xD |
1101 |
14 |
0xE |
1110 |
15 |
0xF |
1111 |
二进制逻辑运算 逻辑变量 : 只有两个:“0”(假)和“1”(真)。 逻辑“与”(逻辑乘)运算L=A·B 或者 L=A∧B “与”的运算法则为: 0·0=0 , 0·1=0 , 1·0=0 , 1·1=1 A·0=0,A·1=A,A·A=A 逻辑“或”(逻辑加)运算L=A+B 或者 L=A∨B “或”的运算法则为: 0+0=0 , 0+1=1 1+0=1 , 1+1=1 A+0=A ,A+1=1 ,A+A=A 逻辑“非”(逻辑取反)运算L= A “非”的运算法则为: 0 = 1 ,1 = 0 A + A = 1 , A·A = 0 ,A = A “异或” 其运算规则是: C语言基本数据类型 基本语法 变量定义 数据类型 变量名 int num1; double num2 = 2; unsigned short num3; if()语句 if(条件){分支} if(条件){分支1}else{分支2} if(x>=0) { y=y/2; } else { y=y*x; } while()语句 while(条件){循环体} while(i<10) { s+=k; } for()语句 for(表达式1;条件2;表达式3){循环体} for(i=0;x!=y;j++) { z/=3; } 函数定义 数据类型 函数名(形参列表){函数体} int add(int num1,int num2) { return num1+num2; } 三、80C51引脚简介 1. 电源引脚:Vcc (40脚):电源端,接+5V电源。 Vss(Gnd) (20脚):接地端,接+5V电源地端 2. 外接晶体引脚:XTAL1和XTAL2 89C51内部有一个振荡器和时钟产生电路。 XTAL1(19脚): 片内振荡电路反相放大器输入 XTAL2(18脚):片内振荡电路反相放大器输出 当采用内部时钟时,片外连接石 英晶体和微调电容,产生原始 的振荡脉冲信号。 采用外部时钟时, XTAL1输入 外部时钟脉冲信号, XTAL2悬空. 3. 控制信号引脚:RST、ALE、PSEN、EA RST (9脚) : 复位信号输入端,高电平有效。 保持两个机器周期高电平时,完成复位操作。 ALE/PROG (30脚) : 地址锁存允许输出端/编程脉冲输入端 正常时,连续输出振荡器频率的1/6正脉冲信号。 访问片外存储器时: 作为锁存P0口低8位地址的控制信号。 对8751片内 ROM编程写入时:作为编程脉冲输入端。 PSEN (29脚): 外部程序存储器读选通输出信号 访问片外ROM时,输出负脉冲作为读ROM选通. 常连接到片外ROM芯片的输出允许端(OE)作外部ROM的读选通信号。 EA/Vpp (31脚): 外部程序存储器地址使能输入/编程电压输入端. 平常,接“1”时,CPU访问片内4KB的ROM,当地址超4KB时,自动转向片外ROM中的程序。当接“0”时,CPU只访问片外ROM。 第2功能Vpp 对8051编程时,编程电压输入端。 4. 输入/输出端口引脚 P0、P1、P2、P3 4个8位的并行输入/输出端口,共32个引脚。作为通用输入/输出端口
准双向口: 作输入时要先对锁存器写“1”。默认启动初始化为高电平 P0端口(P0.0—P0.7,第39—32脚): 漏极开路的准双向口, 内部没有上拉电阻,为搞阻状态,不能正常输出高低电平,做I/O时需要接上拉电阻(10K) P1端口(P1.0—P1.7,第1—8脚): 内部带上拉电阻的准双向口,在做输入时要先1 P2端口(P2.0—P2.7,第21—28脚): 内部带上拉电阻的准双向口,与P1相似 P3端口(P3.0—P3.7,第10—17脚): 内部带上拉电阻的准双向口,做I/O时与P1相似,另外有第二功能 P3口的第二功能
Proteus 软件是由英国 Labcenter Electronics 公司开发的EDA(Electronic Design Automation)工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus 软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计与分析,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩,是近年来备受电子设计爱好者青睐的一款新型电子线路设计与仿真软件。 在Proteus中,从原理图设计、单片机编程、系统仿真到PCB设计一气呵成,真正实现了从概念到产品的完整设计。 主要功能 ISIS——智能原理图输入系统,系统设计与仿真的基本平台。 ARES ——高级PCB( Printed Circuit Board)布线编辑软件 VSM(虚拟仿真模式) 交互式仿真—— 实时直观地反映电路设计的仿真结果; 基于图表的仿真(ASF)—— 用来精确分析电路的各种性能,如频率特性、噪声特性等。 工具箱中各图标按钮对应的操作如下 库元件的分类 1. 大类(Category) 在左侧的“Category”中,共列出了以下几个大类 要从库中拾取一个元件时,首先要清楚它的分类是位于哪一类,然后在打开的元件拾取对话框中,选中“Category”中相应的大类 2子类(Sub-category) 选取元件所在的大类(Category)后,再选子类(Sub-category),也可以直接选生产厂家(Manufacturer),这样会在元件拾取对话框中间部分的查找结果(Results)中显示符合条件的元件列表。从中找到所需的元件,双击该元件名称,元件即被拾取到对象选择器中去了。如果要继续拾取其他元件,最好使用双击元件名称的办法,对话框不会关闭。如果只选取一个元件,可以单击元件名称后单击“OK”按钮,关闭对话框。如果选取大类后,没有选取子类或生产厂家,则在元件拾取对话框中的查询结果中,会把此大类下的所有元件按元件名称首字母的升序排列出来 各子类介绍 1. Analog ICs 模拟集成器件共有8个子类 2.Capacitors 电容共有23个分类 3. CMOS 4000 series CMOS 4000系列数字电路共有16个分类 4. Connectors 接头共有8个分类 5. Data Converters 数据转换器共有4个分类 6. Debugging Tools 调试工具数据共有3个分类 7. Diodes 二极管共有8个分类 8. Inductors 电感共有3个分类 9. Laplace Primitives 拉普拉斯模型共有7个分类 10. Memory ICs 存储器芯片共有7个分类 11. Microprocessor ICs 微处理器芯片共有13个分类 12. Modelling Primitives 建模源共有9个分类 13. Operational Amplifiers 运算放大器共有7个分类 14.Optoelectronics 光电器件共有11个分类 15.Resistors 电阻共有11个分类 16.Simulator Primitives 仿真源共有3个分类 17.Switches and Relays 开关和继电器共有4个分类 18. Switching Devices 开关器件共有4个分类 19.Thermionic Valves 热离子真空管共有4个分类 20.Transducers 传感器共有2个分类 21.Transistors 晶体管共有8个分类 五.编译软件Keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要Windows操作系统。使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 C51 有以下扩展关键字(共21个): _at_ alien bdata bit code compact data far idata interrupt large pdata _priority_ reentrant sbit sfr sfr16 small _task_ using xdata 常用关键字说明 sfr:sfr用来定义特殊功能寄存器 sfr16:定义一个16位的特殊功能寄存器 sbit:定义一个特殊功能寄存器的某一位 bit:定义位变量 code: 指定存储位置位于程序存储器 interrupt:声明中断服务程序 using:指定的寄存器组 扩展函数 需要包含intrins.h头文件 常用函数 _irol_、_iror_ 对unsigned int数循环左移、右移 _lrol_、_lror_ 对unsigned long数循环左移、右移 _crol_、_cror_对unsigned char数循环左移、右移 六、点亮第一个LED灯 LED发光二极管一般压降为1.7 V 电流3mA即可点亮,因此串联1K电阻限流限压,长脚的为正极。 D1点亮 p1.0设置为低电平,有电流流过,二极管发光 D2不亮 p1.1默认为高电平,没有点亮流过,二极管不会发光 仿真时 红色代表高电平,蓝色代表低电平,灰色代表高阻态
一、80c51的最小应用系统 电源+5v 3V接C6 (104 为10 *104 0.1uF)和C5(10uF)提高抗干扰性 复位电路外部RST引脚复位就是从外部向RST引脚施加一定宽度的复位脉冲,从而实现单片机的复位。将RST复位管脚拉高并维持至少24个时钟加10us后,单片机会进入复位状态,将RST复位管脚拉回低电平后,单片机结束复位状态并从用户程序区的0000H处开始正常工作。 当系统上电时,电容充电会给rst引脚高电平,等电容稳定后将没有电流流过. 振荡电路 振荡频率越高表示单片机运行速度越快,但同时对存储器的速度和印刷电路板的要求也就越高。如同木桶原理。同时单片机性能的好坏,不仅与CPU运算速度有关,而且与存储器的速度、外设速度等都有很大关系。因此一般选用6~12MHZ。并联谐振电路对电容的值没有严格要求,但会影响振荡器的稳定、振荡器频率高低、起振快速性等。一般根据手册说明选定. 二、下载程序到stc90c51单片机 三、单片机工作的基本时序 (1) 振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,常用12MHZ,11.0592MHZ。 (2) 状态周期: 每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。 (3) 机器周期: 一个机器周期包含 6 个状态周期S1~S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。 (4) 指令周期: 它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。 四、简单的软件延时 使用keil查看程序执行时间 延时100ms函数 延时1s闪烁 流水灯设计 从上到下每隔500ms依次点亮 P0口上拉电阻 P0口是开路漏极只能输出低电平,不能正常输出高电平。所以做I/O时需要加上拉电阻 每隔500ms依次点亮其中一个 来回依次循环点亮一个led 加减速流水灯 花样流水灯 利用_crol_、_cror_实现流水灯 多I/O口的流水灯 第三节、数码管和定时器 显示器及其接口 单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。 LED数码显示方式及电路 使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。 静态显示方式 LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。 数码管编码表 动态显示 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 共阴时数码管位选低电平有效,共阳时送高电平。 定时器和计数器 定时/计数器的结构和工作原理 一、定时/计数器的结构 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。 加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 可见,由溢出时计数器的值减去计数器初值才是加1计数器的计数值。 设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。 设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。 定时器存储寄存器 TCON—定时器控制寄存器的位分配(地址0x88、可位寻址) TCON——定时器控制寄存器的位描述 TMOD—定时器模式寄存器的位分配(地址0x89、不可位寻址) TMOD——定时器模式寄存器的位描述 TMOD——定时器模式寄存器M1/M0工作模式 IE—中断使能寄存器的位分配(地址0xA8、可位寻址) IE—中断使能寄存器的位描述 IP—中断优先级寄存器的位分配(地址0xB8、可位寻址) IP—中断优先级寄存器的位描述 使用定时器的方法 第一:设置特殊功能寄存器TMOD,配置好工作模式。 第二:设置计数寄存器TH0和TL0的初值。 第三:设置IE中断允许位 第四:设置TCON,通过TR0置1来让定时器开始计数。 第五:判断TCON寄存器的TF0位,监测定时器溢出情况。 第四节、按键检测、中断系统 一、键盘的分类 键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘;在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。 非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。 独立按键原理 按键检测方法 先给I/O口写入1,输出高电平,当按键按下时,读相应端口为0低电平时表示按键按下 P0 = 0xff;//写入1 if(P0 == 0xfe) { //P0.0按键按下 } 矩阵按键变独立按键 矩阵键盘检测使用行列扫描的办法,当keyOut输出高电平,再给keyIn某列送低电平其他送高电平从而确定列,然后检测keyOut那行为低电平确定行,行列确定即可确定那个按键按下。 按键在闭合和断开时,触点会存在抖动现象: 按键消抖方法
2、检查01的连续性 单片机中断系统 引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。 随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点: 分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率; 实时响应:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强; 可靠性高:CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。 80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。 (P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。 (P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。 RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。 IT0(TCON.0),外部中断0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 IE0(TCON.1),外部中断0中断请求标志位。 IT1(TCON.2),外部中断1触发方式控制位。 IE1(TCON.3),外部中断1中断请求标志位。 TF0(TCON.5),定时/计数器T0溢出中断请求标志位。 TF1(TCON.7),定时/计数器T1溢出中断请求标志位。 中断允许控制,CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。 EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位; EA (IE.7), CPU中断允许(总允许)位。 80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。 PX0(IP.0),外部中断0优先级设定位; PT0(IP.1),定时/计数器T0优先级设定位; PX1(IP.2),外部中断0优先级设定位; PT1(IP.3),定时/计数器T1优先级设定位; PS (IP.4),串行口优先级设定位; PT2 (IP.5) ,定时/计数器T2优先级设定位。 同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示: 80C51单片机的中断优先级有三条原则:
- CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
- 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
- 正在进行的低优先级中断服务,能被高优先级中断请求所中断。
为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。 80C51单片机中断处理过程 中断响应条件和时间 中断源有中断请求; 此中断源的中断允许位为1; CPU开中断(即EA=1)。 以上三条同时满足时,CPU才有可能响应中断。 第五节、串口通信 计算机串行通信基础 随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。 并行通信:通信时数据的各个位同时传送,可以实现字节为单位通信,但是通信线多占用资源多,并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 串行通信:将数据字节分成一位一位的形式在一条传输线上逐个地传送。一次只能发送一位,要发送8次才能发送一个字节。 串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 RS232通信接口 1、载波检测DCD 2、接收数据RXD 3、发送数据TXD 4、数据终端准备好DTR 5、信号地线 6、数据准备好DSR 7、请求发送RTS 8、清除发送CTS 9、振铃提示RI TTL/CMOS电平标准:高电平‘1’ >2.x V 低电平'0' <0.x V 232电平标准: 高电平‘1’ > -3V ~ -15V 低电平'0' < +3V~ +15V USB转串口通信 串行通信的基本概念 异步通信与同步通信 1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。 异步通信的数据格式 : 异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。 串行通信的错误校验 1、奇偶校验 在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。 2、代码和校验 代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。
这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。 传输速率与传输距离 1、传输速率 比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:10位×240个/秒 = 2400 bps 2、传输距离与传输速率的关系 串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关。当传输线使用每0.3m(约1英尺)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。 三种基本通信类型 单工通信:只允许一方向另外一方传送信息,另一方不能回传信息,比如电视遥控器、收音机广播等。 半双工通信:数据可以在双方之间传播,同一时刻只能其中一方发给另外一方,比如对讲机就是典型半双工。 全双工通信:发送数据的同时也能够接收数据,两者同步进行,比如我们的电话通信。 80C51的串行口 有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。 SCON——串行控制寄存器的位分配(地址0x98、可位寻址) SCON——串行控制寄存器的位描述 SM0和SM1为工作方式选择位,可选择四种工作方式: SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。 在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。 TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。 在方式0和方式1中,该位未用。 RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。 TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。 RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。 PCON : 电源控制寄存器 (不可位寻址) SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波 特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。 SMOD0:帧错误检测有效 控制位。当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。复位时SMOD0=0 串口通信程序的基本步骤 1、配置串口为模式1。 2、配置定时器T1为模式2,即自动重装模式。 3、根据波特率计算TH1和TL1的初值,如果有需要可以使用PCON进行波特率加倍。 4、打开定时器控制寄存器TR1,让定时器跑起来。 80C51串行口的工作方式 方式0 方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。 1、方式0输出 2、方式0输入 方式1 方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。 方式1输出 方式1输入 用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。 方式2和方式3 方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚 。 方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。 波特率的计算 在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。 串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。 方式0的波特率 = fosc/12 方式2的波特率 =(2SMOD/64)· fosc 方式1的波特率 =(2SMOD/32)·(T1溢出率) 方式3的波特率 =(2SMOD/32)·(T1溢出率) 当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。 T1 溢出率 = fosc /{12×[256 -(TH1)]} 在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。 串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下: 确定T1的工作方式(编程TMOD寄存器); 计算T1的初值,装载TH1、TL1; 启动T1(编程TCON中的TR1位); 确定串行口控制(编程SCON寄存器); 串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。 第六节、液晶显示 1602液晶 工业字符型液晶,能够同时显示16x02即32个字符。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 管脚功能 1602采用标准的16脚接口,其中: 第1脚:GND为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电 源。15脚背光正极,16脚背光负极。 特性 3.3V或5V工作电压,对比度可调 内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM,应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。 操作控制 注:关于E=H脉冲——开始时初始化E为0,然后置E为1。 字符集 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。在单片机编程中还可以用字符型常量或变量赋值,如'A’。因为CGROM储存的字符代码与我们PC中的字符代码是基本一致的,因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1=‘A’这样的方法。PC在编译时就把'A'先转换为41H代码了。 字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。 0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。 1602的16进制ASCII码表地址:读的时候,先读上面那行,再读左边那列,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。 8051模拟口接法 第七节、点阵LED显示 8*8点阵外型和结构 8X8点阵LED工作原理说明 :8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就 会点亮;因此要实现一根柱形的亮法,对应的一列为一根竖柱,或者对应的一行为一根横柱,实现柱的亮的方法如下:一根竖柱:对应的列置1,而行则采用扫描的方法来实现。 一根横柱:对应的行置0,而列则采用扫描的方法来实现。 第八节、红外遥控 信号调制原理 基带信号:从信号源发出没有经过调制的原始信号,特点是频率较低,信号频率从0开始,频谱较宽。 调制:就是用待传送信号去控制某个高频信号的幅度、相位、频率等参量变化的过程,即用一个信号去装载另一个信号。 红外遥控发送接收原理图 NEC协议红外遥控器 NEC数据格式:引导码、用户码、用户码(或者用户码反码)、按键键码和键码反码,最后一个停止位。 引导码:9ms的载波+4.5ms的空闲。 比特值“0”:560us的载波+560us的空闲。 比特值“1”:560us的载波+1.68ms的空闲。 第九节、AD、DA转化 A/D和D/A的基本概念 模拟量:任何两个数字之间都有无限个中间值,所以称之为连续变化的量,也就是模拟量。 数字量:数字间有一定的间隔,不是连续的,即离散的量称之为数字量。 A/D:Analog to Digital Converter,用模数转换器实现模拟量到数字量的转换,简称ADC。 D/A:Digital to Analog Converter,用数模转换器实现数字量到模拟量的转换,简称DAC。 A/D的主要指标 1、ADC的位数:1个n位的ADC表示这个ADC共有2的n次方个刻度。 2、基准源:也叫做基准电压,是ADC的参考基准。 3、分辨率:数字量变化一个最小刻度,模拟信号的变化量,定义为满刻度量程与2n-1的比值。 4、INL(积分非线性度)和DNL(差分非线性度) INL是指ADC器件在所有数值上对应的模拟值,和真实值之间误差最大的那个点的误差值,单位是LSB。LSB(Least Significant Bit)是最低有效位的意思,它实际上对应的就是ADC的分辨率。 DNL是指ADC相邻两个刻度之间最大的差异,单位也是LSB。 5、转换速率:是指ADC每秒能进行采样转换的最大次数,单位是sps。 第十节 、实时时钟DS1302 DS1302实时时钟芯片 DS1302寄存器介绍 DS1302单字节写操作时序 DS1302单字节读操作时序 |