济大单片机实验指导书_第1页
济大单片机实验指导书_第2页
济大单片机实验指导书_第3页
济大单片机实验指导书_第4页
济大单片机实验指导书_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机实验指导书电子信息与通信工程系2014-3-6第一部分 单片机功能及结构介绍MCS-51单片机内部结构MCS-51的引脚说明:MCS-51系列单片机AT89SXX的引脚配置图如下:Pin19:时钟XTAL1脚,片内振荡电路的输入端。Pin18:时钟XTAL2脚,片内振荡电路的输出端。AT89SXX的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(0-33MHz)和振荡电容,振荡电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。Pin9:RESET/Vpd复位信号复用脚。8051的初始态如下表:特殊功能寄存器初

2、始态特殊功能寄存器初始态ACC00HB00HPSW00HSP07HDPH00HTH000HDPL00HTL000HIPxxx00000BTH100HIE0xx00000BTL100HTMOD00HTCON00HSCONxxxxxxxxBSBUF00HP0-P31111111BPCON0xxxxxxxB8051的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个

3、1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。Pin31:EA/Vpp程序存储器的内外部选通线,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。MCS-51单片机的指令时序MCS-51的时序单位有四个:节拍、状态、机器周期和指令周期。1个节拍(P)=1个振荡脉冲周期1个状态

4、(S)=2个节拍=2个振荡脉冲周期1个机器周期(T)=6个状态=12个振荡脉冲周期1个指令周期=几个周期周期MCS-51单片机存储器结构程序存储器MCS-51具有64kB程序存储器寻址空间,对于内部有ROM的AT89SXX等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。0000H0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中放一条无条件转移指令,让CPU直接去执行用户指定的程序。0003H002AH,这40个单元各有

5、用途,它们被均匀地分为五段,它们的定义如下:0003H000AH外部中断0中断地址区。000BH0012H定时/计数器0中断地址区。0013H001AH外部中断1中断地址区。001BH0022H定时/计数器1中断地址区。0023H002AH串行中断地址区。数据存储器MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外部数据存储区。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别)。MCS-51的数据存储器均可读写,部分单元还可以位寻址。8051内部RAM共有256个单元,这256个单元分为两部分。其一是地址从00H7FH单元

6、(共128个字节)为用户数据RAM。从80HFFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。在00H1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0R7来命名,称为通用寄存器。由程序状态字寄存器(PSW)来管理它们,CPU只要定义PSW的第3和第4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如图2所示。单元地址MSB位地址LSB2FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H

7、65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH

8、0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00HMCS-51单片机存储器结构特殊功能寄存器MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80HFFH地址中,用户不能修改其结构。表2是特殊功能寄存器分布一览表。标识符号地址寄存器名称ACC0E0H累加器B0F0HB寄存器PSW0D0H程序状态字SP81H堆栈指针DPTR82H、83H数据指针(16位)含DPL和DPHIE0A8H中断允许控制寄存器IP0B8H中断优先控制寄存器P080HI/O口0寄存器P190HI/O口1寄存器P20A0HI/O口2寄存器P30B0HI/O口3寄存器PCON8

9、7H电源控制及波特率选择寄存器SCON98H串行口控制寄存器SBUF99H串行数据缓冲寄存器TCON88H定时控制寄存器TMOD89H定时器方式选择寄存器TL08AH定时器0低8位TH08CH定时器0高8位TL18BH定时器1低8位TH18DH定时器1高8位程序计数器PC(program Counter)PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。累加器ACC(Accum

10、ulator)累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。寄存器B在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。程序状态字(Program Status Word)程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PS

11、W.1是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:程序状态字位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位标志CYACF0RS1RS0OV-PPSW.7(CY)进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。PSW.6(AC)辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。PSW.5(F0)用户标志位,供用户设置的标志位。PSW.4、PSW.3(RS1和 RS0)寄存器组选择位。可参见本

12、章的图2定义。PSW.2(OV)溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。PSW.0(P)奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。数据指针(DPTR)数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。堆栈指针SP(Stack Pointer)堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后

13、,SP的初始值为07H,使得堆栈实际上是从08H开始的。I/O口专用寄存器(P0、P1、P2、P3)I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口锁存器。数据传送都统一使用MOV指令来进行,这样的好处在于,四组I/O口还可以当作寄存器直接寻址方式参与其他操作。定时/计数器(TL0、TH0、TL1和TH1)MCS-51单片机中有两个16位的定时/计数器T0和T1,它们由四个8位寄存器组成的,两个16位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用。定时/计数器方式选择寄存器(TMOD)TMOD寄存器是一个专用寄存

14、器,用于控制两个定时计数器的工作方式。串行数据缓冲器(SBUF)串行数据缓冲器SBUF用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行。MCS-51定时/计数器定时/计数器的工作方式MCS-51单片机内部的定时/计数器的结构如图所示,定时器T0特性功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。TMOD

15、和TCON这两个特殊功能寄存器的格式参见下表:1.定时/计数器的方式控制字TMOD,字节地址为89H,其格式如表1:D7D6D5D4D3D2D1D0GATAM1M0GATAM1M0T1方式字段T0方式字段2.定时器控制积存器TCON,字节地址为88H,位地址为88H8FH,其格式如表2:TCON结构D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0MCS-51的中断系统2.中断处理流程CPU响应中断请求后,就立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述。现场保护和现场恢复中断开始前需将个有关寄存器的

16、内容压入堆栈进行保存,以便在恢复原来程序时使用。中断服务程序完成后,继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复积存器和存储单元的原有内容。中断打开和中断关闭在中断处理进行过程中,可能又有新的中断请求到来,这里规定,现场保护和现场恢复的操作是不允许打扰的,否则保护和恢复的过程就可能使数据出错,为此在进行现场保护和现场恢复的过程中,必须关闭总中断,屏蔽其它所有的中断,待这个操作完成后再打开总中断,以便实现中断嵌套。中断服务程序中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现。中断返回在MCS-51单片机中,中断返回是通过一条专门的指令RETI实现的。3.MCS-51的

17、中断源8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。TCON寄存器的结构如下:TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88HIE1:外部边沿触发中断1请求标志,其功能和操作类似于TF0。IT1:外部中断1类型控制位, IT1=1,边沿触发。IT=0是电平触发。IE0:外部边沿触发中断0请求标志,其功能和操作类似于IE1。IT0:外

18、部中断0类型控制位,其功能和操作类似于IE1。SCON是串行口控制寄存器,地址为98H,其格式如下:SCOND7D6D5D4D3D2D1D0-TIRI位地址99H98HTI:MCS-51串行口的发送中断标志,在串行口以方式0发送时,每当发送完8位数据,由硬件置位。如果以方式1、方式2或方式3发送时,在发送停止位的开始时TI被置1,TI=1表示串行发送器正向CPU发出中断请求,向串行口的数据缓冲器SBUF写入一个数据后就立即启动发送器继续发送。但是CPU响应中断请求后,转向执行中断服务程序时,并不清零TI,TI必须由用户的中断服务程序清“0”,即中断服务程序必须有“CLR TI”或“ANL SC

19、ON, #0FDH”等指令来清零TI。RI:串行口接收中断标志.若串行口接收器允许接收,并以方式0工作,每当接收到8位数据时,RI被置1,若以方式1、2、3方式工作,当接收到半个停止位时,TI被置1,当串行口一方式2或3方式工作,且当SM2=1时,仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时,RI被置1。RI为1表示串行口接收器正向CPU申请中断。同样RI标志栩栩如生由用户的软件清“0”。4.中断的控制IE的结构格式如下。IED7D6D5D4D3D2D1D0EA-ESET1EX1ET0EX0位地址AFHACHABHAAHA9HA8HEA:中断总控制位,EA=1,CPU开放中断

20、。EA=0,CPU禁止所有中断。ES:串行口中断控制位,ES=1允许串行口中断,ES=0,屏蔽串行口中断。ET1:定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。EX1:外中断1中断控制位,EX1=1,允许外中断1中断,EX1=0,禁止外中断1中断。ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。EX0:外中断0中断控制位,EX1=1,允许外中断0中断,EX1=0,禁止外中断0中断。MCS-51有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级。MCS-51还有一个申请优先级寄存IP,IP的格式如

21、下,字节地址是B8H。IPD7D6D5D4D3D2D1D0-PSPT1Px1PT0PX0位地址BCHBBHBAHB9HB8HPS:串行口中断口优先级控制位,PS=1,串行口中断声明为高优先级中断,PS=0,串行口定义为低优先级中断。PT1:定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断,PT1=0定义定时器1为低优先级中断。PX1:外中断1优先级控制位。PT1=1,声明外中断1为高优先级中断,PX1=0定义外中断1为低优先级中断。PT0:定时器0优先级控制位。PT1=1,声明定时器0为高优先级中断,PT1=0定义定时器0为低优先级中断。PX0:外中断0优先级控制位。PT1=1,声

22、明外中断0为高优先级中断,PX1=0定义外中断0为低优先级中断。5.中断的响应中断响应的主要内容就是由硬件自动生成一条长调用LCALL addr16指令,这里的addr16就是程序存储器中相应的中断区入口地址,这些中断源的服务程序入口地址如下:中断源入口地址外中断00003H定时/计数器0000BH外中断10013H定时/计数器0001BH串行口中断0023H生成LCALL指令后,CPU紧跟着便执行之.首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址执行程序。MCS-51的串行通信口MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发

23、送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。串行数据通信两种形式异步通信接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符。同步通信同步通信格式中,发送器和接收器由同一个时钟源控制,同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。串行数据通信的传输速率串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per seco

24、nd)和每秒符号数波特率(Band rate),在具有调制解调器的通信中,波特率与调制速率有关。2.MCS-51的串行口和控制寄存器串行口控制寄存器MCS-51单片机串行口寄存器结构如图3所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。但这两个寄存器具有同一地址(99H)。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。而从接收缓冲器读出数据即可接收数据。接收缓冲器前有一级输入移位寄存器,目的在于接收数据时避免发生数据帧重叠现象。而发送数据时就不需要这样设置,因为发送时,CPU是主动的,不可能出现这种现

25、象。串行通信控制寄存器SCONSCON是专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:SCOND7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH8DH9CH9BH9AH99H98H各控制位功能介绍如下:(1).SM0、SM1:串行口工作方式控制位。(SM0,SM1)=00方式0 (SM0,SM1)=01方式1(SM0,SM1)=10方式2 (SM0,SM1)=11方式3(2).SM2:多机通信控制位。多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收

26、到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。工作于方式0时,SM2必须为0。(3).REN:允许接收位。REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。(4).TB8:发送接收数据位8。在方式2和方式3中,TB8是要发送的即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。(5).RB8:接收数据位8。在方式2和方式3中,RB8存放接收到的第9

27、位数据,用以识别接收到的数据特征。(6).TI:发送中断标志位。可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。(7).RI:接收中断标志位。可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。电源管理寄存器PCONPCON是为CHMOS型单片机的电源控制设置的专用寄存器,地址是87H,格式如下:PCOND7D6D5D4D3D2D1D0位符号SMOD-GF1GF0PDIDL在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD

28、是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。中断允许寄存器IEES为串行中断允许控制位,ES=1允许串行中断,ES=0,禁止串行中断。位符号EA-ESET1EX1ET0EX0位地址AFHAEHADHACHABHAAHA9HA8H第二部分 单片机下载软件使用说明使用AT89S5X系列单片机必须使用该下载软件,使用STC系列单片机则不需要使用该软件。progisp是超强的AT系列芯片下载软件,它支持所有的AVR芯片的编程,支持AT89S51/AT89S52,支持自定义并口下载编程器,支持自定义串口的下载编程器,支持USBASP编程器,支持并口的并行编程器,

29、支持USBProg编程器,支持自定义编程芯片,支持自定义编程熔丝信息提示信息,支持USBProg的在线升级,支持USBProg-C实现脱机下载,支持自定义汉化信息提示,支持工程管理-可以将所有的配置数据与编程数据打包为单一文件。1、如何安装?progisp是一个绿色软件,直接解压缩即可使用,进入软件主目录,运行“progisp.exe”(将该文件设为桌面快捷方式,方便以后操作)即可运行程序。2、如何使用?运行“progisp.exe”后,进入以下界面:按以下步骤进行操作: 选择芯片:AT89S52。 点击“调入Flash”,选择要下载的HEX文件。 点击“自动”即可完成下载。第三部分 Keil

30、软件使用说明 利用KeilSoftware可以开发所有8051系列单片机的嵌入式应用。KeilSoftware的8051开发工具提供以下程序,可以用它们来编译C源码,汇编源程序,连接和重定位目标文件和库文件,创建HEX文件,调试目标程序。一、uVision2集成开发环境 uVision2IDE是一个基于Window的开发平台,包含一个高效的编辑器,一个项目管理器和一个MAKE工具。 uVision2支持所有的KEIL8051工具,包括C编译器,6过程:u 全功能的源代码编辑器。u 器件库用来配置开发工具设置。u 项目管理器用来创建和维护项目ou 集成的MAKE工具可以汇编,编译和连接嵌入式应用

31、。u 所有开发工具的设置都是对话框形式的。u 真正的源代码级的对CPU和外围器件的调试器。u 高级GDI(AGDl)接口用来在目标硬件上进行软件调试,以及和Monitor-51 进行通信。u 与开发工具手册和器件数据手册和用户指南有直接的链接。二、关于开发环境 uVision2界面提供一个菜单,一个工具条以便快速选择命令按钮,另外还有源代码的显示窗口,对话框和信息显示。 uVision2允许同时打开浏览多个源文件。1、项目管理 工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。 一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发

32、工具选项可以对应目标,组或单个文件。uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器(mathaccelerator)的特性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。2、集成功能uVision2的强大功能有助于用户按期完工。 集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。 文件寻找功能:在特定文件中执行全局

33、文件搜索。 工具菜单:允许在V2集成开发环境下启动用户功能。 可配置SVCS接口:提供对版本控制系统的入口。 PCLINT接口:对应用程序代码进行深层语法分析。 Infineon的EasyCase接口:集成块集代码产生。 Infineon的DAVE功能:协助用户的CPU和外部程序。DAVE工程可被直接输入uVision2。三、 编辑器和调试器1、源代码编辑器uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。2、断点uVision2允许用户在编辑时设置程序断点(甚至在源代码

34、未经编译和汇编之前)。用户启动V2调试器之后,断点即被激活。断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。 在属性框(attributescolumn)中可以快速浏览断点设置情况和源程序行的位置。代码覆盖率信息可以让你区分程序中已执行和未执行的部分。3、调试函数语言uVision2中,你可以编写或使用类似C的数语言进行调试。1).内部函数:如printf, memset, rand及其它功能的函数。2).信号函数:模拟产生CPU的模拟信号和脉冲信号。3).用户函数:扩展指令范围,合并重复动作。4、变量和存储器用户可以在编辑器中选中变呈来观察其取值。双层窗

35、口显示,可进行以下调整:1).当前函数的局部变量2).用户在两个不同watch窗口页面上的自定义变量3).堆栈调用(callstack)页面上的调用记录(树)(call tree)4).不同格式的四个存储区四、创建应用如何创建一个新的工程?按如下步骤可建立一个新的工程1、 首先打开Keil软件的开发环境,如下图所示。2、 点击菜单project,选择new project:3、 输入工程文件的名字,选择你要保存的路径,比如保存到Keil目录里,工程文件的名字为test,如下图所示,然后点击保存。4、 这时弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几

36、乎支持所有的51内核的单片机,例如,选择Atmel公司的AT89C51,可以选择ATMELAT89C51,然后点击确定。5、 点击确定后,弹出一个对话框,如下:询问是否复制标准8051启动代码并将其加入已建工程中。按“是“,进入下一步。6、 接下来要创建一个源程序文件,建立一个汇编或.C文件,如果你已经有源程序文件,可以忽略这一步,点击菜单FileNew:7、 输入一个简单的程序,如下:8、 选择菜单 FileSave9、 选择你要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,如果是C程序文件,扩展名为.C,如果是汇编文件,扩展名为.asm(或.a51),如果是ini文件,扩展名为.

37、ini,其他文件类型,比如注解说明文件,可以保存为.txt的扩展名。这里将文件保存为asm结尾的源程序文件,所以扩展名为.asm,保存为test.asm的名字,点击保存。10、点击Target1前面的+号,展开里面的内容source Group1:11、用鼠标右键点击Source Group1(注意用鼠标右键),弹出一个菜单,选择Add Files to GroupSource Group1。选择刚才编写的文件test.asm如果在上述目录下看不到该文件,文件类型选All files(*.*),将显示该目录下的所有文件。12、点击Add按钮,将文件加入工程。注意:在类型Type一栏,选Asse

38、mbly language file。然后,点击OK按钮,把文件加入工程。点击CLOSE按钮,关闭该对话框。出现如下画面。13、双击test.asm文件,可以打开文件,程序出现变色显示,说明程序已被系统辨识。五、参数设置1、 接着上图,用鼠标右键点击Target 1,选择 Options for Target Target1,出现下图:Xtal(Mhz):是设置单片机的工作的频率,默认是24OMHZ,如果单片机的晶振用的是1l.0592Mhz,那么在框里输入ll.0592(单位是Mhz,所以带小数点)。Use On-chip ROM(0x00xfff):这个选项是使用片上的Flash Rom,

39、我们知道At89C51有4k的flash Rom,取决于你的应用系统,你的单片机的EA接高电平的话,请选中这个选项,如果单片机的EA接低电平,表示使用外部Rom,不要选中该项。我们在这里选中它。 Off-chip Code memory:表示你在片外接的Rom的开始地址和大小,如果你没有外接程序存储器,那么不要填任何数据我们在这里假设使用一个片外的Rom,地址从Ox8000开始(不要填成8000,如果是8000,是10进制的数,一般填16进制的数),Size为外接Rom的大小假设接了一块0x1000字节的rom。最多可以外接3块Rom,如果还用了别的地址,就添上。Off-Chip Xdata

40、Memory:那么可以填上你外接的Xdata(外部数据存储器的起始地址和大小,一般的应用是接一个62256,我们在这里特殊的指定Xdata的起始地址为Ox2000,大小为Ox8000; Code Banking:是使用Code Banking技术keil可以支持程序代码超过64k的情况,最大可以有2兆的程序代码。如果代码超过64k,那么就要使用Code Banking技术,以支持更多的程序空间CodeBanking是一个高级的技术,支持自动的Bank的切换,是建立一个大型系统的需要,比如要在单片机里实现汉字字库,实现汉字输入法,都要用到该技术我们在这里不选中它。Memory Model:用鼠标

41、点击Memory Model的下拉箭头,会有3个选项。Small:变量存储在内部ram里Compact:变量存储在外部ram里,使用页8位间接寻址Large:变量存储在外部Ram里,使用16位间接寻址 一般使用Small来存储变量,就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去Compact的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部ram很少,只有256个字节,那么对该256个字节的读取就比较快,用MOVXRi,A或MOVX A,Ri指令。 如果超过256字节,那么要不断地进行切换的话,就比较麻烦。Compact模式适用于比较少的外部ram的

42、情况Large模式,是指变量会优先分配到外部ram里,用MOVX A,DPTR或MOVXDPTR,A来读取要注意的是,3种存储方式都支持内部256字节和外部64k字节的ram区别是变量的优先(或默认)存储在哪里的区别除非你不想把变量存储在内部ram,才使用后面的Compact,Large模式因为变量存储在内部ram里,运算速度比存储在外部ram要快的多,大部分的应用都是选择Small的模式使用Small的方式:也不是说变量就不可以存储在外部,一样可以存储在外部,只是你要指定,比如:unsigned char xdata a;那么变量a就存储在外部的ramunsigned char a;变量存储

43、在内部ram假如用Large的模式:unsigned char xdata a:那么变量a就存储在外部的ramunsigned char a;变量存储在外部ram这就是区别,就是说这几个选项只是影响没有特别指定变量的存储空间的时候,默认存储在哪里,比如上面的变量定义unsigned char a那么我们最好选择Small Code Rom Size:用鼠标点击下拉箭头,将有3个选项:Small:program 2K Or less:适用于89c2051这些芯片,2051只有2k的代码空间,所以跳转地址只有2k,编译的时候会使用ACALLAJMP这些短跳转指令,而不会使用LCALL,LJMP指令

44、,如果你的代码跳转超过2k,那么会出错。Compact:2k functions,64k program:表示每个子函数的程序大小不超过2k,整个工程可以有64k代码就是说在main()里可以使用LCALL,LJMP指令,但在子程序里只会使用ACALL,AJMP指令除非你确认你的每个子程序不超过2k,否则不要用Compact方式。Large:64K program:表示程序或子函数都可以大到64k使用code bank还可以更大通常我们都选用该方式Code Rom Size选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small的方式这里选择Large方式O

45、perating:点击下拉箭头有3个选项: None:表示不使用操作系统 RTX51 Tiny RealTime 0s:表示使用Tiny操作系统 RTX51 Full RealTime 0s:表示使用Full操作系统 Keil c51提供了tiny系统(demo版没有tiny系统,正版软件才有),Tiny是一个多任务操作系统,使用定时器0来做任务切换一般用110592Mhz时,切换任务的速度为30毫秒如果有10个任务同时运行,那么切换时间为300毫秒同时不支持中断系统的任务切换也没有优先级因为切换的时间太长,实时性大打折扣,多任务情况下(比如5个),轮一次就要150毫秒,150毫秒才处理一个任

46、务,连实现键盘扫描这些事情都不行更不要说串口接收,外部中断等同时切换需要大概1000个机器周期,对cpu的浪费很大,对内部ram的占用也很厉害实际上用到多任务操作系统的情况少之又少关键是不适用多任务操作系统一般适合于16位,32位的cpu,不适合8位cpuKeil的多任务操作系统的思想值得学习,特别是任务切换的算法,如何切换任务和保存堆栈等,有一定的研究价值如果熟悉了其切换的方法,可以编写更好的切换(比如将一次切换的时间从30毫秒改为3毫秒,实用性会好一些。2、 编译输出设置(产生.HEX文件)在上图中,点击OUTPUT,弹出如下界面:Select Folder for Objects: 为最

47、后生成的可执行文件,选择文件夹。Name of Executable: 对生成的可执行文件进行命名。Create Hex File:选中小方框,编译输出将产生用于最后烧录的Hex文件,不选中,则不会产生。六、程序调试与仿真程序调试完成以上工作后,就可以对程序进行调试与仿真了。具体步骤如下:1、进行编译,ProjectBuild Target(Rebuild All Target Files,工程包含文件不止一个)。2、有错误出现,在编译窗口,对错误类型和出错原因有详细说明,双击错误标号,就会定位在程序的相应处,修改错误,保存,再进行编译,直到全部通过为止。编译完全通过后,就可以进行功能仿真了。

48、程序仿真1、 DebugStart/Stop Debug Session图中,从左边方框中可观察程序运行时,R0R7,A,B,SP,PC,PSW等特殊功能寄存器的值,便于及时了解运行结果的对错。 还可以观察内部RAM的运行值,例如30H,VIEWmemory window,在地址窗口输入要观察地址,内部RAM(I:0X000X7F)30H单元,I:0X30H.从下图可以看出,运行结果为3。外部存储器单元(X:0X0000000X00FFFFH)。除此之外,仿真环境还可以观察、仿真实际外设的运行情况,比如,定时/计数器,串口,P0,P1,P2,P3口,中断等。观察外设窗口:点击Periphera

49、ls按钮,弹出如下菜单,包含5个功能菜单:Interrupt: 中断设置与激活。调试技巧:外部中断INT0对应于P3.2口线,因此,用鼠标单击PORT 3窗口从右向左数第三位(P3.2口线对应的位),每单击两次,触发一次中断,原因是外部中断是下降沿或低电平有效的。外部中断INT1的试验方法与外部中断INT0基本相似。I/O-ports: 包含四个端口,即P0、P1、P2、P3。单击PORT0,将弹出具体窗口,可以观察运行的结果。用鼠标可对其进行设置,更改运行时的数据。Serial: 可对串口进行设置,具体如下:Timer:对定时器/计数器进行设置。单击Timer0,出现如下画面。第四部分 实验

50、指导书实验1、 熟悉单片机开发环境目的:熟悉单片机的开发环境,掌握掌握单片机的编程和调试方法。内容: (1)由拨码开关输入开关量到单片机。单片机根据不同的开关量输出相应的信号,点亮或熄灭LED发光管。 (2)让小灯进行多种方式显示。向单片机端口发送不同的数据,点亮LED灯。所需设备:51单片机主控模块。LED小灯关 开码拨51单片机实验原理1:实验步骤:连接单片机模块P1口与LED灯的连线,以及P2口与拨码开关模块的连线。将P2定义为输入,接至拨码开关,把P2口的数据送出到P1口,用LED灯显示。程序代码: ORG0000HAJMPMAINORG0040HMAIN:MOVP2,#0FFHMOVA,P2NOPNOPMOVP1,ANOPNOPNOPNOPNOPNOPAJMPMAINEND实验原理2:实验步骤:连接单片机模块P2口与LED灯的连线,控制LED灯有多种显示方式,如:流水打灯,逐个熄灭/

温馨提示

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

评论

0/150

提交评论