单片机C语言应用100例(第2版)_第1页
单片机C语言应用100例(第2版)_第2页
单片机C语言应用100例(第2版)_第3页
单片机C语言应用100例(第2版)_第4页
单片机C语言应用100例(第2版)_第5页
已阅读5页,还剩183页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机C语言应用100例第一章单片机概述第一篇基础篇1.1单片机的定义、分类与内部组成

什么是单片机?单片机就是把中央处理器CPU、随即存储(RAM)、只读存储器(ROM)、定时/计数器和各种输入/输出接口(I/O接口)电路等一些计算机的主要功能部件集成在一块集成电路芯片上的微型计算机。通常将单片机称为微型控制器(MicrocontrollerUnit,MCU)。51系列单片机的分类1.按芯片的半导体制造工艺来划分

HMOS工艺型和CHMOS工艺型2.按片内不同容量的存储器配置来划分

51子系列型和52子系列型时钟电路CPU4KBROM128BRAM2个16位定时器/计数器中断控制系统可编程I/O串行接口

并行I/O口输入输出外部中断外接振荡电路定时/计数器MCS—51单片机的内部组成MCS—51单片机的内部组成(1)中央处理器(CPU)中央处理器是单片机的核心,完成运算和控制功能。它的结构非常复杂,但由于采用了C语言来设计程序,在编写程序的时候就无须过多地了解它的结构和原理。MCS—51单片机的CPU能处理8位二进制数或代码的运算。(2)内部数据存储器(128BRAM)

MCS—51芯片中共有256个RAM单元,其中,后128个单元被专用寄存器占用,通常称为特殊功能寄存器。供用户使用的寄存器只有前128个单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128个单元,简称内部RAM。MCS—51单片机的内部组成(3)内部程序存储器(4KBROM)

MCS—51共有4KB掩膜ROM,用于存放程序或原始数据,因此称之为程序存储器,简称内部ROM。(4)定时/计数器

MCS—51共有两个16位的定时/计数器,以实现定时或计数功能,并以定时或计数结果对计算机进行控制。(5)可编程I/O口

MCS—51共有4个8位的I/O口(P0、P1、P2、P3),通过编写程序可以实现数据的并行输入/输出,从而接收外部信号或输出控制信号。MCS—51单片机的内部组成(6)串行接口

MCS—51单片机有一个全双工的串行口,以实现单片机和其他设备之间的串行数据传送。(7)中断控制系统当CPU执行正常的程序时,如果接收到一个中断请求(如定时时间到,需要鸣笛报警),中断控制系统马上会让CPU停止正在执行的程序,转而去执行程序存储器ROM中特定的某段程序,执行完成该段程序后再继续执行先前中断的程序。

MCS—51单片机共有5个中断源,即两个外中断源,两个定时/计数中断源,一个串行中断源。MCS—51单片机的内部组成(8)时钟电路时钟电路产生时钟信号送给单片机内部各电路,控制这些电路,使它们有节拍地工作。时钟信号频率越高,内部电路工作速度越快。

MCS—51芯片的内部有时钟电路,但石英晶体和微调电容需外接,系统允许的晶振频率一般为6MHz~12MHz。1.2单片机基础知识

1.2.1数制与数制间的转换

(1)十进制数按“逢十进一”的原则进行计数,它的基数为“十”,所使用的数码为0~9共10个数字。对于任意4位十进制数,都可以写成如下形式:D3D2D1D0=D3×103+D2×102

+D1×101+D0×100式中,D3、D2、D1、D0称为数码;10为基数;103、102、101、100是各位数码的“位权”,该式称为按位权展开式。例:30681=3×104+0×103+6×102+8×101+1×100(2)二进制数按“逢二进一”的原则进行计数,它的基数为“二”,其使用的数码只有0和1两个。二进制数在计算机中容易实现,可以用电路的高电平表示“1”,低电平表示“0”;或者三极管截止时集电极的输出表示“1”,导通时集电极输出表示“0”。对于任意一个4位二进制数,都可以写成如下形式:B3B2B1B0=B3×23+B2×22

+B1×21+B0×20式中,B3、B2、B1、B0称为数码;2为基数;23、22、21、20是各位数码的“位权”。例:(1101)2=1×23+1×22+0×21+1×20=13由于二进制运算实行的借进位规则是“逢二进一,借一当二”,因此二进制的运算规则相当简单。加法:0+0=0;0+1=1;1+0=1;1+1=10减法:0―0=0;;1―0=1;1―1=0;10―1=1乘法:0×0=0;0×1=0;1×0=0;1×1=1除法:0÷1=0;1÷1=1(3)十六进制数按“逢十六进一”的原则进行计数,它的基数为“十六”,所使用的数码共有十六个:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F。其中,A、B、C、D、E和F所代表的数的大小相当于十进制的10、11、12、13、14和15。对于任意4位一个十六进制数,都可以写成如下形式:H3H2H1H0=H3×163+H2×162

+H1×161+H0×160式中,H3、H2、H1、H0称为数码;16为基数;163、162、161、160是各位数码的“位权”。例:(120B)16=1×163+2×162+0×161+11×160=4619将一个数由一种数制转换成另一种数制称为数制间的转换。(1)十进制数转化为二进制数十进制转化为二进制采用“除2取余法”,即将十进制数依次除以2,并依次记下余数,一直除到商为0,最后把全部余数按相反次序排列,就能得到二进制数。(2)二进制数转化为十进制数二进制数转化为十进制数采用“位权法”,即把各非十进制数按位权展开,然后求和。(3)二进制数转化为十六进制数将二进制数转化为十六进制数的规则是,从右向左,每4位二进制数转化为1位十六进制数,不足部分用0补齐。(4)十六进制数转化为二进制数十六进制数转化为二进制数的方法是,从左到右将待转换的十六进制数中的每个数码依次用4位二进制数表示。1.2.2单片机中数的表示方法及常用数制的对应关系

1.数的表示方法为了便于书写,特别是方便编程时书写,规定在数字后加一个字母以示区别。二进制后加B;十六进制后加H;十进制后面加D,其中D可以省略。例:3BH=00111011B=59D=592.常用计数制的对应关系二进制十进制十六进制二进制十进制十六进制0000B00H1000B88H0001B11H1001B99H0010B22H1010B10AH0011B33H1011B11BH0100B44H1100B12CH0101B55H1101B13DH0110B66H1110B14EH0111B77H1111B15FH1.2.3逻辑数据的表示

1.逻辑“与”逻辑“与”也称之为逻辑乘,最基本的“与”运算有两个输入量和一个输出量。逻辑“与”的运算规则可总结为“有0为0,全1出1”。2.逻辑“或”逻辑“或”也称为逻辑加,最基本的逻辑“或”运算有两个输入量和一个输出量。逻辑“或”的运算规则可总结为“有1为1,全0出0”。3.逻辑“非”逻辑“非”即取反,逻辑“非”的运算规则可总结为“1的反为0,0的反为1”。若在一个逻辑表达式中出现多种逻辑运算,可用括号指定运算的次序;无括号时按逻辑“非”、逻辑“与”和逻辑“或”的顺序执行。1.2.4单片机中常用的基本术语

1.位位(bit)的定义是:计算机中所能表示的最小数据单位。2.字节相邻的8位二进制码称为一个字节(byte),用B表示。字节是一个比较小的单位,常用的还有KB和MB等,它们之间的关系如下:1MB=1024KB=1024×1024B

3.字长字节是计算机内部进行数据处理的基本单位。它由若干位二进制码组成,通常与计算机内部的寄存器、运算器、数据总线的宽度一致。每个字所包含的位数称为字长。若干个字节定义为一个字,不同类型的单片机有不同的字长。8051内核的单片机是8位机,它的字长为8位,其内部的运算器等都是8位的,每次参加运算的二进制位只有8位。第二章单片机开发软件2.1仿真软件Proteus的使用

Proteus的主要功能特点

(1)实现了单片机仿真和SPICE电路仿真相结合(2)支持主流单片机系统的仿真(3)提供软件调试功能(4)具有强大的原理图绘制功能Proteus软件的界面与操作介绍模型选择工具栏菜单栏编辑区标准工具栏预览窗口对象选择器仿真按钮ProteusISIS的工作界面1.原理图编辑窗口原理图编辑窗口用来绘制原理图。它也是各种电路、单片机系统的Proteus仿真平台。蓝色方框内为可编辑区,元件要放到它里面。注意:原理图编辑窗口没有滚动条,可通过预览窗口改变原理图的可视范围。2.预览窗口预览窗口可显示两个内容:一个是在元件列表中选择一个元件时,显示该元件的预览图;另一个是鼠标焦点落在原理图编辑窗口时,显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容。通过改变绿色的方框的位置,可以改变原理图的可视范围。3.对象选择器对象选择器用来选择元器件、终端、图表、信号发生器、虚拟仪器等。对象选择器上方有一个条形标签,用以表明当前所处的模式及其下所列的对象类型。

Proteus操作特性(1)在元件列表左键选择后可放置元件;(2)右键单击选择元件后可弹出编辑菜单;(3)双击右键可删除元件;(4)先右键后左键编辑元件属性;(5)连线用左键,可通过双击右键来删除画错的连线;(8)改连接线走线方式,可先右击连线,再左键拖动;(9)中键滚动可放缩原理图。2.2KeilC51的使用

单片机最小系统

能让单片机工作的由最基本元器件构成的系统称为单片机最小系统。构成51系列单片机最小系统的基本条件如下:①电源:单片机使用的是5V电源②振荡电路:单片机是一种时序电路,必须有脉冲信号才能工作。在它的内部有一个时钟产生电路,只要接上两个电容和一个晶振即可正常工作③复位电路:启动后让单片机从初始状态开始执行程序④EA引脚:接到正电源端,表示使用内部程序存储器注意:在Proteus中绘制仿真原理图时,最小系统所需的晶振电路、复位电路和引脚与电源的连接都可以省略,并不影响仿真效果。实例3:用KeilC51编写点亮一个发光二极管的程序

(1)新建项目输入文件名“ex3”单击“Atmel”前的图标“+”,弹出该公司的系列单片机单击“89C51”,针对该型单片机进行编程(2)新建源程序文件保存源程序文件必须手工输入“ex3.c”将新建的源程序文件加载到项目管理器

(3)编译程序输入“11.0592”目标属性设置对话框框选选中编译后的提示信息程序编译后的提示信息(4)用Proteus软件仿真改为“11.0592MHz”改为“ex3.hex”点亮一个发光二极管的仿真效果第三章逐步认识单片机基本结构3.1I/O口的结构分析1.P0口内部结构(外接32~39脚)三态缓冲器三态缓冲器P0端口内部电路结构2.P1口内部结构(外接1~8脚)P1端口内部电路结构3.P2口内部结构(外接21~28脚)P2端口内部电路结构4.P3口内部结构(外接10~17脚)P3端口内部电路结构P3口的第二功能引脚第二功能引脚第二功能P3.0RXD(串行数据输入)P3.4T0(定时器0外部输入)P3.1TXD(串行数据输出)P3.5T1(定时器1外部输入)P3.2(外部中断0输入)P3.6(外部RAM写信号)P3.3(外部中断1输入)P3.7(外部RAM读信号)实例6:使用P3口流水点亮8位LED

实现方法可通过循环执行以下操作来实现:①先点亮P3.0引脚LED,利用延时程序延时一段时间,其实现程序为:

P3=0xfe;//即P3=11111110B,P3.0置为低电平

delay();//调用延时函数延时一段时间②接着点亮P3.1引脚LED,利用延时程序延时一段时间,其实现程序为:P3=0xfd;//即P3=11111101B,P3.1置为低电平

delay();//调用延时函数延时一段时间……⑧最后点亮P3.7引脚LED,利用延时程序延时一段时间,其实现程序为:P3=0x7f;//即P3=01111111B,P3.7置为低电平delay();//调用延时函数延时一段时间周期概念

振荡周期:为单片机提供时钟脉冲信号的振荡源的周期。例如,单片机外接晶振频率是12MHz时,则振荡周期就是(1/12MHz)=(1/12)μs。机器周期:51系列单片机的一个机器周期由12个振荡周期组成。如果一个单片机的工作频率是12MHz,那么它的工作周期就是(1/12)μs,其机器周期就是12×(1/12)μs=1μs;如果单片机的外接晶振频率为11.0592MHz时,其机器周期就是12×(1/11.0592)μs=1.085μs。指令周期:单片机执行一条指令的时间。一般来说单片机执行1个简单指令需要一个机器周期,执行复杂指令需要两个机器周期。流水点亮P3口8位LED的电路原理图3.2MCS51单片机存储器的基本结构

MCS-51单片机有两种存储器:程序存储器和数据存储器。程序存储器用来储存编入的程序;而数据存储器用来存放单片机工作时用到的一些临时数据。从物理地址空间看,MCS-51有四个存储器地址空间,即片内程序存储器和片外程序存储器以及片内数据存储器和片外数据存储器。3.2.1程序存储器单片机在编程时,一般先在计算机中用软件编写程序,再通过烧录器(编程器)将编好的程序写入程序存储器中,单片机通过执行程序存储器中的程序来实现控制目的。MCS-51单片机在一般情况下使用内部程序存储器,当内部存储空间不够时需要使用外部程序存储器。其使用受EA端外接电平的控制。EA=0(接地时),单片机只能使用外部程序存储器;EA=1(接+5V电源时),单片机先使用内部程序存储器,容量不够时自动使用外部程序存储器。3.2.2数据存储器MCS-51单片机的数据存储器分为两个地址空间,一个为内部数据存储器,另一个为外部数据存储器。内部数据存储器有256B存储空间,地址编号为00H~FFH;外部数据存储器的地址编号为0000H~FFFFH,有64KB存储空间。特殊功能寄存器区(地址范围80H~FFH)数据缓存区(地址范围30H~7FH)位寻址区(地址范围20H~2FH)工作寄存器区(地址范围00H~1FH)标识符名称地址ACC累加器E0HBB寄存器F0HPSW程序状态字D0HSP堆栈指针81HDPTR数据指针(包括DPH和DPL)83H和82HP0口080HP1口190HP2口2A0HP3口3B0HIP中断优先级控制B8HIE允许中断控制A8HTMOD定时器/计数器方式控制89HTCON定时器/计数器控制88HTH0定时器/计数器0(高位字节)8CHTL0定时器/计数器0(低位字节)8AHTH1定时器/计数器1(高位字节)8DHTL1定时器/计数器1(低位字节)8BHSCON串行控制98HSBUF串行数据缓冲器99HPCON电源控制87H3.3单片机的复位电路

上电复位电路按键复位电路第四章单片机C语言开发基础4.1C语言源程序的结构特点

(1)“文件包含”处理(2)main()函数(3)语句结束标志语句必须以分号“;”结尾(4)注释4.2标识符与关键字

(1)类型说明符:用来定义变量、函数或其它数据结构的类型。如unsignedchar、int、long等。(2)语句定义符:用来标识一个语句的功能。如条件判断语句“if”、“while”等。(3)预处理命令字:表示预处理命令的关键字。如程序开头的“include”。

由ANSI标准定义的关键字共32个:

auto、double、int、struct、break、else、long、switch、case、enum、register、typedef、char、extern、return、union、const、float、short、unsigned、continue、for、signed、void、default、goto、sizeof、volatile、do、if、while、static。KeilC51编译器扩充了关键字:sfr特殊功能寄存器名=地址常数sbit位变量名=特殊功能寄存器名^位位置4.3C语言的数据类型与运算符

4.3.1数据类型

KeilC语言中常的数据类型有:整型、字符型、实型、指针型和空类型等。类型符号关键字所占位数数的表示范围整型有(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~2147483647无(unsigned)int160~65535(unsigned)shortint160~65535(unsigned)longint320~4294967295实型有Float323.4e-38~3.4e38有Double641.7e-308~1.7e308字符型有Char8-128~127无(unsigned)char80~2554.3.2运算符运算符意义举例(设x=10,y=3)+加法运算z=x+y;//z=13-减法运算z=x-y;//z=7*乘法运算z=x*y;//z=13/除法运算(保留商的整数,小数部分丢弃)z=x/y;//z=3%模运算(取余运算)z=x%y;//z=1算术运算符运算符意义例(设x的初值为3)x++先用x的值,再让x加1y=x++;//y为3,x为4++x先让x加1,再用x的值y=++x;//y为4,x为4x--先用x的值,再让x减1y=x--;//y为3,x为2--x先让x减1,再用x的值y=--x;//y为2,x为2自增运算符与自减运算符运算符意义例(设a=2,b=3)<小于a<b;//返回值1>大于a>b;//返回值0<=小于等于a<=b;//返回值1>=大于等于a>=b;//返回值0!=不等于a!=b;//返回值1==等于a==b;//返回值0关系运算符用以比较两个数据量的运算符称为关系运算符。关系运算的结果只有“0”和“1”两种,即条件满足时结果为“1”,否则为“0”。运算符意义例(设a=2,b=3)&&逻辑与a&&b;//返回值1||逻辑或a||b;//返回值1!逻辑非!a;//返回值0逻辑运算符逻辑运算的结果只有“真”和“假”两种,用“1”表示真,用“0”表示假。位运算符(1)按位“与”运算符“&”(2)按位“或”运算符“|”(3)按位“异或”运算符“^”(4)按位“取反”运算符“~”(5)左移运算符“<<”(6)右移运算符“>>”赋值运算符运算符

意义

说明=将右边表达式的值赋给左边的变量或数组元素+=左边的变量或数组元素加上右边表达式的值x+=a等价于x=x+a-=左边的变量或数组元素减去右边表达式的值x-=a等价于x=x-a*=左边的变量或数组元素乘以右边表达式的值x*=a等价于x=x*a/=左边的变量或数组元素除以右边表达式的值x/=a等价于x=x/a%=左边的变量或数组元素模右边表达式的值x%=a等价于x=x%a<<=左移操作,再赋值x<<=a等价于x=x<<a>>=右移操作,再赋值x>>=a等价于x=x<<a&=按位与操作,再赋值x&=a等价于x=x&a^=按位异或操作,再赋值x^=a等价于x=x^a~=按位取反操作,再赋值x~=a等价于x=x~a强制转换运算符

当参与运算的数据类型不同时,则先转换成同一数据类型,再进行运算。数据类型的转换方式有两种,一是自动类型转换,另一是强制转换。自动类型转换的基本规则是转换后计算精度不降低,所以当char、int、unsigned、long、double类型的数据同时存在时,其转换高低关系为char→int→unsigned→long→double。例如,当char型数据与int型数据共存时,则先将char型转化为int型再计算。强制转换是通过强制类型转换运算符“()”进行的,其作用是将一个表达式转化为所需类型。4.4C语言的语句

4.4.1概述按C语句执行方式的不同,C程序可分为顺序结构、选择结构和循环结构。顺序结构:指程序按语句的顺序逐条执行。选择结构:指程序根据条件选择相应的执行顺序。循环结构:指程序根据某条件的存在重复执行一段程序,直到这个条件不满足为止。如果这个条件永远存在就会形成死循环。五类语句(1)控制语句(2)函数调用语句(3)表达式语句(4)空语句(5)复合语句4.5C语言的数组

一维数组的表达形式如下:类型说明符数组名[常量];例如:inta[10];//定义整型数组a,它有a[0]~a[9]共10个元素,每个元素都是整型变量二维数组一般表达形式如下:类型说明符数组名[下标1][下标2];例如:unsignedcharx[3][4];//定义无符号字符型二维数组,有3×4=12个元素用来存放字符型数据的数组称为字符数组。与整型数组一样,字符数组也可以在定义时进行初始化赋值。例如:chara[8]={‘B’,‘e’,‘i’,‘-’,‘J’,‘i’,‘n’,‘g’};charstr[]={”Now,Temperatureis:”};4.6C语言的指针

(1)指针的值指针存放的是某个变量在内存中的地址值。被定义过的变量都有一个内存地址。如果一个指针存放了某个变量的地址值,就称这个指针指向该变量。由此可见,指针本身具有一个内存地址,另外,它还存放了它所指向的变量的地址值。(2)指针的类型指针的类型就是该指针所指向的变量的类型。例如,一个指针指向int型变量,该指针就是int型指针。(3)指针的定义格式指针变量不同于整型或字符型等其它类型的数据,使用前必须将其定义为“指针类型”。其定义的一般形式为:类型说明符*指针名字4.7C语言的函数

(1)函数的定义函数可分为无参数函数和有参数函数。前者在被调用时没有参数传递,后者在被调用时有参数传递。有参数函数定义的一般形式为:类型说明符函数名(形式参数列表)//注:形式参数超过1个时,用逗号隔开{

声明部分语句部分}关于返回值要注意:①返回值是通过return语句获得的;②返回值的类型必须和函数定义的类型一致;③如果函数无返回值,需用“void”声明不返回值。(2)

局部变量与全局变量在函数内部定义的变量称为局部变量。局部变量只在该函数有效。全局变量也称为外部变量,它定义在函数的外部,最好是在程序的顶部。它的有效范围为从定义开始的位置到源文件结束。全局变量它可以被函数内的任何表达式访问。如果全局变量和某一函数的局部变量同名时,在该函数内,只有局部变量被引用,全局变量被自动“屏蔽”。(3)

数组作为函数参数用数组名作为函数的参数。一个数组的名字表示该数组的首地址,所以用数组名作为函数的参数时,被传递的就是数组的首地址,所以被掉函数的形式参数必须定义为指针型变量。第五章定时器/计数器

5.1定时器/计数器的基本概念

5.2定时器/计数器的结构及工作原理

MCS-51定时器/计数器的基本结构定时器/计数器T0或T1用作计数器时,通过单片机外部引脚T0或T1对外部脉冲信号计数,当加在T0或T1引脚上的外部脉冲信号出现一个由1到0的负跳变时,计数器加1,如此直至计数器产生溢出。定时器/计数器T0或T1用作定时器时,对外接晶振产生的振荡信号经12分频后,提供给计数器,作为计数的脉冲输入,计数器以12分频后的脉冲周期为基本计数单位,对输入的脉冲进行计数,直至产生溢出。需要说明的是,无论T0或T1是工作于计数还是计时方式,它们在对内部时钟脉冲或外部脉冲进行计数时,都不占用CPU的时间,直到定时器/计数器产生溢出为止。它们的作是:当发生溢出后,通知CPU停下当前的工作,去处理“时间到”或“计数满”这样的事件。因此,定时器/计数器的工作并不影响CPU其它的工作。这也正是采用定时器/计数器的优点。5.3定时器/计数器的控制

所谓的“控制”也就是对两个寄存器TCON和TMOD的位进行设置。位序B7B6B5B4B3B2B1B0位符号GATEC/TM1M0GATEC/TM1M0方式控制寄存器TMOD的格式位地址8F8E8D8C8B8A8988位符号TF1TR1TF0TR0控制寄存器TMOD的格式工作方式013位计数器工作方式116位计数器工作方式2自动装入时间常数的8位计数器方式工作方式3定时器/计数器中定时/计数初值的计算

式中,n为由工作方式决定的计数器位数。例如,当T0工作于方式0时,n=16,最大计数值为65536,若要计数10000次,需将初值设置为:65536-10000=55536。如果单片机采用的晶振为11.0592MHz,则计数1次需要的时间(12分频后的1个脉冲周期)

所以计数10000次实际上就相当于计时1.085×10000=10850μs。第六章单片机的中断系统6.1中断系统的基本概念

80C51单片机提供了5个中断源,其中两个为外部中断请求源INT0(P3.2)和INT1(P3.3),两个片内定时器/计数器T0和T1的溢出请求中断源TF0(TCON的第5位)和TF1(TCON的第7位),1个片内串行口发送或接收中断请求源TI(SCON的第1位)和RI(SCON的第0位)。它们可以向CPU发出中断请求源。中断源自然优先级中断入口地址C51编译器对中断的编号外部中断INT0高0003H0定时器T0000BH1外部中断INT10013H2定时器T1001BH3串行口通信中断RI或TI低0023H480C51单片机中断源的自然优先级、入口地址及中断编号编写中断服务函数的格式如下:函数类型函数名(形式参数列表)[interruptn][usingm]interrupt后面的n是中断编号,n的取值范围为0~4,其编号意义见表6-1。using中的m表示使用的工作寄存器组号(如不声明,则默认用第0组)。例如,定时器T0的中断服务函数可用如下方法编写:voidTime0(void)interrupt1using0//定时器T0的中断服务函数,T0的中断编号为1,使用第0组工作寄存器{……//中断服务程序

}6.2中断系统的结构及控制

80C51的中断系统结构定时器/计数器控制寄存器TCONTCON的功能是接收外部中断源(、)和定时器/计时器(T0、T1)送来的中断请求信号。其字节地址为88H,可位操作。该寄存器中有定时器/计数器T0和T1的溢出中断请求标志位TF1和TF0,外部中断请求标志位IE0和IE1。8FH8EH8DH8CH8BH8AH89H88HTF1TR1TF0TR0IE1IT1IE0IT0定时器/计数器控制寄存器TCON的格式中断允许寄存器IEAFH--ACHABHAAHA9HA8HEA--ESET1EX1ET0EX0中断允许控制寄存器IE的格式EA:中断允许总控制位ES:串行口中断允许ET1:定时器/计数器T1的溢出中断允许位EX1:外部中断1中断允许位ET0:定时器/计数器T0的溢出中断允许位EX0:外部中断0中断允许位中断优先级控制寄存器IP---BCHBBHBAHB9HB8H---PSPT1PX1PT0PX0中断优先级控制寄存器IP的格式(1)PS:串行口优先级控制位(2)PT1:定时器/计数器T1中断优先级控制位(3)PX1:外部中断1优先级控制位(4)PT0:定时器/计数器T0中断优先级控制位(5)PX0:外部中断0优先级控制位实例44:用定时器T0的模式1控制LED闪烁用T0中断控制LED闪烁的电路原理图

本例使用定时器T0的中断来控制P2.0引脚LED的闪烁,要求闪烁周期100ms,即亮50ms,灭50ms。

将定时器T0设置为工作方式1,而要使T0作为中断源,必须开总中断开关EA和T0的“分支”开关“ET0”,然后还要将TR0位置“1”以启动定时器T0。voidmain(void){EA=1;//开总中断

ET0=1;//定时器T0中断允许

TMOD=0x01;//使用定时器T0的模式1 TH0=(65536-46083)/256;//定时器T0的高8位赋初值

TL0=(65536-46083)%256;//定时器T0的低8位赋初值

TR0=1;//启动定时器T0 while(1)//无限循环,等待中断

;}第七章串行通信技术7.1串行通信的基本概念并行通信串行通信串行通信的三种数据传输方式串行通信的奇偶校验

为了确保数据的正确传输,最简单且最常用的方法就是奇偶校验。奇偶校验的原理如下:单片机的特殊功能寄存器中有一个程序状态字寄存器PSW,它的最低位P叫做奇偶校验位。它可以根据特殊功能寄存器ACC(即累加器)的运算结果变化,如果累加器ACC中的“1”的个数为偶数,则P=0;如果为奇数,则P=1.。假如要传送数据“10101110”(奇数个“1”,P=1),接收到数据后,要对数据进行奇偶校验,如果P=1,则认为数据传输正确;如果P=0(偶数个“1”),则认为数据传输错误,通知发送方,再次传输。7.2串行通信口的结构

串行口的内部结构(1)两个数据缓冲器SBUFSBUF是一个特殊功能寄存器,它包括发送数据缓冲寄存器SBUF和接收数据缓冲寄存器SBUF。前者用来发送串行数据,后者用来接收串行数据。两者共用一个地址99H。发送数据时,该地址指向发送SBUF;接收数据时,该地址指向接收SBUF。(2)输入移位寄存器其功能是在接收控制器的控制下,将输入的数据位逐位移入接收SBUF。(3)串行控制寄存器SCON

其功能是控制串行通信的工作方式,并反映串行通信口的工作状态。(4)定时器T1

其功能是用作波特率发生器,控制传输数据的速度。7.3串行通信口的控制

串行控制寄存器SCON

SM0SM1SM2RENTB8RB8TIRI9F9E9D9C9B9A9998串行口控制寄存器SCON的格式(1)SM0、SM1:串行口工作方式的选择位,可选择4种工作方式(2)SM2:多机通信控制位(3)REN:允许/禁止数据接收控制位(4)TB8:发送数据的第9位(5)RB8:接收数据的第9位(6)TI发送中断标志位(7)RI:接收中断标志电源控制寄存器PCON

PCON中的第7位SMOD与串行口有关,为波特率选择位。在方式1、方式2和方式3时起作用。若SMOD=0,波特率不变;若SMOD=1,波特率加倍。当系统复位时,SMOD=0。波特率的设置

方式0串行通信在方式0时的发送电路串行通信口在方式0时的数据接收电路

在方式0中,串行通信口发送和接收数据的波特率都是。

方式1当SM0SM1=01时,串行通信口工作于方式1。此时,可发送或接收的一帧信息共10位:1位起始位(高电平“0”)、8位数据位(D0~D7)和一位停止位(低电平“1”)。在方式1时,串行通信口可分为发送数据和接收数据两种工作情况。(1)数据发送发送数据时,只要用指令将数据写入发送缓冲SBUF时,发送控制器在移位脉冲(由定时器T1产生的信号经16或32分频得到)的控制下,先从TXD引脚输出一个起始位,然后再逐位将8位数据从TXD端送出,当最后一位数据发送完毕,发送控制器马上将SCON的TI位置“1”,向CPU发出中断请求,同时从TXD端输出停止位(高电平)。(2)数据接收在REN=1时,方式1允许接收。串行口开始采样RXD引脚,当采样到1至0的负跳变信号时,确认是开始位0,就开始启动接收,将输入的8位数据逐位移入内部的输入移位寄存器。如果接收不到起始位,则重新检测RXD引脚上是否有负跳变信号。当一帧数据接收完毕以后,必须同时满足以下2个条件,这帧数据接收才真正有效。①RI=0,即无中断请求,或在上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,“SBUF”已空。②SM2=0。若这两个条件不同时满足时,接收到的数据不装入SBUF,该帧数据将丢弃。方式2串行口的工作于方式是9位异步通信方式,每帧数据均为11位,即1位起始位0,8位数据位,1位可编程的第9位数据和1位停止位。其中第9位数据(TB8)可作奇偶校验位,也可作多机通信的数据、地址标志位。(1)数据发送发送前,先根据通信协议由软件设置TB8(第9位数据)。然后将要发送的数据写入SBUF,即可启动发送过程。串行口能自动将TB8取走,并装入到第9位数据位的位置,再逐一发送出去。发送一帧信息后,则将TI置1。(2)数据接收在方式2时,需要先设置SCON中的REN=1,串行通信口才允许接收数据,然后当RXD端检测到有负跳变时,即说明外部设备发来了数据的起始位,即开始接收此帧数据的其余数据。当一帧数据接收完毕以后,必须同时满足以下2个条件,这帧数据接收才真正有效。①RI=0,意味着接收缓冲器为空。②SM2=0。当上述2个条件满足时,接收到的数据送入SBUF,第9位数据送入RB8,并由硬件自动置RI为1。若不满足这两个条件,接收的信息将被丢弃。方式3当SM0SM1=11时,串行通信口工作于方式3。方式3与方式2一样,传送的一帧数据都是11位,工作原理也相同。两者的区别仅在于波特率不同。波特率设置工作方式常用波特率晶振频率(MHz)SMODTH1初值1、31920011.05921FDH1、3960011.05920FDH1、3480011.05920FAH1、3240011.05920F4H1、3120011.05920E8H实例51:基于方式1的单工通信

基于方式1单工通信的流水灯控制电路原理图实现方法本例需针对两个单片机U1和U2分别设计两个程序:程序1完成数据发送任务(对U1);程序2完成数据接收任务(对U2)。根据本例要求,对单片机U1编程时,需令SM0=0,SM1=1。对单片机U2编程时,除了需令SM0=0,SM1=1;还需设置REN=1,使接收允许。波特率和定时器T1初值的设置需波特率设置参考表。本例选择波特率为9600,由表可得:SMOD=0,TH1=FDH。实例53:单片机向PC发送数据

单片机向PC发送数据的电路原理图串口调试助手单片机C语言应用100例郭向阳第八章接口技术第二篇应用篇8.1LED数码管接口技术

abcdefgdpCOM共阳极数码管的内部电路常见数码管结构图数码管和单片机的接口电路示意图实例55:用LED数码管显示数字“5”数码管和单片机的接口电路及运行效果实现方法:第一:由P2.0引脚输出低电平点亮数码管。第二:由P0口输出数字的段码到数码管。数字0123456789●(小数点)段码0xc00xf90xa40xb00x990x920x820xf80x800x900x7f共阳极数码管段码表8.2键盘接口技术

独立式键盘接口电路按键抖动的消除按键抖动产生的输入波形

单片机中常用的消抖方法为软件消抖法。其基本原理是:当单片机第一次检测到某口线为低电平时,不是立即认定其对应按键被按下,而是延时几十毫秒后再次检测该口线平;如果仍为低电平,说明该按键确实被按下,这实际上是避开了按键按下时的抖动时间。实例62:定时器中断控制的键盘扫描实验要求按下S1键时,P3口的8位LED正向流水点亮;按S2键时,P3口的8位LED反向流水点亮;按S3键时,P3口的8位LED熄灭;按S4键时,P3口的8位LED闪烁。开始是否有键按下否延时是是否有键按下判断按键值是定时器重新赋值否由定时器中断控制的键盘扫描程序流程图矩阵键盘的工作原理矩阵键盘的接口电路识别按键的基本过程为:第一步:首先判断是否有键按下。将全部行线(P1.0、P1.1、P1.2和P1.3)置低电平“0”,全部列线置高电平“1”,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下。若检测到所有列线均为高电平,则键盘中无键按下。第二步:按键消抖。当判别到有键按下后,调用延时子程序,执行后再次进行判别,若确认有键按下,则开始第三步的按键识别,否则重新开始。第三步:按键识别。当有键按下时,转入逐行扫描的方法来确定是哪一个键被按下。先扫描第一行,即将第一行输出低电平“0”,然后读入列值,哪一列出现低电平“0”,则说明该列与第一行跨接的键被按下。若读入的列值全为“1”,说明与第一行跨接的按键(S1~S4)均没有被按下。接着开始扫描第二行,以此类推,逐行扫描,直到找到被按下的键。实例65:矩阵键盘按键值的数码管显示矩阵键盘按键值的数码管显示接口电路原理图及仿真效果中断开始行置低电平、列置高电平有键按下?延时10ms(去抖动)再调按键判别程序KS1确实有键按下?逐行扫描取得键值中断返回是否是否矩阵键盘扫描子程序流程图8.3字符型LCD液晶接口技术

1602LCD的主要技术参数

显示容量:16×2个字符;

芯片工作电压:4.5~5.5V;

工作电流:2.0mA(5.0V);

模块最佳工作电压:5.0V;

字符尺寸:2.95×4.35(W×H)mm。LCD1602和单片机的接口电路1602LCD显示字符的过程(1)字符ASCII标准码的产生常用字符的标准ASCII码无需人工产生,在程序中定义字符常量或字符串常量时,C语言在编译后会自动产生其标准ASCII码。只要将生成的标准ASCII码通过单片机的I/O口送入数据显示用存储器(DDRAM),内部控制线路就会自动将字符传送到显示器上。(2)液晶显示模式的设置要让液晶显示字符,必须对“有无光标、光标的移动方向、光标是否闪烁以及字符的移动方向”等进行设置,才能获得所需的显示效果。

1602液晶显示模式的设置是通过控制指令对内部的控制器控制而实现的(3)字符显示位置的指定要显示字符,还必须告诉液晶模块在哪里显示字符,也就是要先输入待显字符的地址。指令名称指令功能指令的二进制代码D7D6D5D4D3D2D1D0显示模式设置设置为16×2显示,5×7点阵,8位数据接口00111000显示开/关及光标设置D=1,开显示;D=0,关显示C=1,显示光标;C=0,不显示光标B=1,光标闪烁;B=0,光标不闪烁00001DCB输入模式设置N=1,光标右移;N=0,光标左移S=1,文字移动有效;S=0,文字移动无效000001NS1602液晶显示模式控制指令表1602LCD的读写操作读状态输入RS=0,R/W=1,E=1输出D0~D7=状态字写指令输入RS=0,R/W=0,D0~D7=指令码,E=高脉冲输出无读数据输入RS=1,R/W=1,E=1输出D0~D7=数据写数据输入RS=1,R/W=0,D0~D7=指令码,E=高脉冲输出无1602LCD的读写操作规定初始化(写模式设置指令)读状态(忙碌检测)将显示地址写入将数据(ASCII码)写入读出字符的字型点阵(显示)1602LCD的驱动程序流程图实例67:用LCD显示字符“A”实现方法:(1)LCD初始化;(2)检测忙碌状态;(3)写地址;(4)写数据;(5)自动显示。第九章新型串行接口芯片应用介绍9.1I2C总线器件及其应用实例

典型单片机I2C总线外围扩展系统示意图I2C总线器件的地址位D7D6D5D4D3D2D1D0含义DA3DA2DA1DA0A2A1A0R/W各位含义说明:●DA3、DA2、DA1和DA0:器件地址位,是I2C总线外围接口器件固有的地址编码,器件出厂时就已经给定了(使用者不能改变)。例如,I2C总线器件AT24CXX系列器件的地址为1010。●A2、A1和A0:引脚地址位,是由I2C总线外围器件的地址端口根据接地或接电源的不同而形成的地址数据(由使用者控制)。●R/W:数据方向位,该位规定了总线上主节点对从节点的数据方向。R/W=1时,为接收;R/W=0时,为发送。I2C总线的传输协议与数据传送SDASCL起始和停止条件数据稳定状态数据可变SDASCLI2C总线的数据数据传输格式实例69:将按键次数写入AT24C02,再读出送LCD显示

液晶初始化模拟计件值统计写入计件值读出计件值1602LCD显示软件流程图9.2单总线器件及其应用实例

DS18B20封装底视图DS18B20Z8脚SOIC排列单片机与单总线器件的接口电路图64位ROM和一线端口存储器和控制器高速暂存器温度敏感元件高温触发器TH低温触发器TL配置寄存器8位CRC生成器电源检测DQVDDDS18B20的内部结构温度/℃二进制表示十六进制表示符号位(5位)数据位(11位)+125000001111101000007D0H+25.062500000001100100010191H-25.06251111111001101111FE6FH-551111110010010000FC90H举例如下:当DS18B20采集到+125℃时,输出为07D0H,则:当DS18B20采集到-55℃时,输出为FC90H,则应先将11位数据取反加1得0370H(符号位不变,也不作为计算),则:负号需要对检测结果进行逻辑判断后再予以显示。DS18B20温度数据表DS18B20的工作时序主机发复位脉冲480<Tx<960μs等待15~60μs存在脉冲60~240μsVCCGND初始化时序写“0”时间片60<Tx<120μs恢复>1μs写“1”时间片15μsVCCGND写时序主机读“0”时间片>1μs主机读“1”时间片VCCGND15μs45μs15μs总线采样总线采样读时序功能描述代码启动温度转换44H读取暂存器内容BEH读DS18B20的序列号(总线上仅有一个DS18B20时使用)33H将数据写入暂存器的第2、3个字节中4EH匹配ROM(总线有多个DS18B20时使用)55H搜索ROM(使单片机识别所有DS18B20的64位编码)F0H报警搜索(仅在温度测量告警时使用)ECH跳过读序列号的操作(总线上仅有一个DS18B20时使用)CCH读电源供给方式,0为寄生电源,1为外部电源B4HDS18B20功能命令实例72:DS18B20温度检测及其液晶显示

DS18B20与1602和单片机的接口电路原理图开始初始化DS18B20跳过读序列号启动温度转换延时等待初始化DS18B20跳过读序列号读取温度DS18B20操作的软件流程图9.3SPI总线接口芯片及其应用实例

引脚名称功能描述1CS片选输入端:当CS为高电平时,芯片未被选中;当CS为低电平时,芯片被选中。2SO串行输出:数据在SCK的下降沿输出。3WP写保护:该引脚接地,写操作被禁止;该引脚为高电平时,所有功能正常。4VSS接地5SI串行输入:数据在SCK的上升沿写入(高位在前)。6SCK串行时钟:控制数据的输入与输出。7RESET复位输出:用于电源检测和看门狗超时输出。8VCC电源。实例73:将数据“0xaa”写入X5045再读出送P1口显示

X5045与单片机的接口电路原理图片选有效写入“读”指令写入欲读的地址读数据终止片选片选有效写“写允许”指令终止片选片选有效写“写”指令写地址写数据终止片选(a)“读”操作(b)“写”操作对X5045进行读写操作的软件流程图第十章常用功能器件应用举例10.1模/数(A/D)转换器件

10.1.1A/D转换基本知识采样保持量化编码数字信号模拟信号A/D转换过程A/D转换的常用技术有:逐次逼近式、双积分式、并行式和跟踪比较式等。逐次逼近式A/D转换器在精度、价格和速度上都适中,是目前最常用的A/D转换器A/D转换器的主要技术指标(1)转换时间从发出启动转换命令到转换结束获得整个数字信号为止所需要的时间。(2)分辨率分辨率表示转换器对微小输入量变化的敏感程度,通常用转换器输出数字量的位数来表示。例如,对8位A/D转换器,其数字输出量的变化范围为0~255,当输入电压的满刻度为5V时,数字量每变化一个数字所对应输入模拟电压的值为5V/255=19.6mV,其分辨能力即为19.6mV。当检测信号要求较高时,需采用分辨率较高的A/D转换器,目前常用的A/D转换集成芯片的转换位数有8位、10位、12位和14位等。(3)转换精度转换精度指的是转换后所得的结果相对于实际值的准确度,可以用满量程的百分比这一相对误差来表示,如±0.05%。ADC0832的引脚排列ADC0832的接口说明:(1)CS:片选端,低电平时选中芯片;(2)CH0:模拟输入通道0;(3)CH1:模拟输入通道1;(4)GND:芯片接地端;(5)DI:数据信号输入,选择通道控制;(6)DO:数据信号输出,转换数据输出;(7)CLK:芯片时钟输入;(8)VCC:电源输入端。DICLKDO数据输出数据输入端口禁用,不用理会该端口数据通道选择01234567数据高位在前数据高位在后ADC0832的时序当DI依次输入1、0时,只对CH0通道进行单通道转换;当DI依次输入1、1时,只对CH1通道进行单通道转换;当DI依次输入0、0时,将CH0作为正输入端“IN+”,CH1作为负输入端“IN-”;当DI依次输入0、1时,将CH0作为负输入端“IN-”,CH1作为正输入端“IN+”。实例76:基于ADC0832的5V直流数字电压表

数字电压表的接口电路原理及仿真效果图实现方法(1)ADC0832的启动(2)通道选择的实现开始启动ADC0832通道选择读取A/D值LCD显示10.2数/模(D/A)转换器件

D/A转换基本知识(1)转换时间一般在几十纳秒~几微秒。(2)分辨率

D/A能够转换的二进制位数,位数越多,分辨率

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论