《单片机原理及应用》实验指导.docx
实聆一单片机开发系统的使用【实险目的】k了斛单片机开发系统的各主要组成部分;2,掌握仿真器及其软件的使用,初步掌握程序的调试方法.包括跟踪、单步运行和断点设置等;3、熟悉51单片机的指令系统,了解汇编语言程序的设计方法。【实毅原理】51单片机开发系统包括51实验开发板、仿真器、PC机及直流电源.如图DlT所示。其中,PC机与仿真器通过USB口连接.仿真器与51实验开发板通过专用电缆连接“SlDI-I51单片机开发系统的结构【实验内容】I,认识51单片机开发系统的结构。2、初步认识仿真器软件和KeilC51软件界面.3、指令认识及简单程序调试:(1)传送指令设置内部RAM的值,(30H)ZOH(4OH)=IOH.单步执行下列程序,检查结果.MOVRO,#30HMOVA.R()MOVRI,AMOVB.RISJMP$执行后(RO)=(RI)=()=(B)=(30H)=(40H)=_°(2)运算指令MOVA.於8HMoVA.*98HMOVA.杪8HMOVA,#98HMOVA.t*98HMOV2(X1,y74HMOVK>H,074HMOV2)H.074HMOV20吐#7411MOV20H.#7411SFTBCSETBCSInMrSETBCSCTBCADDA.20HADDA.20HADIX:AJOHSUBBA.20HCJNEA.2OH.(>ISJMP$DAASJMPSSJMPSSJMPSQkSJMP$结<A)三(八)=(八)-(A>=<A>三CY=AC=CY=AC=CY=AC=CY=AC=CY=AC=果OV=P=OV=P=OV=P=OV=P=OV=P=单步执行MOVA.WSHMOVB.*74HMU1.ABSJMPSMoVA,也8HMOVB.#74HDIVABSJMPS结果<A>=(B)=<A>三<B)三CY=AC=CY=AC=标志OV=P=OV=P=(3)堆枝操作指令MOVB,#XOHPUSHACCPUSHBPoPACCPOPBSJMPS运行后:(A>(B>=SP=(31H)=(32H)=。4、多字节十进制数加法被加数加数结果高位20HOi30H8920H21H2331H982IH22114532H7222H23H6733H6523H低位SDI-24字节十进制数相加两个4字节十进制数1234567和89987265相加.将其8421BCD码按低位到高位存放在地址为20-23H.3O-33H的RAM中,运算结果存放在20-23H的地址中,如图DIN所示。;主桎序MOVRO.#23HMOVR.ff33HMOVR2.例)4HACA1.1.ADD_BCDSTOP:SJMPSTOP运算程序如下,ADD_BCD为多字节十进制数加法子程序的首地址。分别按,跟踪“、哗步一和.全速”方式调试程序,检查运算结果,区别跟踪“、单步'调试方式的不同。在“ADD_BCD子程序”的指令“DAA”处设置断点.再用全速''方式运行,到达断点后,观察“A”的值.然后用“单步”运行.观察指令“DAA”的功能:同时理解“断点”方式调试程序的特点。;置横加数首地址;置加数首地址;督被加数和加数的长度(字节数);调用多字节十进制软加法子程序ADDBCD;停止;多字节十进制数加法子程序;入口:ROsRl为被加数和加数的首地址,按低位到高位存放;出口:RO为运算结果的首地址,也按低位到高位存放ADD_BCD:C1.RC1.P:MOVA,ROADDCA,RlDAAMOVR0.ADECRODECRlDJNZR2,1.(X)PRET;进位清零;一字节的被加数一A;一字节加;十进制数调整;存一字节的运算结果;被加数指向下一字节;加数指向下一字节;循环控制;子程序返回END【实脍要求】1、预习:族便各程序.预先分析各程序运行结果.以便和实骐结果比较;2、认真完成各实骏内容.并记录实验结果;3、完成实蛤报告,分析实脍结果,【思考题)1.为什么程序结束用“SJMPS”指令?2、比蛟“跟踪”、“单步”和“新点”调试方式的特点。实验二汇编语言程序设计【实卷目的】I、进一步掌握仿真器及软件的使用;2、进一步熟悉Sl单片机指令系统,掌握汇编语言程序的设计方法;3、进一步掌握程序的调试、诊断和排错方法。【实皴原理】Is多字节无符号数相乘:在51指令系统中,有一条秉法指令MU1.AB",它只能对单字节无符号数相获.对于多字节数的乘法,必须编写相应的程序来实现.常用的方法有.移位加”和.移位乘等。下面以“移位加”为例,为了说明移位加”的乘法原理,先回顾一下二进制乘法手算方法.见图D2-I.IOII被乘数XXlOOl柒数Y柒数Y的最低位=1.部分积=X=IOl1,X左移1位,!OllX=IOllO蓑数Y的次低位=0,部分积=0,X左移1位,0000X=10ll获数Y的次高位=0.部分积=0.X左移1位.0000X=IOlKKW+1011乘数Y的最高位=I,部分积=X=Iollo(X).X左移I位01100011积Z=Z(部分积)=XXY图D2-I多字节无符号数相乘手算嫌法归纳上述算法为以下几点:(I)嘀定积Z的长度,积Z清零;(2)从杀数Y的最低位开始,桧查乘数Y的最低位的值;(3)如值为1.积Z加上被乘数X(即Z=Z+X),否则不加;(4)被乘数X左移1位,(三)依次桧查乘数Y的前一位的值.重复(3);(6)直至乘数Y的俄高位也检查并累加完毕,结束.现在将16位被乘数存放在R2R3.16位乘数存放在R6R7.结果积存放在R4R5R6R7.RO为右移计数器.(R2R3)“R6R7)R4R5R6R7的程序框图见图D2-2).(R2R3)×(R6R7)-R4R5R6R7也可以用“移位获”的方法来计算,(R2R3)×(R6R7)=(R2)×2,1+(R3)×(R6)×2*+(R7)=(R2)×(R6)×2,4+(R2)x(R7)×28+(R3)x(R6)×28+R3×R7这样,16位无符号数乘法就转化为8位无符号数乘法和加法了。图D2-2(R2R3)(R6R7>-R4R5R6R7移位加算法2,跑马灯实验:饱马灯实验电路原理图如图D2-3所示,单片机通过Pl口与8个发光二极管连接,当Pl口相应管脚输出0时.对应的发光二极管点亮.检出1.则不亮。通过定时给不同的管脚输出0.可以让对应的发光二极管点亮.产生类似于跑马灯的效果。v«图D2-3跑马灯实躲电路原理图【实险内容】I、编写程序求8个数的平均值.这8个数以表格形式存放在从tabic开始的单元中.(Dtablc:db02H.03H.(MH.1OH.12H.22H.25H.3OH运行程序检查结果.(2)tablc:dbOC2H.ODOH.8SH.92H.55H.66H.OA5H.74H修改并运行程序,检查结果.2、编写16位无符号数相乘的移位加算法程序,实现(R2R3)(R5R7iR4R5R6R7.(R2R3)=iO88ll.(R6R7)=20AOH,运行程序检查结果;3、指示灯循环显示:(I)Pl口做明出口,接八只发光二极管.嫡写程序.使发光二根管从左向右循环点亮。(2)修改程序.使指示灯从右向左循环.,(3)修改程序,使指示灯两两右循环,(4)修改程序.使指示灯从两边向中间循环。(5)修改程序,使指示灯从中间向两边循环。【实聆要求】1、预习:复习汇编语言编程方法,编写出各实验内容相应的汇编语言程序;2、认真完成各实验内容,并记录实验结果;3、完成实验报告,分析实魁结果.【思考题】I、实验内容1的内容(2为什么不能用内容(1)的程序72,两个双字节BCD码相蓑如何实现?两个双字节原色相乘如何实现?实验三C51程序设计及10实聆【实玲目的】I、掌握C5I程序设计方法及IO的使用;2、掌握CSl程序的调试、诊断和排俏方法。【实骏原理】I、C5!输出结果到标准输出设备:在C语言中,经常使用标准输入输出函数scanf().Pnnm)进行人机交互,但keil环境下,C5I的人机交互有所不同.需要通过串行口在上位机上输入榆出.因此,必须用软件对串行口进行初始化.初始化程序如下:voidSCria1.initiaI(Void)(SCON=OX52;工作模式1X-bitUAK,允许接收TMoD=OX20:"定时泗Tl,工作模式2.8位自动重载方式THI=0XF3;"波特率为2400TRI=I;定时器Tl开始运行)2、跑马灯实原理同实玲二【实验内容】1、在显示器上显示:(0输出形状为直角三角形的九九乘法表:编写并运行程序,检查结果:(2)打印出以下图案:编写并运行程序.枪查结果.2、编写校睑码程序,运行程序检造结果:编写水平垂走校哙码(奇校哙.,僧校骆生产程序.将你的U位学号生成水平垂直校玲码,你的11位学号可以用ASClI码来表示,然后每位学号ASClI码分别进行奇校蛤这就是水平校晚.对应的校验位存储在最高位。再将上述的水平校验图,进行垂直校验,得到水平垂直校验帮,记下校验码结果。3、指示灯循环显示:(I)Pl口做输出口,接八只发光二极管,编写C51程序.使发光二极管从左向右循环点亮。(2)修改程序,使指示灯从右向左循环。(3)修改程序,使指示灯两两右循环。(4)修改程序,使指示灯从两边向中间循环。(5)修改程序,使指示灯从中间向两边循环。【实验要求】1.预习:发习C51编程方法,课外组写出各实验内容相应C51的程序;2、认真完成各实脸内容,并记录实脸结果;3、完成实验报告,分析实嘘结果:【思考题】1、比较CSI移位运算符与汇编语言的移位指令的异同,在程序中如何体现,2、与汇编语言相比.C51编程有什么优势?实验四键盘与显示电路实聆【实嗡目的】I、了解几种键盘检测原理及编程方法;2、掌樨键盘扫描电路结构和键盘扫描方法.了解按键的软件去抖动方法;3、了解1.ED显示原理及动态显示嫡程方法。【实险原理】1、矩阵式键盘工作原理实验开发板上有个16键的键经.组成4*4矩阵式键盘,如图D4-1所示,将铺盘4根行线和4根列线(1-8)连接至Pl口的PIOPZSD4-2键码4U回回回H0B0C叵团叵回。回回回囚S个按键分别定义为如图D4-2所示键码,则从Pl口返回的键码表如表D4-I所示”表D4l键码表7码扫命、7HOlllBHIOlIDHIlOIEHIlIO7H(77H)(B7H)(D7H)(E7H)Olll789DBH<7BH)(BBH)(DBH)(EBH)IOII456CDH(7DH)BDH)(DDH)(EDH)IIOII23BEH(7EH)(BEH)(DEH)(EEH)IIIOF0EA2、七段1.ED动态显示输出实的开发板上有4只共阳的1.ED七段显示渊.参见图D4-3o4R1.ED七段显示器的ABCDEFG和DP直接连接P2,而七段显示器的4个公共极1234分别连接4只PNP三极管,4只PNP三极管基报接PICPI.3.即因口控制输出lED显示的字形,P1.0PI.3控制显示的灯位,字段码和字形对应表见表W-2o4只1.ED显示器采用动态方式显示.所谓的动态显示,就是4只1.ED显示器不能同时显示,一次只能点亮一只1.ED显示器,4只1.ED显示器轮流点亮,利用人眼的视觉暂留和1.ED显示器余辉,就可看到4只1.ED显示器同时点亮,但亮度有所下降.可见动态显示也需要合适延时,才会有较好的显示效果.SS-S-SiE*.c图闪-3动态1.ED显示整电路表D4-2字段码和字形对应表字段码字形字段码字形DpGFEDC8A十六进制码DpGFEDCBA十六进制码11OOOOOOCOHI000000080H11111001F9H1001OOOO90HIo100100A4HElI000I00088HIOll0000BOH同I000001I83HI1001100199HI10001IOC6HU1001001092H10100001AlHII100OOOIO82H100OOIIO86HII)1111OOOF8HI100OIIlO8EHF【实醛内容】I、制程序.制作一个电子秒表,时间通过PI在发光二极管上以二进制形式显示。2、编写程序.在4只1.ED七段显示器上从左到右显示"(V、2、3.调整延时时间(电O.ls.0.01s,2ms),观察显示效果:3、编写程序,在一个七段码显示器上每隔1秒显示AF,观察显示效果.4、修改程序.在四位数码管上分别按十六进制、十进制、分秒(前两位显示分.后两位显示秒)显示秒计数值.5、编写程序.实现44键盘实时扫描并显示在七段码显示器上.【实物要求】1、预习:掌樨键盘检测和七段1.ED动态显示原理,课外编写出各实蛤内容相应C5I的程序f2、认真完成各实胎内容,并记录实哙结果;3、完成实验报告,分析实毅结果:【思考题】1、如设置20H-23H为显示缓冲区.要显示的字段码送入显示线冲区.反复调用显示子程序即可.试编写该显示子程序;2、能否显示H七、“丁、”U”的字形.试写出它们的字段码。实晚五中断与定时器计数器实验【实醛目的】1、掌握单片机中断的工作原理和中断处理程序的编程方法;2、掌握单片机,定时潮计数器的工作原理,体会定时器计数器的使用特点;3、掌握5】单片机内部定时/计数器的使用和编程方法。【实聆原理】MCS-51单片机有5个中断2个外部中断、2个定时器,计数器中断和一个串行口中断,通过4个特殊功能寄存器(IE,IP,ICON,SCON)实现对中断的控制和管理。外部中断可以设置为低电平触发或下降沿触发两种触发方式“定时器计数器有4种工作方式.分别为13位、16位和8位计数方式.其中.方式2是8位自动或装教方式,能自动装入初始参数“定时器的定时时间可以通过设置初值来控制:定时器初值=2"-tc/T。对于定时器工作在方式0、1、2、3.n分别为13、】6、8、8.其中.定时器1不能工作在方式3,tc为定时时间,T为机器周期.如果选用C8051F410单片机内部时钟21.5MHz进行8分期即3.0625MHz作为时钟,要产生2KHz的方波,需要定时器产生025a.可选用方式2的8位自动克袋载。定时器初始值为:2560.25×1000X3.0625/12=192.20C0ll而要进行秒计数,可定时50a,计数20次来实现。5ClmS的计数可选用方式1.16位定时方式,定时器初始值为:6553650X100OX3.0625/12二52775.60CE281l【实睢内容】I、外部中断改变发光二极管显示:格po.0作力单片机的中断信号Iyro.低电平触发.无中断时,P2口接8个发光二极管循环左移,外部中断触发时8个发光二极管闪烁.2、修改程序,对外部中断次数进行计数.并在数码管显示器上显示3、在P1.O脚上饰出2KHz的方波2KHz的方波需要定时器产生0.25ms连续的定时信号,可选用TO方式2.自动装入参数的8位定时方式.运行程序.并用示波器观察波形,记录波形的频率。4、秒计数显示输出:(1)秒计数可用20次50ms的计数溢出来实现.50ms的计数可选用TO方式I.16位定时方式,时间通过PI口在发光二极管上显示。(2)修改程序,在四位数码管上分别按十六进制、十进制、分秒(前两位显示分,后两位显示秒)显示秒计数值。5、产生时序脉冲信号实皴:由8051内部定时器1.按方式1工作,即作为16位定时器使用.毋0.05秒钟Tl溢出中断一次。Pl口的P1.O-PI.7分别接八个发光二极管.要求编写程序模拟一时序控制装置。开机后。第一秒钟1、1.3亮,第二秒钟1.2、1.4亮,第三秒钟1.5、1.7亮,笫四秒钟1.6、1.8亮,第五秒钟1.l、1.3、1.5、1.7亮,第六秒钟1.2、1.,1、1.6、18亮.第七秒钟全亮.第八秒钟全灭.以后又从头开始,一直循SF下去。【实脍要求】1、预习:复习中断和定时器计数器的工作原理.编写出各实验内容相应C51的程序;2、认真完成各实验内容.并记录实验结果;3、完成实蛤报告,分析实玲结果.【思考题】1、利用中断方式扫描键盘,承新编写实胎四的键盘程序。2、测量的方波信号的筑率是否正好为2KHz.如果有误差,试分析误差产生的原因。实验六UART串口通信实验【实蛉目的】1、掌握51单片机I;ART串口通信的内部结构和工作原理;2、掌握51单片机I:ART串口中断的使用和编程方法一【实皴原理】MCS51单片机的串行口中断,可以通过设置SCOX特殊功能寄存器来控制和管理中断串行口有1种工作方式:方式0位同步方式,方式I、2、3都是异步方式.每次通信分别传送为8位、9位和9位二进制数据.方式1和方式3可以通过定时谓1设置通信速率.而定时器1作波特率发生器时一般工作在方式2.即8位自动重装载方式.此时.定时器1初值与波特率的关系为:TC=256-2SMODXfoSC32X12X波特率而C8051F110串行口只有方式1和方式3两种方式,其定时器1的初值与波特率的关系为TC=256-t>v:2×.:特*如果选用C8051RU0单片机内部时钟21钿Hz8分频.要求波特率为9600.则TC=256-24.5×IO68x2x960()=96.49'60H另外,实验开发板通过VAX232芯片与PC机的串行口相连.电路如图D6T所示:图MT串行口接口电路【实驶内容】1、编写IARTQ串口发送程序:当外部中断0产生低电平.串行口发出数据.在PC上的串口助手显示,串行采用方式1.波特率为9600.定时器1作为波特率发生器工作在方式2.采用系统时钟,,2、编写UARTO串口接收程序利用PC上的串口助手发送数据.单片机接收后通过Pl口在发光二极管显示接收的数据,3、修改WUno串口接收程序,利用PC上的串口助手发送数据.单片机接收后通过在两位数码管上显示接收的数抠的ASCll码。4、修改上面程序,利用PC上的审助手发送数据0'匕单片机接收后通过在一位数码管上显示接收的数据.5、修改UARTo窗口程序,当单片机接收到串口助手发送的数据时.发送学号。6、修改UARTO串口程序.利用Pe上的串口助手发送数据.当单片机接收到的数据为"O"时.发送"ABCD",而当接收到的位T时.则发送'1234m.【实物要求】I、预习:复习串行口的结构与工作原理.编写出各实验内容相应C51的程序;2、认真完成各实验内容,并记录实睑结果;3、完成实蛤报告,分析实脍结果:【思考题】1,是否可以在两个实验板之间迸行串行通信.如何连接?2、如果两个实脸板在串行通信时波特率不一致.分析会产生什么结果;