《C51单片机知识总结.docx》由会员分享,可在线阅读,更多相关《C51单片机知识总结.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C51单片机知识总结 C51单片机学问总结单片机I/O口的运用51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。4个I/O端口都能作输入输出口用,其中P0和P2通常用于对外部存储器的访问。在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口运用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。下图为P0口的某位P0.n(n=07)结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及限制电路组成。从图中可以看出,P0口既可以作为I/O用,也可以作为地址/数据
2、线用。输出时CPU发出限制电平“0”封锁“与”门,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出驱动场效应管T2栅极接通。故内部总线与P0口同相。由于输出驱动级是漏极开路电路,若驱动NMOS或其它拉流负载时,须要外接上拉电阻。P0的输出级可驱动8个LSTTL负载。输入时-分读引脚或读锁存器读引脚:由传送指令(MOV)实现;下面一个缓冲器用于读端口引脚数据,当执行一条由端口输入的指令时,读脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线。读锁存器:有些指令如:ANLP0,A称为“读-改-写”指令,须要读锁存器。上面一个缓冲器用于读端口锁存器数据。*缘由:假如此
3、时该端口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时干脆读端口引脚信号,将会把原输出的“1”电平误读为“0”电平。现采纳读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避开上述可能发生的错误。*P0口必需接上拉电阻;在读信号之前数据之前,先要向相应的锁存器做写1操作的I/O口称为准双向口;三态输入缓冲器的作用:(ANLP0,A)准双向口:从图中可以看出,在读入端口数据时,由于输出驱动FET并接在引脚上,假如T2导通,就会将输入的高电平拉成低电平,产生误读。所以在端口进行输入操作前,应先向端口锁存器写“1”,
4、使T2截止,引脚处于悬浮状态,变为高阻抗输入。这就是所谓的准双向口。在系统扩展时,P0端口作为地址/数据总线运用时,分为:P0引脚输出地址/数据信息。CPU发出限制电平“1”,打开“与”门,又使多路开关MUX把CPU的地址/数据总线与T2栅极反相接通,输出地址或数据。由图上可以看出,上下两个FET处于反相,构成了推拉式的输出电路,其负载实力大大增加。P0引脚输出地址/输入数据输入信号是从引脚通过输入缓冲器进入内部总线。此时,CPU自动使MUX向下,并向P0口写“1”,“读引脚”限制信号有效,下面的缓冲器打开,外部数据读入内部总线。1.P2口作为一般I/O口CPU发出限制电平“0”,使多路开关M
5、UX倒向锁存器输出Q端,构成一个准双向口。其功能与P1相同。2.P2口作为地址总线在系统扩展片外程序存储器扩展数据存储器且容量超过256B(用MOVXDPTR指令)时,CPU发出限制电平“1”,使多路开关MUX倒内部地址线。此时,P2输出高8位地址。P1口、P3口的内部结构P1口的一位的结构它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成-准双向口。一、作为通用I/O口与P1口类似-准双向口(W=1)二、二、P3其次功能(Q=1)此时引脚部分输入(Q=1、W=1),部分输出(Q=1、W输出。综上所述:当P0作为I/O口运用时,特殊是作为输出时,输出级属于开漏电路,必需外接上拉电阻才会有
6、高电平输出;假如作为输入,必需先向相应的锁存器写“1”,才不会影响输入电平。当CPU内部限制信号为“1”时,P0口作为地址/数据总线运用,这时,P0口就无法再作为I/O口运用了。P1、P2和P3口为准双向口,在内部差别不大,但运用功能有所不同。P1口是用户专用8位准双向I/O口,具有通用输入/输出功能,每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时,该位的锁存器必需写入“1”,然后才能进入输入操作。P2口是8位准双向I/O口。外接I/O设备时,可作为扩展系统的地址总线,输出高8位地址,与P0口一起组成16位地址总线。对于8031而言,P2口一般只作为地址总线运用,而不作为I/O线
7、干脆与外部设备相连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外部写限制P3.7:RD外部读限制寄存器中断系统引起CPU中断的根源,称为中断源。中断源向CPU提出的中断恳求。CPU短暂中断原来的事务A,转去处理事务B。对事务B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。1、(P
8、3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标记IE0(TCON.1)置1,向CPU申请中断。2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标记IE1(TCON.3)置1,向CPU申请中断。3、TF0(TCON.5),片内定时/计数器T0溢出中断恳求标记。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。4、TF1(TCON.7),片内定时/计数器T1溢出中断恳求标记。当定时/计数器T1发生溢出时,置位TF1,并向CPU申
9、请中断。5、RI(SCON.0)或TI(SCON.1),串行口中断恳求标记。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。二、中断恳求标记1、TCON的中断标记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溢出中断恳求标
10、记位。2、SCON的中断标记RI(SCON.0),串行口接收中断标记位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。留意,RI必需由软件清除。TI(SCON.1),串行口发送中断标记位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必需由软件清除。380C51中断的限制一、中断允许限制CPU对中断系统全部中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE限制的。EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断0允许位;
11、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优先级设定位。而80C52单片机有四个中断优先级,即可实
12、现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的。PX0(IPH.0),外部中断0优先级设定位;PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断0优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS(IPH.4),串行口优先级设定位;PT2(IPH.5),定时/计数器T2优先级设定位。同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:80C51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优
13、先级别最高的中断恳求。正在进行的中断过程不能被新的同级或低优先级的中断恳求所中断。正在进行的低优先级中断服务,能被高优先级中断恳求所中断。为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来全部的中断恳求;另一个置1,表示正在响应低优先级中断,它将阻断后来全部的低优先级中断恳求。中断响应条件中断源有中断恳求;此中断源的中断允许位为1;CPU开中断(即EA=1)。以上三条同时满意时,CPU才有可能响应中断。80C51的定时/计数器实现定时功能,比较便利的方法是利用单片机内部的定时/计数器。也可以采纳下面三种方法:软件定
14、时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。采纳时基电路定时:例如采纳555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行限制和修改,即不行编程。采纳可编程芯片定时:这种定时芯片的定时值及定时范围很简单用软件来确定和修改,此种芯片定时功能强,运用敏捷。在单片机的定时/计数器不够用时,可以考虑进行扩展。扩展阅读:51单片机初学学问点总结51单片机初学学问点总结经过这半个月的学习,我对于单片机的定时器、对I/O口的随意操作、输入检测、中断(定时器的中断、单片机的外部中断)、串口通信等几高校习模块有了肯定了解和
15、驾驭。1.软件。我主要是在keiluvision3实现用C语言进行编程和调试。运用keil时,新建或者打开已有文件,按步骤一步步来,漏掉哪一步都会影响最终程序是否能顺当写入单片机中。其中应留意保存C文档、添加文件到工程中和建立hex文档这几个关键步骤。2.发光二极管和数码管的显示。发光二极管的静态显示是学习单片机的入门路标。分析相关模块的电路图,弄清晰引脚连接状况,依据电路图干脆限制LED引脚电位的凹凸就能实现对相应LED亮灭的限制。了解后完成走马灯(流水线)或更多其他规则的LED显示。数码管的显示较LED略微困难一点点,它分位选和段选,位选限制整个数码管的亮灭,段选限制各数码管以何种形式亮或
16、灭。数码管的显示分三步:(1).全部数码管显示一样的字符;(2).选定的数码管以规定的形式亮;(3).数码管的动态显示。其中利用定时器或者延时程序限制数码管动态显示的频率,以调整其显示亮度和视觉稳定度。用延时函数完成动态扫描:while(1)D1=nn/100;D2=nn%100/10;D3=nn%10;P1=0x01;P0=tabD1;delay(10);P1=0x02;P0=tabD2;delay(10);P1=0x04;P0=tabD3;delay(10);延时子程序:voiddelay(x)/延时1ms子程序unsignedchary;while(x-)for(y=110;y0;y-)
17、;3.定时/计数器。编号中断源0外部中断0(INT0)中断标记位终端服务程序入口优先级IE00003H最高1234定时/计数器0(T0)TF0外部中断1(INT1)串口IE1RI或TI定时/计数器1(T1)TF1000BH0013H001BH0023H次之次之次之最低关于定时/计数器的两个特别功能寄存器TMOD用于T1GATETCON用于定时/计数器TF1TR1TF0TR0IE1说明13位T/C16位T/C8位自动重装T/CT0分成两个独立的8位T/C,T1停止M1M0:工作方式设置位M1M0工作方式001101010123用于中断IT1IE0IT0C/TM1M0GATE用于T0C/TM1M0
18、GATE:门控位。GATE=0,用软件使TR0或TR1为1,就能启动定时/计数器;GATE=1,用软件使TR0或TR1为1,同事外部中断引脚也为高,启动。我们一般置GATE=0。C/T=0,位定时器;C/T=1,位计数器。对于定时时间的计算:t计数值N机器周期TN121focs或:要定时时间t=(65536-x)*(12/晶振频率)定时/计数器初始化步骤:(1)依据上面的信息,对TMOD赋初值,确定T0、T1的工作方式。(2)计算初值,将其写入TH0、TL0或TH1、TL1。(3)为中断方式时,对IE赋值,开放中断。(4)使TR0或TR1置高,启动定时/计数器。例:TMOD=0x01;/T0处
19、于工作方式1,为十六位定时/计数器TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;/T0初始化完毕定时子程序:voidtimer0()interrupt1/定时子程序TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(aa=10)aa=0;4.键盘。单片机键盘分独立键盘和矩阵键盘两类,矩阵键盘涉及键盘扫描程序。而与键盘按下有关的程序就要留意到消退抖动和松手检测两个重要的细微环节。松手检测原理是,当键按下时,key2为低,!key2=1,此时程序始终在while语句里面循环
20、,无法跳出来,一旦松手,key2为高,程序即可跳出while循环,执行下面接下来的语句。if(key2=0)delay(5);/延时5msif(key2=0)/确定key2键的确按下,消抖while(!key2);/松手检测5.串口通信。串行通信的传输速率用波特率表示。波特率定义为:每秒发送二进制数码的位数,单位为“bps”。波特率的计算公式:方式0的波特率=12SMOD方式1的波特率=(2方式2的波特率=(2SMODfosc)(T1溢出率)32)f64osc)(T1溢出率)32SMOD2方式3的波特率=(其中,T1溢出率=fosc12256-TH17698H。串行口限制寄存器SCONSCON
21、其中SM0与SM1为串行口工作方式选择位SM0SM1工作方式功能0011010101238位同步移位方式波特率543210(98H)RISM0SM1SM2RENTB8RB8TIfosc1210位异步收发器(UART)可变11位异步收发器(UART)fosc32或fosc6412位异步收发器(UART)可变(1)51单片机串行口工作方式0实质是并行的工作方式,为同步的移位输出和输入,但要实现工作方式0必需要借助外接移位寄存芯片,实际应用中常用作并行I/O口得扩展。它的波特率固定,且数据传送是以8位数为一帧,没有起始和停止位。(2)我主要探讨学习了串行口工作方式1,它的数据格式是:一个起始位,8个
22、数据位和一个停止位。设fosc=11.0592MHz,波特率为9600,则依据上面的公式,SMOD=0时,TH1=TL1=0xfd;SMOD=1时,TH1=TL1=0xfa。(3)工作方式2和3的帧格式一样,与工作方式1的类似,只是在原基础上多加了一位内容由用户确定的数据位。工作方式2的波特率与PCON个SMOD位有关。SMOD=1时,波特率为fosc32,SMOD=0时,波特率为fosc64。电源限制寄存器PCON(它不能位寻址)PCON797H6543210SMODSMOD为波特率倍增位。SMOD=1时,波特率增加一倍;复位时,SMOD=0。REN是允许接收限制位:REN=1时允许接收数据
23、;REN=0时禁止接收数据。TI是发送中断标记位:当发送完一帧数据后,该位由单片机自动置1,向CPU发送中断恳求信号。在中断服务程序中,必需用软件将其清0.RI是接收中断标记位:与TI类似,接收完一帧后自动被置1,需由软件置0.6.液晶显示。常见的单片液晶显示屏分16引脚和20引脚两种,我运用的是16引脚的YJD1602A-2。安装LCD时按如下三步走:(1)关闭开发板电源。(2)下载一个关闭数码管个流水灯的程序进单片机。(3)顺时针旋转相应电位器以调整LCD的对比度,知道看到5*7点阵。功能读状态读数据写数据输入RS=L,RE=H,E=HRS=H,RW=H,E=HRS=H,RW=L,D0D7
24、=数据,E=高脉冲输出D0D7=状态字无D0D7=数据无写指令RS=L,RW=L,D0D7=指令码,E=高脉冲这四种功能里面,读状态与读数据好用性不大,我们学习单片机时主要联系写指令和写数据,所以我们对RW置高,给E高脉冲,5引脚干脆接地。关于数据指针:显示模式:0x38限制信号RS0限制位DLR/W0指令代码D70D60D51D4D3D2FD10说明D00DLN详细设置表为:限制信号功能DL=0DL=1NFN=0N=1F=0接口总线为4位长度(仅D7D4有效),8位数据与指令代码按先高后低位的方向分两次传输显示1行字符行显示2行字符行5*7字符体LCD与单片机接口形式。(数据的传输方式)接口
25、总线为8位长度(D7D0有效)F=15*10字符体显示开关及光标:00001DCBD1开显示0关显示C显示光标不显示光标B光标闪耀光标不闪耀00001NS10当读/写一个字节后地址指针减一,且光标减一N当读/写一个字节后地址指针加一,且光标加一S当写一个字符,(N=1)整屏左移,当写一个字符,整屏显示不(N=1)整屏左移移动清屏:指令代码0x01。执行此指令,HD44780将DDRAM的数据全部写入“空白”的代码,清除所显示的内容,同事光标移到左上角。光标归位:指令代码0x02或0x03。AC(地址计数器)的值被清“0”,但是DDRAM(显示数据存储器)的逐句不变,光标移到左上角。移动光标:限
26、制信号0其中S/C和R/L的取值限制光标或字符的左右移动:限制位S/C0011写指令函数:voidwrite_com(ucharcom)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;写数据函数:voidwrite_date(uchardate)R/L01010x100x140x180x1c指令代码说明光标左移光标右移字符左移字符右移0000指令代码D2D1D01S/CR/L-RSR/WD7D6D5D4Drs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;7.IIC总线。IIC
27、总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。IIC总线在数据传送过程中有四种类型信号,他们分别是:起始信号、终止信号、应答信号和非应答信号。起始信号:SCL为高时,SDA有一个下降跳变。起始信号由主机产生。voidstart()/起始信号sda=1;delay();/5us就够了,所以这里只需一个指令周期scl=1;delay();sda=0;delay();终止信号:SCL为高时,SDA有一个上升跳变。终止信号也只能由主机产生。voidstop()/终止信号sda=0;delay();scl=1;delay();sda=1;delay();应答信号:IIC总线传送时每
28、字节为8位,从机在接收到一个字节的数据后,在第9位以低电平作为应答信号,同时要求主机在第9个时钟脉冲位上释放SDA线,以便从机发出应答信号,将SDA拉低,表示接收数据的应答voidrespons()/应答信号sda=0;delay();scl=1;delay();scl=0;delay();非应答信号:主机在第9位接收到非应答信号,则表示停止数据的发送或接收。voiddisrespons()/非应答信号sda=1;delay();scl=1;delay();scl=0;delay();移位操作:左移:最低位补0,最高位移入PSW的CY位右移:最高位补0,最低位移除器件地址:高四位固定,最低位确
29、定读/写,另外A0A2位与从机和总线的接法有关。1010A2A1A0R/W=0,写R/E=1,读主机进行写操作时,首先由主机发送起始信号,接着是高四位固定为1010而最低位位0的写器件地址,从机发送应答信号后,主机发送写数据地址,从机再次应答之后主机就可以发送数据了,接着从机发送应答信号或者非应答信号之后主机发送终止信号,如下图所示。主机进行读操作时,首先由主机发送起始信号,接着是高四位固定为1010而最低位位0的写器件地址,从机发送应答信号后,主机发送写数据地址,从机再次应答之后主机再次发送起始信号,接着是高四位固定为1010而最低位位1的读器件地址,从机应答之后就可以读数据了,接着主机发送
30、应答信号或者非应答信号之后主机发送终止信号,如下图。心得体会:以上是我依据这半个月学习的单片机学问和编写程序时的程序文档笔记整理的重要学问点和一些常常会用到的基本子函数。学习单片机的这半个月里,我由起先时想一口吃成胖子的急躁心理渐渐调整为了心平气和,按部就班的学习心态。我是跟着单片机相关的学习视频在学习,而只是跟着视频里面老师的讲解听的话,理解的总不会那么透彻,记忆也不会很深刻,只有举一反三的学习视频资料里面的内容加上自己亲自进行编程与调试后才能更好地驾驭所学的学问。在进行C语言编程过程中肯定要仔细细致,并留意养成良好的变成习惯,尽量保持程序工整明白,这也便利在出现问题时进行纠错和改错。友情提示:本文中关于C51单片机学问总结给出的范例仅供您参考拓展思维运用,C51单片机学问总结:该篇文章建议您自主创作。 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第16页 共16页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页