




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2008年12月16日C51单片机技术教程田希晖薛亮儒人民邮电出版社第1章C51单片机的组成及结构第2章C51单片机指令系统第3章单片机的C程序设计第4章C51单片机内部资源第5章单片机的系统扩展第6章单片机的机间通信第7章单片机人机交互的C编程第8章KeilC51上机指南第9章单片机系统综合实例笔记不是把所有知识点都记下。而是记那些需要学习的,或者总结得很好的东西。/指令系统的寻址方式和寻址空间序号寻址方式使用符号和变量寻址空间1立即数#data,#data16程序存储器(片内片外)64KB2直接direct或data,#data16内部RAM128B数据存储器(片外RAM)64KB访问SF
2、R的唯一方法3寄存器R0R7,A,B,Cy,DPTR片内RAM128B4寄存器间接R0,R1,SP片内RAM128BR0,R1,DPTR数据存储器(片外RAM)64KB5相对PC+rel(偏移量)程序存储器(片内片外)64KB6变址A+DPTR,A+PC同上7位bit内部RAM(20H2FH),SFR内部RAM数据传送指令示意图C51的数据类型1、基本类型、构造类型、指针类型、空类型2、基本类型:位型(bit)、字符型(char)、整型(int)、长整型(long)、浮点型(float)、双精度浮点型(double)3、构造类型:数组类型、结构体、共用体、枚举C51系列单片机将int型变量的高
3、位字节数存放在低地址字节中。浮点数存储格式IEEE754标准。24位精度,尾数的最高位始终为“1”,因而不保存,内存中字节存储顺序如下:1位符号位、8位指数位、23位尾数地址+0+1+2+3内容MMMMEMMSEE其中,S符号位,E阶码,M尾数C51的变量的存储类型存储类型与存储空间的对应关系data直接寻址片内数据存储区,访问速度快(128B)bdata可位寻址片内,允许位与字节混合访问(16B)idata间接寻址片内,可访问片内全部RAM地址空间(256B)pdata分贝寻址片外(256B)xdata片外(64KB)code程序存储器(64KB)变量说明举例:datacharvar;/字符
4、变量var定位在片内数据存储区charcodeMSG="PARAMETER"字符数组MSG口定位在程序存储区unsignedlongxdataarray100;无符号长整型数组定位在片外RAM区bitlock;unintxdatavector1044;sfrP0=0x80;charbdataflags;sbitflag0=flagsA0;指针变量说明举例:longxdata*px;指针px指向long型xdata区,指针本身位于在默认存储区,指针长度为2Bcharxdata*datapd;/指针pd指向字符型xdata区,自身在data区,长度为2Bdatacharxdat
5、a*pd;/同上(等效)dataint*pn;/和int*datapn及intr*pn等效,定义一个类型为int型的通用型指针,指针本身在data区,长度为3B。说明:指针指向的存储类型,即指向哪个存储区。存储类型的声明位置在数据类型和指针名(如*px)之间,如无此项声明,则此指针型变量为通用型。指针变量自身的存储类型,即指针处于什么区与自身的长度无关,该声明可位于声明语句的开关,也可在"*"和变量名之间。#include<reg51.h>特殊功能寄存器定义#include<absacc.h>绝对地址定义位变量及其定义1、位变量C51定义一般语法格式
6、:bit位变量名;如:bitlock_bit;2、采用字节寻址变量.位的方法。如:bdataintibase;sbitmybit=ibaseA15;3、函数可包含类型为bit的参数,也可将其作为返回值。但注意,使用(#pragmadisable)或包含明确的寄存器组切换(usingn)的函数不能返回位值。4、对特殊功能寄存器的位的定义。例:#include<reg51.h>sbitP1_1=P1A1;/无名位sbitac=ACCA7;/无名位RS1=1;RS0=0;有名位sbitOV=0xD0A2;sbitCY=PSWA7;5、对位变量定义的限制。位变量不能定义为指针、数组。左移逻
7、辑右移或算术右移,取决于计算机系统。看懂下面的就很容易理解头文件absacc.h中的绝对地址访问了。一般指针包括3字节:2字节偏移和1字节存储器类型:即地址+0+1+2内容存储器类型偏移量高位偏移量低位其中,存储器类型编码如下:存储器类型idataxdatapdatadatacode编码值12345例,以xdata类型的0x1234地址作为指针可以表示如下:地址+0+1+2内容0x020x120x34常数作指针时,必须注意正确定义存储类型和偏移。例:把常数0x40写入地址为0x8000的外部数据存储器。#defineXBYTE(char*)0x20000L)XBYTE0x8000=0x40;其
8、中,XBYTE被定义为(char*)0x20000L,0x20000L为一般指针,其存储类型为2,偏移量为0x0000,这样XBYTE成为指向xdata零地址的指针,而XBYTE0x8000则是外部数据存储器的0x80000绝对地址。/后面还有头文件absacc.h中其化存储区的绝对地址访问定义共用体变量可在不同时间内保存不同类型和长度的数据,从而提供了在同一存储单元中可以分时操作不同类型数据的功能。unionUuintword;structucharhi;ucharlo;bytes;unionUnewcount;unitoldcount;newcount.bytes.hi=TH1;newco
9、unt.bytes.lo=TL1;oldcount=newcount.word;这样,定时器的计数值即可以按字节使用,也可以按字使用。函数“声明”和“定义”:“定义”是指对函数功能的确定,包括指定函数名、函数值类型,形参及其类型、函数体等,它是一个完整的、独立的函数单位;而“声明”的作用则是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以使在调用该函数时系统按此对照检查。函数指针即函数入口地址。对用函数的指针变量调用函数可归纳为如下几点:(1)指向函数的指针变量的一般定义形式为:函数值返回类型(*指针变量名)(函数形参表);(2)在给函数指针变量赋值时,只需给出函数名。(3)对
10、指向函数的指针变量进行诸如p+n,p+,p-的运算是没有意义的。C51的库函数1字符函数库CTYPE.HexternbitF(char);其中,F可以为isalpha/isalnum/iscntrl/islower/isupper/isdigitalexterncharF(char);其中,F可以为toint/toupper/tolower2标准函数库STDLIB.HexternTatoX(char*S);其中,T可以是float/long/int,X与T对应分别为f/l/ivoid*malloc(unsignedintsize);/申请内存voidfree(void*p);/释放内存void
11、initmempool(void*p,unsignedintsize);/清零内存区3数学函数库MATH.HexternTabs(Tval);其中,T可以是float/long/int/charexternfloatexp(floatx);/e的指数externfloatlog/log10(floatx);/e或10的对数externfloatsqrt(floatx);/平方根externfloatsin/cos/tan(floatx);/三角函数externfloatpow(floatx,floaty);/x的y次方4绝对地址访问头文件ABSACC.H#defineXBYTE(unsigne
12、dchar*)0x20000L;PBYTE3DBYTE4CBYTE5以上定义用来对C51系列单片机的存储空间进行地址访问,以字节为单位寻址。只需将BYTE换成WORD,就可以实现以字为单位寻址。5内部函数库INTRINS.H/将变量循环左/右移n位unsignedchar_crol_(unsignedcharval,unsignedcharn);int_irol_intlong_lrol_longunsignedchar_cror_(unsignedcharval,unsignedcharn);int_iror_intlong_lror_long/对应汇编的NOP指令,延时一个机器周期void
13、_nop_(void);/测试给定的位参数x是否为1。若为1,返回1,同时将该位复位为0;否则返回0。bit_testbit_(bitx);6访问SFR和SFR_bit地址头文件REGxxx.H头文件reg51.h、reg52.h等文件中定义了C51单片机中的SFR寄存器名和相关的位变量名。编程举例循环队列是一种FIFO存储结构,在单片机应用程序中经常使用。队列需要队头指针listhead、队尾指针listtail、队列长度listlen、队列空标志listempty和队列满标志listfull初始时,listhead=listtail=0,listempty=listfull=0。需要定义两
14、个函数,操作队列listwrite()、listread()。iswrite()函数的操作思路:if(队列满)退出;else/将数据写入listtail指向的数组单元listtail+;if(listtail=listlen)listtail=0;listempty=0;if(listhead=listtail)listfull=1;listread()/函数的操作思路:if(队列空)/退出else/将listtail指向的数组单元的内容读出;listhead+;if(listhead=listlen)listhead=0;listfull=0;if(listtail=listhead)lis
15、tempty=1;函数的实现:#definelistlen=10;unsignedcharlistlistlen;charlistwrite(charx)if(listfull)return0;else/将数据写入listtail指向的数组单元listtail+;if(listtail=listlen)listtail=0;listempty=0;if(listhead=listtail)listfull=1;return1;charlistread(char*x)if(listempty)return0;else/将listtail指向的数组单元的内容读出;listhead+;if(list
16、head=listlen)listhead=0;listfull=0;if(listtail=listhead)listempty=1;return1;习题与思考:(挑了几个问答)1 .C语言中的类型是怎么分配的?什么是赋值操作?2 .C语言的函数有什么特性?函数的存储类型和数据类型的意义是什么?3 .当一个函数需要返回多个值时,可以怎么做?4 .编写把字符串s逆转的函数reverse。5 .把上面的函数写成递归函数。精选范本第4章C51单片机的内部资源重点及难点单片机中断和定时与单片机通信的基本概念、单片机的中断系统、单片机的定时/计数器、单片机外部中断源的扩展、数据传递的方式、串行通信控制
17、寄存器、MCS-51串行通信工作方式及其应用。基本要求1 .掌握单片机中断和定时与单片机通信的基本概念2 .掌握单片机的中断源、中断控制、中断响应过程的基本概念及单片机系统的功能和使用方法3 .掌握单片机的定时/计数器的初值计算、工作方式控制寄存器的初始化、程序的设计方法和步骤4 .串行通信的基本方式、数据传送的次序、串行通信控制器的每一位的定义、串行通信的四种工作方式5 .了解单片机外部中断源扩展的常用方法和步骤教学内容1、中断系统2、定时/计数器3、串行通信接口无条件传送方式、程序查询方式、中断传送方式中断系统:中断的基本概念、中断源、外部中断、内部中断、中断入口地址中断控制:TCON、I
18、E、IP,SCON中断控制寄存器汇总寄存器名称D7D6D5D4D3D2D1D0定时/计数器TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0位地址略串行口控制SCON(98H)SM0SM1SM2RENTB8RB8TIRI寄存器位地址略中断允许寄IE(A8H)EA/ESET1TX1ET0EX0存器位地址略中断优先级IP(B8H)/PSPT1PX1PT0PX0寄存器位地址略中断响应:中断响应的条件、中断响应的过程、中断响应时间、中断请求的撤销、寄存器组切换/下面的话让人晕是他没讲清,还是我没搞清呢不要紧看懂后面的就可以了。寄存器组切换,在汇编语言中由编程者选择。但对混合语言编程的连
19、接器,汇编程序使用的组可被选定,因而连接器不能像普通存储器那样分配寄存器组。在C51中,寄存器组选择取决于特定的编译器指令。高优先组中断可以中断正在处理的低优先级程序,因而必须注意寄存器组。除非可以确定未使用R0R7(用汇编程序),最好给每种优先级程序分配不同的寄存器组。中断不允许用于外部函数,它对函数目标代码影响有收下几点:(1)当调用函数时,SFR的ACC、B、DPH、DPL、PSW。(当需要时)入栈。(2)如果不使用寄存器组切换,甚至中断函数所需的所有工作寄存器都入栈。(3)函数退出前,所有的寄存器内容出栈。(4)函数由8051的指令RETI终止。中断服务程序使用的任何程序也使用一寄存器
20、组。递归程序可以使用,它们自己调用自己是因为它们依赖堆栈。在中断程序的编写中应该注意以下几点:(1)采用开中断总控制开关EA置位中断源的中断允许位;(2)对外部中断INTO、INT1应选择中断触发方式;(3)对于多个中断源中断,应设定中断优先级和预置IP;(4)编写中断服务程序应注意保护现场和恢复现场,以免中断返回时丢失原寄存器、累加器中的信息;(具体要保护哪些东西视CPU中断机制和需要而定)(5)若要在挂靠当前中断程序时禁止更高优先级中断,可以采用软件关CPU中断或禁止某中断源中断,在中断返回前再开放中断。中断服务程序的完整语法如下:返回值函数名(参数)模式重入interruptnusing
21、ndate:2008年12月17日要画图!如果通用语言简述就好了,但要描述准确哦。电脑画图麻烦。但要做笔记,还怕麻烦?EG:图P1.4P1.7接4个LED(即发光二极管),P1.0P1.3接4个KEY(即开关),消抖电路用于产生中断请求信号,通过每中断一次,开关状态反映到/INTO/(负电平输入不方便)。要求:开始时LED全黑;中断编程实例图P1 3INTOPl 7EALED上,且开关断开时对应LED亮。#include<reg51.h>sbitP1_0=P1A0;sbitP1_7=P1A7;unsignedcharbreaks;bitflag;voidsevice_intO()i
22、nterrupt0using2/INTO中断服务程序,使用第2组寄存器flag=l;/置标志breaks=P1;/存状态voidmain()IP=0x01;/置INTO高优先级中断IE=0x81;/INTO开中断,CPU开中断for(;)if(flag) / 查询方式P14=P10P15=P11P16=P12P17=P13flag=0;/处理完成清除标志4.3定时/计数器不管是独立的定时器芯片还是单片机内的定时器都有以下特点:(1)定时/计数有多种方式,可以是计数方式也可以是定时方式。(2)计数初值可设定,计数溢出时发出中断申请。51单片机有两个加1计数器T0、T1。分别由两个8位寄存器构成。
23、由TMOD、TCON设定工作方式。两个定时器都有定时或事件计数功能,可用于定时控制、对外部事件计数和检测等场合。1定时工作方式计数机周期(fosc/12)2计数工作方式通过T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当检测到下降沿时,计数器加1.由于检测一个1到0的跳变需要2个机器周期,故最高计数频率为fosc/24。虽然对输入信号占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次要求电平保持时间至少是一个完整的机器周期。4.3.1TCON和TMODTCON:TF1TR1TF0TR0IE1IT1IE0IT0TMOD:GATEC/TM1M0工作方式:013位计数器(低5位,高
24、8位)1 16位。2 初值自动重装8位3 2个8位,仅适用于T0/下面描述得很好工作方式3下,T0被拆成2个独立的8位计数器TL0和TH0。其中TL0即可以计数使用,又可以定时使用,使用T0的控制位和控制引脚信号。在方式3下,T0、T1的设置和使用是不同的。(1) T0方式3TL0:使用T0原有控制资源(控制位和引脚信号)TH0:借用T1的TR1、TF1,只能作8位定时器。(2) T0方式3下白TT1T0方式3时,T1仍然可工作于方式02.C/T控制位仍可使T1工作在定时器或计数器方式,只是由于其TR1、TF1被T0的TH0占用,因而没有计数溢出标志可供使用,计数溢出时只能将输出结果送到串行口
25、,即用作串行口波特率发生器。T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更合适。定时/计数器的应用实例EG设单片机的fosc=12MHz,要求在P1.0脚上输出周期为2ms的方波。分析:周期为2ms的方波要求定时时间间隔1ms,每次时间到P1.0取反。定时器计数率=fosc/12,机器周期=12/fosc=1us计数次数=1000/(12/fosc)=1000/1=1000定时初值-1000(1)用定时器0的方式1编程,采用查询方式#include<reg51.h>sbitP1_0=P1A0;voidmain()TMOD=0x01;/T0方式1TR0=1;/启动
26、T0for(;)TH0=-(1000/256);TL0=-(1000%256);while(!TF0);/查询等待TF0置位P1_0=!P1_0;/TF0=0;/软件清TF0(2)用定时器0的方式1编程,采用中断方式voidinclude<reg51.h>sbitP1_0=P1A0;voidtimer0()interrupt1using1P1_0=!P1_0;/TH0=-(1000/256);TL0=-(1000%256);voidmain()TMOD=0x01;TH0=-(1000/256);TL0=-(1000%256);EA=1;ET0=1;TR0=1;dowhile(1);
27、EG:采用10MHz晶振,在P1.0脚上输出周期为2.5s,占空比20%的脉冲信号。分析:由于采用10MHz晶振,使用定时器最大定时几十ms。即10ms定时,周期2.5s需要250次中断,占空比20%,高电平应为50次中断。采用10ms定时,晶振fosc=10MHz,因此需定时器计数次数=8333#include<reg51.h>#defineuncharunsignedcharuchartime;/计数中断次数ucharperiod=250;/周期为2.5s,中断周期10ms,250次ucharhigh=50;/占空比20%voidtimer0()interrupt1using1
28、TH0=-8333/256;TL0=-8333%256;if(+time=high)P1=0;elseif(time=period)time=0;P1=1;voidmain()TMOD=0x01;TH0=-8333/256;TL0=-8333%256;EA=1;ET0=1;TR0=1;while(1);EG:设P1口的P1.0和P1.1上有2个开关S1和S2,周期开始时全关。2s以后S1开,0.1s后S2开,S1保持开2.0s,S2保持开2.4s,周而复始。采用10MHz晶振。分析:根据要求,P1.0和P1.1开始顺序为:(关关)2s后(关开)0.1s后(开开)1.9s后(开关)0.5s后(关
29、关)采用10MHz晶振,每10ms中断一次,0.1s对应10次,开关变化对应的中断次数位置为0、200、210、400、450;相应的P1.0输出0、1、3、2#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchari;/当前状态uinttime;/中断次数codestructintposition;charpattern;next尸/采用结构数组定义时间和输出的对应关系0,0X00,200,0X01,210,0X03,400,0X02,450,0XFF;voidtime0()interrupt1usi
30、ng1TH0=-8333/256;TL0=-8333%256;time+;if(time=nexti.position)if(nexti.pattern=0xff)i=time=0;/以0XFF判断周期的结束P1=nexti+.pattern;voidmain()P1=0;time=0;i=1;TMOD=0x01;TH0=-8333/256;TL0=-8333%256;EA=1;ET0=1;TR0=1;for(;)4.4串行通信接口4.4.1 串行通信基础知识1 .数据通信的基本概念通信是指CPU与外围设备之间的数据传送、转换和处理。数据通信方式有两种:并行数据通信和串行数据通信。串行数据通信
31、是指数据按位顺序进行传送的通信方式。其特点是数据传送是一位一位进行传送的,最少只需要一根传输线即可完成,成本低但速度慢。并行数据通信是指数据的各位同时进行传送的通信方式。其特点是各数据位同时传送,传送速度快、效率高。2 .异步通信和同步通信 异步串行通信以字符为单位。/*串行异步传送的字符格式*/书上有,网上有,理解了才是实在。对异步串行通信的字符格式作如下说明:起始位、数据位(低位在前/左)、奇偶校验位、停止位、空闲位 同步通信收发时钟同步,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示。3 .串行通信的数据通路形式单工(Simplex)形式、全双工(
32、Full-duplex)形式、半双工(Half-duplex)形式。串行通信数据通踣形式单工方式半双工方式全双工方式4 .串行接口的基本任务在串行通信中,通信双方都按通信协议进行。所谓通信协议就是通信双方必须共同遵守的一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义串行接口的任务主要包括以下几个方面。(1)实现数据格式化(2)进行串、并转换(3)控制数据的传输速率(4)进行传送错误检测5 .波特率和接收/发送时钟异步串行通信的传送速率一般为509600波特,常用于计算机到CRT终端和字符打印机之间的通信、直通电报以及无线电通信的数据发送等。6 .4.2C51串行
33、接口C51单片机有一个强编程的全双工异步串行通信接口,它可作UART用,也可作同步移位寄存器,其帧格式可有8位、10位或11位,并能设置各种波特率,给使用者带来很大的设计灵活性。1 .串行口寄存器结构2 .串行接口控制SBUFSCON:SM0SM1SM2REMTB8RB8TIRIPCON:SMOD/GF1GF0PDIDL(由于PCON寄存器不能进行位寻址,因此,表中写出的是“位序”而不是“位地址”)3.串行接口的工作方式方式0 8位同步移位寄存器,串行数据通过定波特率fosc/12方式1 10位异步通信方式,1位起始位(方式2和3 9位异步通信接口,一帧信息由RXD输入/输出,TXD输出移位时
34、钟脉冲。固0)、8位数据位和1位停止位(1)。11位组成。多机通信4.波特率的设计方式0、2波特率固定;方式1、3波特率由定时器T1的溢出率确定。(1)方式0的波特率不受SMOD位的影响。固定为fosc/12(2)方式2的波特率2Asmod*fosc/64(3)方式1、3的波特率2Asmod*定时器T1的溢出率T1的溢出周期=12/fosc*(M-X)5.串行口初始化(1)串行口波特率表串行口常用的波特串行口波特率常用于和微机的通信,选用晶振和波特率都相对固定。率及相应的设置串行口的常用波特率串行口工作方式波特率fosc=6MHzfosc=12MHzfosc=11.059MHzSMODTMOD
35、TH1SMODTMODTH1SMODTMODTH1方式01MHzXXX方式2375k1XX187.5k1XX0XX方式1或方式362.5k120FFH19.2k120FDH9.6k020FDH4.8k120F3H020FAH2.4k120F3H120F3H020F4H1.2k120FFH020E6H020F8H600120E6H020CCH020D0H300020CCH02098H020A0H137.51201DH0201DH0202EH110020E6H010FEEBH010FEFFH(2)初始化步骤确定定时器T1的工作方式,即编程TMOD寄存器;计算定时器T1的初值,即装载TH1、TL1;
36、 启动定时器T1,即编程TCON中的TR1位; 确定串行口的控制,即编程SCON; 串行口中中断方式工作时,须开CPU和源中断,即编程IE寄存器。6.串行口的应用编程EG:单片机fosc=11.0592MHz,波特率9600,各设置32个字节的队列缓冲区用于发送接收。设计单片机和终端或另一计算机通信的程序。分析:单片机串行口初始化为9600波特,中断程序双向处理字符,程序双向缓冲字符。背景程序可以“放入”和“提取”在缓冲区的字符串,而实际传入和传出SBUF的动作由中断完成。Loadmsg函数加载缓冲数组,标志发送开始。缓冲区分为发(t)和U(r)缓冲。缓冲区通过两种指示(进in和出out)和一
37、些标志(满full、空empty、完成done)管理。队列缓冲区32字节长为循环队列,由简单的逻辑与(&)操作管理,它比取模()操作运行更快。当r_in=r_out接收缓冲(r_buf)区满,不能再有字符插入;当t_in=t_out,发送缓冲区(t_buf)空,发送中断清除,停止UART请求。具体程序如下:#include<reg51.h>#defineucharunsignedcharucharxdatar_buf32;/背景程序“放入”和“提取”字符的队列缓冲区ucharxdatat_buf32;ucharr_in,r_out,t_in,t_out;/队歹1J指针bit
38、r_full,t_empty,t_done;/缓冲区状态标志codeucharm尸"thisisatestprogramrn"voidserial。interrupt4using1/*串行口中断服务程序,从RI、TI判别接收或发送中断,由软件清除。判别缓冲区状态(满full和空empty)和全部发送完成(done);*/if(RI&&!r_full)r_bufr_in尸SBUF;RI=0;r_in=+r_in&0x1f;if(r_in=r_out)r_full=1;elseif(TI&&!t_empty)SBUF=t_buft_out
39、;TI=0;t_out=+t_out&0x1f;if(t_out=t_in)t_empty=1;elseif(TI)TI=0;t_done=1;voidloadmsg(ucharcode*msg)/*此函数把字符放入发送缓冲区,准备发送*/while(*msg!=0)&&(t_in+1)At_out)&0x1f)!=0)/*测试缓冲区满*/tbuftin=*msg;msg+;t_in=+t_in&0x1f;if(t_done)TI=1;t_empty=t_done=0;/*若完成重新开始*/voidprocess(ucharch)return;/*接收字
40、符的处理程序,实际应用自定义*/voidprocessmsg(void)/*此函数逐一处理接收缓冲区的字符*/while(r_out)+1Fr_in)!=0)/*接收缓冲区非空*/process(r_bufr_out);r_out=+r_out&0x1f;voidmain()/*主程序即背景程序,进行串行口的初始化、载入字符、处理接收的字符串*/TMOD=0x20;/T0方式2TH1=0xfd;/9600波特11.0592MHzTCON=0x40;/启动T1SCON=0x50;/允许接收IE=0x90;/允许串行口中断t_empty=t_done=1;r_full=0;r_out=t_
41、in=t_out=0;r_in=1;/接收缓冲区和发送缓冲区置空for(;)loadmsg(&m);/&m?processmsg();习题和思考题:1 .C51系列单片机有几个中断源,各中断标志是如何产生的,又是如何清0的?CPU响应中断时,它们的中断矢量地址分别是多少?2 .C51系列单片机有几个中断优先级?如何设定?3 .设fosc=6MHz,外部中断采用电平触发方式,那么中断请求信号的低电平至少应持续多少us?4 .希望8051单片机定时器T0的定时值以内部RAM的20H单元的内容为条件而可变:当(20H)=00H时,定时值为10ms;当(20H)=01H时,定时值为20
42、ms。请根据以上要求对定时器T0初始化。设fosc=12MHz。5 .串行接口有哪几种工作方式?各有什么特点?6 .若异步通信接口按方式3传送,已知每分钟传送3600个字符,其波特率是多少?C51单片机的系统扩展重点与难点单片机系统扩展的基本概念、程序存储器扩展、数据存储器扩展、I/O口扩展。基本要求1 .掌握单片机系统扩展的基本概念2 .掌握程序存储器扩展方法3 .掌握数据存储器扩展方法4 .掌握常用扩展芯片8255、8253、8155、I2C接口芯片24C02、SPI接口芯片X5045和单片机配置FPGA的使用方法本章内容1 .系统扩展概述2 .程序存储器的扩展3 .数据存储器的扩展4 .
43、可编程外围并行接口82555 .可编程外围定时器82536 .可编程并行接口芯片81557 .I2C接口芯片AT24C018 .SPI接口芯片X50459.单片机配置FPGA5.1 系统扩展概述(1) C51单片机的最小系统(2)系统扩展结构:系统总线(AB、DB、CB)和总线构造(单片机没有提供专用的地址线和数据线,而是采用I/O口线的复用技术,把I/O口改造为总线)“构造”总线的具体方法包括以下几个方面:以P0口的8位口线作地址/数据线以P2口的口线作高位地址线控制信号线:使用ALE作地址锁存的选通信号,以实现低8位地址的锁存;以/PSEN信号作扩展程序存储器的读选通信号;以/EA信号作内
44、外程序存储器的选通信号;以/RD和/WR作为扩展数据存储器和I/O端口的读写选通信号。(3)单片机的串行扩展技术串行接口可以减少封装引脚,降低成本,简体系统结构,增加系统扩展的灵活性。5.1.3C51单片机存储器扩展与编址技术1单片机存储器系统图单片机系统的存储器结构和存储空间分配FFFFHcoco H64KB片外RAM2扩展存储器编址技术线选法、译码法常用译码芯片有74LS139(双24译码器)和74LS138(38译码器)等,它们的CMOS型芯片分别是74HC139和74HC138.线选法译码法5.2程序存储器的扩展1 .单片程序存储器扩展EPROM是单片机最常选用的程序存储器芯片,它是一
45、种紫外线可擦除、电可编程的存储器,最经常使用是的27C系统的EPROM,如27C16(2K)、27C32(4K)、27C64(8K)、27C128(16K)、27C256(32K),其芯片引脚如图(略A0Ax、O0O8、/CE、/OE、Vcc、GND)。除了27C16和27C32为24脚外,其余均为28脚。芯片型号的高两位数字27表示EPROM,位数字表示存储容量的Kbit值。2 .多片程序存储器扩展/这个很简单的3 .2.2扩展(E2PROM)E2PROM是一种电可编程的存储器,最经常使用的并口E2PROM有高压编程的28C16(2K)、28C17(2K)和28C64(8K),低压编程的28
46、C16A(2K)、28C17A(2K)和28C64A(8K)等;最经常使用的串口E2PROM有24C01(1K)、24C02(2K)、24C04(4K)等,它们将在5.7节中进行介绍。其中,28C16和28C17都是2K的存储器,它们的区别在于:一种有28个引脚,另一种只有24个引脚;另外28C17增加了一种检测写周期结束的方法,利用增加的引脚RDY/BUSY来表示写操作何时完成。当写操作开始后,该引脚输出为低电平,当写操作结束时,该引脚输出高电平,这样通过该引脚的信号就可以指示与其接口的微处理器进行合适的操作。当使用E2PROM作为存储器使用时,它与CPU的接线和使用EPROM的扩展接线非常
47、相似,也是按照三总线的扩展原则进行接线,不同之处在于为了在线改写,单片机的/WR端与E2PROM的/WE端相接。5.3 数据存储器的扩展随机存储器(RandomAccessMemory)简称为RAM,在单片机系统中用于存放可随机修改的数据,因此在单片机领域中也称为数据存储器。按照半导体工艺,RAM分为MOS型和双极型两种,MOS集成度高、功耗低、价格便宜,但速度慢,而双极型的特点则正好相反。在单片机系统中使用的大多数是MOS型的RAM,它们的输入输出信号能与TTL相兼容,所以在扩展信号连接时很方便。数据存储器扩展常使用RAM芯片,用得较多的是Intel公司的6116(静态RAM)和6264。芯
48、片引脚图略,6116弓I脚有D0D8,A0A10,/CE片选信号,/WE写选通信号,/OE数据输出允许信号,Vcc,GND。有数据读出、数据写入、高阻3种工作方式。单片数据存储器扩展多片数据存储器扩展5.4 可编程外围并行接口8255A5.4.18255A的引脚功能和逻辑结构8255A是可编程的并行I/O接口芯片,常用来实现C51系列单片机的并行I/O口扩展。封装DIP40,有A、B、C三个可编程的8位I/O接口。8255A引脚图略(Protel元件符号)8255A引脚功能表名称引脚功能D7D027-34双向数据总线PA7PA0PA7PA0PA7PA037-40,1-425-181013,17
49、14AB口的8位I/O引脚C/CSA1A068、9片选端地址线,选择控制寄存器或A、B、C口中的一个/RD5读,使8255A送数据或状态信息到CPU。/WRRESET3635写,使CPU输出数据或控制字到8255A复位,使扩展字寄存器等各内部寄存清除,置A、B、C口为输入GNDVcc726地线+5V电源8255A的内部结构按功能可分为3个逻辑电路部分,即口电路、总线接口电路和控制电路。如下图。8255A内部逻辑结构图(略,网上找)1.口电路8255A有3个8位口,其中A、B是单纯的数据口,供数据I/O使用;而C口既可作数据口,又可作控制口使用,用于实现A口和B口的控制功能。因此,在使用中常把C
50、口分为上下两部分:C口高位部分(PC7PC4),和A口组成A组;C口低位部分(PC3PC0),和B口组成B组。2.总线接口电路(1)数据总线缓冲器(2)读写控制逻辑8255A读/写控制逻辑/CSA1A0所选端口/RD/WR操作000A口01A001B口01读端口B010C口01C000A口10A001B口10写端口B010C口10C011控制寄存器10写控制字1XX/XX数据总线缓冲器输出高阻抗3.控制逻辑电路包才A级控制和B组控制,合在一起构成8位控制寄存器,用于存放各口的工作方式控制字。5.4.28255A的工作方式及数据I/O操作1.8255A的工作方式(1)方式0:基本输入/输出方式方式0下,可供使用的是两个8位口(A口和B口)及两个4位口(C口高低位部分)。4个口可以是输入和输出的任何组合。方式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福州英华职业学院《专项理论与实践II》2023-2024学年第二学期期末试卷
- 2025河北省建筑安全员C证考试(专职安全员)题库附答案
- 苏州市职业大学《涡轮发动机飞机结构与系统》2023-2024学年第二学期期末试卷
- 辽宁科技学院《起重机械结构力学》2023-2024学年第二学期期末试卷
- 南阳师范学院《网络经济》2023-2024学年第二学期期末试卷
- 浙江科技学院《环境数据处理》2023-2024学年第二学期期末试卷
- 沧州幼儿师范高等专科学校《诊断学基础A》2023-2024学年第二学期期末试卷
- 宿州航空职业学院《基地社工服务与田野基地建设》2023-2024学年第二学期期末试卷
- 重庆城市管理职业学院《口腔固定修复学》2023-2024学年第二学期期末试卷
- 江西冶金职业技术学院《内燃机学》2023-2024学年第二学期期末试卷
- 氩气安全技术说明书MSDS
- 汽车运行材料ppt课件(完整版)
- 四年级数学下册教案-练习一-北师大版
- GB∕T 1732-2020 漆膜耐冲击测定法
- 2022《化工装置安全试车工作规范》精选ppt课件
- Q∕GDW 12067-2020 高压电缆及通道防火技术规范
- 汽车系统动力学-轮胎动力学
- 《经济研究方法论》课程教学大纲
- 10T每天生活污水处理设计方案
- 中国民航国内航空汇编航路314系列航线
- 山西特色文化简介(课堂PPT)
评论
0/150
提交评论