《片机指导书》word版.doc
温州大学瓯江学院实验指导书机 电 工 程 学 院单片机原理及应用实 验 报 告 学 院 班 级 姓 名 学 号 温州大学机电工程学院 制目 录前言2第一章 MCS-51单片机实验系统1.1 Keil uV2软件的使用31.2 MCS51U单片机实验板11第二章 实验项目2.1 实验一 系统基本操作及I/O口实验152.2 实验二 定时/计数器实验172.3 实验三 中断实验182.4 实验四 单片机控制蜂鸣器实验192.5 实验五 交通灯控制实验22前 言单片机具有体积小、集成度高、控制功能强、性能价格比高等独特的优点,在工业控制、智能化仪器仪表、数控机床、数据采集、通信以及家用电器等各领域中得到了广泛的应用。单片机原理及应用是一门实践性和实用性都很强的课程,对机械工程及自动化专业是一门必修课程,为了更好地配合教学环节,让学生立足于实践应用,全面、深入地了解和掌握单片机,锻炼、提高学生的动手能力和操作能力,结合实验室所购置的单片机实验设备,我们编写了这本实验指导书。在单片机的教学上,我们逐步加大了实验环节在教学计划中的比重,在满足基本技能培训要求的基础上,减少了演示性、验证性的实验,而增加了设计性、综合性实验,以达到真正提高学生的实践能力和解决问题的能力。本指导书由浅入深,合理地安排了基础和应用、软件和硬件实验项目,以满足实践教学环节的需求。 在编写过程中我们得到了院领导、实验室、教研室各位老师的大力支持,在此一并表示衷心的感谢。鉴于水平有限,难免存在错误,恳请读者批评指正。编者2008.10第一章 MCS-51单片机实验系统1.1 Keil uV2软件使用简介 先打开一个工程文件,如果没有工程文件,应先建立一个工程文件。具体建立步骤如下:用鼠标点击菜单的Project>New Project.。如图1。图11.1.2点击New Project之后,可根据需要重新选择工程文件放置的位置,放置工程文件并为工程文件命名,点击“保存”按钮对工程文件进行保存,操作如下图。图2保存完工程文件出现如下界面。图31.1.3此时编译系统提示选择所用的单片机型号。向下滚动滚动条选择Atmel系列的89C51 型号的单片机,然后点击“确定”按钮进行确认,如下图。图4然后出现如下界面,如下图。图51.1.4点击菜单中的“File”选项,选择新建“New”。如下图。图6点击“New”选项,出现如下界面。图71.1.5点击菜单栏里的“File”选项,选择“Save”项,对新建的文本文档进行保存。然后在文件名对话框中输入文件名。注意:文件名的后缀应为“.C”或“.ASM”。“.C”后缀为C语言源程序,“.ASM”后缀为汇编源程序。图8输入完文件名之后点击“保存”按钮进行保存。保存完之后的界面如下图。图91.1.6点击“Target1”左边的“”符号,然后选中“Source Group 1”,点击右键,选中“Add Files to Group Source Group 1”选项并左键单击。单击之后出现如下界面。图10选中文本文档“Test1.asm”,先左键单击“Add”按钮,再左键单击“Close”按钮。这时我们就将我们建立的源程序文件添加到了 Source Group 1目录下。如下图所示。图11这时我们就可以编写调试我们的程序了。1.1.7单击按钮“”出现如下界面。图12单击“Output”按钮,选中“Create HEX Files”选项。如下图所示。图13点击“确定”按钮进行确认。注意:此操作对于采用直接把程序烧录到实验系统的CPU的方式,是必不可少,因为只有选中“Create HEX Files”这一选项,才能够生成HEX文件。如果采用联机仿真模式,下一步我们要做的就是仿真监控芯片的工作参数进行设置。1.1.8选择Option for Target>Debug进行设置。 设置完毕的界面如下图所示。图14注意:如果采用脱机仿真模式,上一步跳过。1.1.9当程序编写完成之后,要对其进行编译以检查是否有语法错误。点击” ”(Translate Current File)快捷按钮。如语法检查显示错误(Error)和警告(Warning)均为0,则可进行下一步编译工作。图15左键单击“”(Build Target)编译文件。如下图所示。图161.1.10构建文件之后左键单击按钮“”,进入仿真调试系统。如下图所示。图17 此时可通过走单步、设置断点、全速运行方式对程序进行调试。1.2 MCS51U单片机实验板1.2.1 概述在单片机教学与学习中,首先要解决的就是单片机编程器,没有编程器就没办法将你精心设计的程序烧写到单片机芯片中;之后,还要为烧写过程序的芯片搭个电路以验证程序是否如你所愿,这就需要单片机实验板;由于单片机工作速度过快,当程序有错误时,我们没办法仔细观察错在哪里,这时我们还想有个单片机仿真器对程序进行逐步仔细的观察和调试。MCS51U单片机编程、*仿真、实验3合1板(下称实验板)将上述功能有机的集成在一块板上,为单片机教学和学习在硬件方面提供了有力的支持。同时,实验板采用USB与电脑连接,不但提供了通讯,同时也提供了实验板的电源。编程器可编程的芯片为ATMEL公司的:AT89S51、AT89LS51、*AT89S52、AT89LS52*注:实际系统未提供仿真调试模块,直接用Keil软件仿真,单片机芯片采用AT89S52。1.2.2 实验板功能分布图单片机实验板中,已经集成了数码显示、LED灯、LCD液晶接口、红外遥控接收、按键键盘以及24、93系列非遗失存储器;在ISP下载结束后,也可以使用单片机的串口和电脑通讯。1.2.3 实验板跳线功能说明跳线编号功能说明J1、J2P1内外选择连接:使用板上资源;断开:使用外部扩展或仿真J3、J4P3内外选择连接:使用板上资源;断开:使用外部扩展或仿真J5、J6P0内外选择连接:使用板上资源;断开:使用外部扩展或仿真J7、J8P2内外选择连接:使用板上资源;断开:使用外部扩展或仿真J9内外晶振选择连接:使用板上晶振;断开:使用仿真目标板晶振J12蜂鸣器驱动连接:使用蜂鸣器;断开:不使。占用P2.0J13LED灯电源连接:接通+5V;断开:断开+5VJ14、J15通讯选择没有特殊用途,要全部连接;连接ISP:电脑与ATISP连接;特殊要求时。连接UART:电脑与实验单片机串口相连;特殊要求时。1.2.4 实验板电路原理图1.2.5 ISP下载程序的使用设置好通讯后,若实验板与电脑已经连接,可以打开实验板“电源开关”,并启动软件“MCS51U”与实验板连接。第一次启动软件需要设置一下通讯端口,见下图:选好端口号,点击“应用”,程序会自动与实验板连接,正常情况下会连接成功并给予提示;若连接失败请重新选择正确、可用的端口后再试试,直至连接成功。接下来,就可以从菜单的“文件”中打开目标文件,烧写到单片机中去实验。第二章 实验项目实验一 系统基本操作及 I/O口实验一、实验目的1、 掌握Keil软件的基本操作;2、 了解MCS51单片机实验板的基本结构、功能和原理;3、 掌握ISP程序下载的基本操作;4、 掌握对P0P3口的基本I/O编程。二、实验内容1、Keil软件基本操作(1)运行Keil uVision2软件,在E:盘创建一个文件夹,并在上面建立自己的工程文件;(2)建立.asm汇编文件,加入到刚建立的工程中去,并对目标属性进行设置;(3)在文件窗口,填入若干条常见汇编指令,末行以伪指令END结尾,再进行软件仿真调试,包括进入仿真调试状态、单步执行、断点、全速执行、退出仿真调试状态等,调试过程中随时观察相关寄存器单元内容的变化。2、输入以下汇编程序,进行编译,观察是否有.hex文件输出; 程序1.1: MAIN: MOV P0,#01H MOV P0,#02H MOV P0,#04H MOV P0,#08H SJMP MAIN END3、将相应的.hex文件下载到AT89S52单片机芯片内部,观察指示灯LS1LS8的运行结果。4、分析以下程序段,编译、下载后,观察运行结果跟上述程序有何区别。程序1.2:MAIN: MOV P0,#01H CALL DELAY MOV P0,#02H CALL DELAY MOV P0,#04H CALL DELAY MOV P0,#08H SJMP MAIN;-显示延时- DELAY: MOV R1,#0FFHDELAY1: MOV R2,#0FFHDELAY2: NOP NOP DJNZ R2,DELAY2 DJNZ R1,DELAY1 RET ;延时返回 END5、在程序1.2的基础上,修改成从LS1LS8依次点亮的流水灯程序,下载到单片机芯片中,观察实际运行结果。三、思考题1、如果程序编译后,在项目文件夹内找不到.hex文件,一般问题出在哪里?2、P0.0P0.7口置0、置1跟LS1LS8的亮、灭有何关系?为什么?3、P0口如果改作为输入口,编程时应该注意什么?实验二 定时/计数器实验一、实验目的1、 掌握定时器T0或T1的工作方式;2、 掌握利用对定时器溢出的查询,实现定时的编程方法。二、实验内容1、在Keil软件中,输入下列程序,编译、下载,观察实验板中LS1的工作状况。单片机晶振12MHz,则程序2.1使LS1亮、灭的周期是多少?程序2.1 MOV 40H, #50 MOV TMOD, #10H MOV TL1, #0B0H MOV TH1, #3CH SETB TR1 ;启动T1LP: JBC TF1, LP2 AJMP LPLP2: MOV TL1, #0B0H ;重新设置计数初值 MOV TH1, #3CH DJNZ 40H, LP MOV 40H, #50 CPL P0.0 SJMP LP END 2、修改程序2.1,使P0.7口接的LS8每隔0.5秒亮、灭一次,程序写入实验报告。3、在上述程序基础上,改写实验一的流水灯程序,每隔1秒,从LS1LS8依次闪亮一次,不断循环,程序写入实验报告。三、思考题1、如果单片机晶振频率改成6MHz,T0定时器在工作方式0,从0开始溢出一次,需要多少时间?2、计数器和定时器差别在什么地方?实验三 中断实验一、实验目的1、 熟悉MCS-51单片机中断的编程方法;2、 利用定时器溢出中断产生定时的编程方法。二、实验内容1、在Keil软件中,输入下列程序,编译、下载,观察实验板中指示灯工作状况。 已知晶振12MHz,则P0.7口指示灯闪烁的频率为多少? 程序3.1 ORG 0000H LJMP MAIN ORG 001BH ;定时器T1中断入口地址 AJMP INTT1 ORG 0100H MAIN: MOV P0,#00HMOV TMOD, #10H MOV TH1,#3CH MOV TL1,#0B0H MOV IE,#88H SETB TR1 ;启动T1 LP: SJMP LP ORG 60H INTT1: MOV TH1,#3CH ;中断服务程序 MOV TL1,#0B0H CPL P0.7 RETI END 2、在程序3.1的基础上,编写1秒钟闪烁切换间隔的流水灯程序,循环顺序来回切换,即LS1->LS2->->LS8,再切换成LS8->LS7->->LS1。三、思考题1、 MCS-51有几个中断源,编写中断服务程序都有何规范?2、 定时器中断和查询两种工作方式都能实现定时,各有什么特点?实验四 单片机控制蜂鸣器实验一、实验目的1、掌握单片机对利用蜂鸣器的控制方法;2、结合定时器,产生定时的蜂鸣;3、掌握蜂鸣器产生音乐的编程方法。二、实验内容1、 蜂鸣器接在P2.0口上,实验前接上跳线J12;2、 利用定时器实验的程序,每隔5秒,产生一次鸣叫,持续1秒,程序写入报告;3、 分析下面利用蜂鸣器产生音乐的程序4.1“兰花草”。上网搜索更多的音乐,改写程序4.1,发出相应的音乐声。程序4.1:;*OUT BIT P2.0 ORG 0 AJMP START ORG 0BH AJMP TIM0START: MOV TMOD,#1 MOV IE,#10000010BSTART0: MOV 30H,#0NEXT: MOV A,30H MOV DPTR,#TABLE MOVC A,A+DPTR MOV R2,A JZ END0 ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 AJMP D1SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 MOVC A,A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL0,A MOV 20H,A SETB TR0D1: CALL DELAY INC 30H AJMP NEXTEND0: CLR TR0 AJMP START0TIM0: PUSH ACC PUSH PSW MOV TL0,20H MOV TH0,21H CPL OUT POP PSW POP ACC RETIDELAY: MOV R7,#2D2: MOV R4,#125D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY RET;=TABLE1: DW 64021,64103,64260,64400 DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 64934TABLE: ;1 DB 42H,82H,82H,82H,84H,02H,72H DB 62H,72H,62H,52H,48H DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H ;2 DB 12H,0A2H,0D2H,92H,88H DB 82H,0B2H,0B2H,0A2H,84H,02H,72H DB 62H,72H,62H,52H,44H,02H,12H ;3 DB 12H,62H,62H,52H,44H,02H,82H DB 72H,62H,52H,32H,48H DB 00H END 三、思考题: 1、伪指令DB、DW有什么作用? 2、“兰花草”程序中,用到了什么中断?入口地址在哪里?实验五 交通灯控制实验一、实验目的 1、掌握键盘与数码管显示的基本方法; 2、掌握单片机程序综合设计的方法。二、实验内容 1、分析键盘程序5.1和数码管显示程序5.2。程序5.1;程 序 名: MCS51实验板配套程序-74HC165实验;功 能: 读取74HC165并口上的键盘数据,同时判断键盘值进行led的开关;8个单键分别接在74HC165的并行口,相关连接见如下管脚定义,更详细见原理图。;-定义-pl bit P3.6 ;165锁存clk bit P3.7 ;165时钟Do bit P3.5 ;165数据keyvar equ 20h ;读取的键盘数据放到20H中 ;为便于以下程序直接使用S1-S8按钮,这里也要定义一下按钮的名称s1 bit keyvar.0 ;对应s1,下同 s2 bit keyvar.1s3 bit keyvar.2s4 bit keyvar.3s5 bit keyvar.4s6 bit keyvar.5s7 bit keyvar.6s8 bit keyvar.7;-使用实例-main: lcall Rkey ;使用键盘前要读一次键盘值,仅这一点和直接连接的按键不同 jnb s1,key0 ;到按键1按下处理,接下来和一般的直连按键使用方法一样 jnb s2,key1 ;到按键2按下处理 ajmp main key0: lcall Delay ;有必要的话要加上键抖延时 lcall Rkey ;延时后再读键盘 jnb s1,key0_Dow ;再次判断的确是s1按下,到按下处理 ajmp main ;-一下程序和普通直接连接按键的处理方法相同-key1: lcall Delay ;去键抖延时 lcall Rkey ;延时后再读键盘 jnb s2,key1_Dow ;再次判断的确是s2按下,到按下处理 ajmp main key0_Dow: cpl p0.0 ;翻转LS1k1l: lcall Rkey jnb s1,k1l ;判断按键是否抬起,否则程序会重复读键 ajmp main key1_Dow: cpl p0.1 ;翻转LS2k2l: lcall Rkey jnb s2,k2l ;判断按键是否抬起,否则程序会重复读键 ajmp main ;-读键盘子程序-Rkey: clr pl setb pl ;-|_|-装入 mov r0,#8 ;读8位loop: mov c,Do ;提取1位 rlc a setb clk clr clk ;_|-|_时钟 djnz r0,loop mov keyvar,a ;保存键盘值 ret;-延时程序-Delay: mov r1,#25L1: mov r0,#200 djnz r0,$ djnz r1,L1 ret end程序5.2;程 序 名:MCS51U实验板配套程序-显示部分;功 能:在数码显示器上显示“1234”,以及LED灯显示10100101二进制。;电路介绍:显示由一片74HC595驱动4位共阴数码管; 详细连接见下面管脚定义,实验前要连接J13;*dat bit p1.0 ;定义驱动74595的数据脚为p1.0clk bit p1.1 ;74595的时钟lat bit p1.2 ;栓锁gw bit p1.3 ;个位显示控制脚sw bit p1.4 ;十位bw bit p3.3 ;百位qw bit p3.4 ;千位sjgw equ 30h ;显示数据存储器sjsw equ 31hsjbw equ 32hsjqw equ 33h;- mov sp,#40h mov p1,#0fh mov p0,#5ah ;显示10100101二进制main : ;显示1234这个数 mov sjgw,#4 ;个位显示4 mov sjsw,#3 ;十位显示3 mov sjbw,#2 ;百位显示2 mov sjqw,#1 ;千位显示1 abc: lcall display ;调用显示子程序 ljmp abc ;循环显示;*;74HC595显示程序,使用RS1=1,RS0=0的1区;-display: PUSH ACC ;保存ACC push psw clr rs1 setb rs0 ;使用第一区工作寄存器 mov dptr,#xstab mov a,sjgw ;取得数据 movc a,a+dptr ;提取字模 acall dsout ;调用送出子程序 clr gw acall ds1ms ;调用显示1ms延时程序 setb gw mov a,sjsw movc a,a+dptr ;提取字模 acall dsout ;送出 clr sw acall ds1ms ;显示1ms setb sw mov a,sjbw movc a,a+dptr ;提取字模 acall dsout ;送出 clr bw acall ds1ms ;显示1ms setb bw mov a,sjqw movc a,a+dptr ;提取字模 acall dsout ;送出 clr qw acall ds1ms ;显示1ms setb qw pop psw POP ACC ;出栈 ret ;返回调用 ;-送出循环-dsout: mov r0,#8 ;8位dloop: rlc a ;高位在前 mov dat,c ;送出1位 setb clk clr clk djnz r0,dloop ;循环8次 setb lat ; clr lat ; 锁存 RET ;-显示延时- ds1ms: mov r1,#10ds1lo: mov r2,#100 djnz r2,$ djnz r1,ds1lo ret ;延时返回;*;显示字表(共阴)xstab: DB 3FH,06H,5BH,4FH ;"0","1","2","3" DB 66H,6DH,7DH,07H ;"4","5","6","7" DB 7FH,6FH,77H,7cH ;"8","9","A","B" DB 39H,5eh,79h,71h ;"C","D","E","F"end 2、设计一个模拟路口交通灯的程序,P0.0红灯、P0.1为黄灯、P0.2为绿灯,按键S1启动,在数码管上显示倒计时。30秒红灯;3秒黄灯;30秒绿灯。之后全部熄灭。再按下S1,再重复一次。程序调试成功,当场演示,并写入实验报告。26