ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:445.15KB ,
资源ID:5729053      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5729053.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《单片机原理及应用》实验指导书要点.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《单片机原理及应用》实验指导书要点.docx

1、单片机原理及应用实验指导书要点MCS51单片机原理实验指导书付 浩 编淮阴师范学院 物理与电子电气工程学院2009.9目录实 验 要 求51单片机集成开发环境MedWin V2.39简介1. 安装 32. 设置 33. 使用 4STC单片机下载软件STC-ISP的使用实验一 LED流水灯 7一、实验目的 7二、实验内容 7三、实验电路连线 7四、实验说明 8五、思考题 9实验二 用一位数码管循环显示数字09一、实验目的 10二、实验内容 10三、实验电路连线 10四、实验说明 11五、思考题 13实验三 LED数码管的动态驱动一、实验目的 14二、实验内容 14三、实验电路连线 14四、实验说

2、明 14五、思考题 19实验四 用单片机自动演奏乐曲一、实验目的 20二、实验内容 20三、实验电路连线 20四、实验说明 20五、思考题 23实验五 电子钟一、实验目的 27二、实验内容 27三、实验电路连线 27四、实验说明 27五、思考题 31实验六 单片机与PC机的串行通信一、实验目的 36二、实验内容 36三、实验电路连线 36四、实验说明 36五、思考题 42实验七 I2C串行flash存储器的读写一、实验目的 43二、实验内容 43三、实验电路连线 43四、实验说明 43五、思考题 48实 验 要 求1、实验前预习实验内容,理解实验原理。2、按规定时间进入实验室,登记领取实验板和

3、连接线,按操作程序将实验板连接到PC机上,开始实验。2、实验完毕请指导老师确认后,按操作程序拆除实验板,将连接线收拾好,与实验板一起归还指导老师,方可离开实验室。3、按时撰写并上交实验报告。实验报告格式为:(1)实验目的,(2)实验内容,(3)源代码及流程图,(4)结果记录及分析,(5)思考题,(6)体会及设想。注意:实验板与PC机连接时一定要先连接串行通信电缆,然后再将其电源线插入USB接口;拆除时先断开其电源,再断开串行通信电缆。否则极易损坏PC机的串口。最好先关闭微机电源,再连接或拆除实验板。实验板原理图51单片机集成开发环境MedWin V2.39简介1. 安装从网站免费下载MedWi

4、n V2.39集成开发环境安装程序压缩包,将其释放后,按照默认路径安装到C:ManleyPmedWin文件夹。2. 设置(1)每次启动MedWin会出现对话框,询问使用仿真器还是模拟仿真,应点击模拟仿真按钮。(2)设置仿真器 点击设置设置仿真器命令,选择时钟频率为12兆赫兹。(3)设置工作目录 MedWin 集成开发环境默认的工作目录为C:MedWinPMedWin,建议根据需要建立自己的工作目录。注意:不得使用长文件名或长目录名!(4)设置编译器 将C语言编译器C51(文件夹)拷贝到C:MedWin文件夹下,点击设置设置编译工具命令,打开“设置编译工具”对话框,使用汇编语言时选择第一行,使用

5、C语言时选择第二行,如下图所示。3. 使用(1)新建项目 点击项目管理新建项目 命令,输入项目名称,点击确定按钮,出现“添加项目文件”对话框,输入源代码文件名,如T1.C(或T1.ASM),单击打开按钮,出现代码窗口,即可开始编程。(2)打开项目 点击项目管理打开项目 命令,点击项目文件名(项目文件后缀为.mpf),点击打开按钮,即可打开上次保存的项目。(3)编译 点击项目管理编译/汇编命令,启动编译器对源文件进行语法检查并编译,在消息窗口中显示编译结果。(3)模拟仿真 当源程序编译无误后,可进行模拟仿真调试。点击项目管理产生代码并装入命令,编译器对源程序进行重新编译并装入。这时,可使用调试菜

6、单中的相关命令进行调试,如设置断点、单步及全速执行等。(4)生成目标代码 点击项目管理输出Binary文件命令,生成BIN文件,用下载工具将其下载到实验板的单片机中执行。STC单片机下载软件STC-ISP的使用该软件界面如下图所示:按照界面上的提示:第一步,设置单片机型号为STC89C52RC。第二步,点击Open File按钮,打开编译生成的BIN文件或HEX文件。第三步,选择串口,设置波特率。如:COM1,115200。第四步,可按默认值不用设置。第五步,下载程序。在进行第五步之前,一定要保持实验板的串行通信线及电源线与PC机连接良好,并且实验板的电源开关处于关闭状态,然后,点击下载按钮,

7、再打开实验板电源开关,此时,软件将自动完成程序下载,下载完毕,实验板上的单片机立即开始运行。目前,MCS51内核单片机中STC89C5X(宏晶)和AT89S5X(ATMEL)两种芯片支持在线下载功能。实验一 LED流水灯一、实验目的1. 学习单片机并口的使用方法。2. 学习延时子程序的编写和使用。3. 学习集成开发环境MedWin的安装与使用。4. 学习STC单片机在线下载软件STC-ISP的使用。二、实验内容所谓流水灯就是8个发光二极管(LED)轮流点亮,周而复始。实验板上以P0口作输出口,经74LS244驱动,接8只发光二极管LED0-LED7。当单片机的引脚输出为低电平时发光二极管点亮,

8、为高电平时息灭。编写程序,使8个发光二极管循环点亮,时间间隔约0.5秒。三、实验电路连线实验板上与本实验有关的硬件如下图所示。74LS244驱动输出串联8个限流电阻接8个LED发光管,以防止其电流过大而烧坏。单片机的主时钟为11.0592MHz。JMP0和JMP1都短接1-2脚。四、实验说明1、P0口作为通用接口时是一准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P0口用作输入口时必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。输出时需要接上拉电阻,P0口内部没有上拉电阻,若将外围电路设计为低有效,高无效,则无需再外接上拉电阻。2、编写一个软件延时子程序

9、,延时时间约0.5秒,采用三重循环实现,汇编语言程序如下:DELAY: MOV R7, #198DEL1: MOV R6, #50DEL2: MOV R5, #23 DJNZ R5, $ DJNZ R6, DEL2 DJNZ R7, DEL1 RET查指令表可知执行MOV指令需用1个机器周期,DJNZ指令需用2个机器周期,在11.0592MHz晶振时,一个机器周期时间长度为1.085s,所以该段程序执行时间为:1(1223)501981.085s 500mS3、若使用C语言,可用for循环实现延时,下面的程序延时约500mS。void delay(void) int i,j; for(i=0;

10、i1000;i+) for(j=0;j50;j+) _nop_(); _nop_();4、流水灯的主程序(汇编语言)为: ORG 0000H LJMP MAIN ORG 0100HMAIN: CLR P1.5 ; P1.5=0,关闭蜂鸣器。MOV A,#0FEHLOP: MOV P0,A LCALL DELAY RL A SJMP LOP END5、流水灯的C语言主程序为:#include #include #include void main (void) unsigned char a,c; P1=0xdf; / P1.5=0,关闭蜂鸣器。 a=0xfe; while (1) P0=a;

11、c=a&0x80; a=a1; a=a|(c=0x80); delay(); 五、思考题1. 如何使点亮的LED从右往左移动?2. 如何使点亮的LED从两边往中间移动?实验二 用一位数码管循环显示数字09一、实验目的1. 学习单片机并口的使用方法。2. 学习延时子程序的编写和使用。3. 学习LED数码管的驱动、编码。二、实验内容实验板上有8个LED数码管,编写程序,使最右边的一个LED数码管循环显示09十个数字。时间间隔约0.5秒,其余LED数码管关闭。三、实验电路连线实验板上与本实验有关的硬件如下图所示。8个共阳的LED数码管(S0-S7)上同名的引脚连接在一起,由单片机P0口通过74HC2

12、44驱动(段控制),R12-R19为限流电阻。单片机P2口的8个引脚分别通过三极管Q0-Q7控制8个LED数码管的公共端(位控制)。单片机的主时钟为11.0592MHz。JMP0短接2-3脚,JMP1短接1-2脚。四、实验说明1、P0口和P2都是准双向口,输出时需要接上拉电阻。P0内部没有上拉电阻,P2口内部有弱上拉。2、下表为驱动LED数码管的段代码表,1-代表对应的笔段亮,0-代表对应的笔段不亮。若需要在最右边(S0)显示数字“5”,只要将从表中查得的段代码2CH写入P0口,再将P2.0置高,P2.1-P2.7置低即可。数字dpecgbfa十六进制P0.7P0.6P0.5P0.4P0.3P

13、0.2P0.1P0.0共阴共阳010110111B74810001010014EB210101101AD523100111019D624000111101EE15100110119B64610111011BB4470001010115EA810111111BF409100111119F603、实现最右边的一个LED数码管循环显示09十个数字的C语言程序如下:#include #include #include #define uchar unsigned charconst uchar code tab=0x48,0xeb,0x52,0x62,0xe1,0x64,0x44,0xea,0x40,

14、0x60;void delay(void) int i,j; for(i=0;i1000;i+) for(j=0;j50;j+) _nop_(); _nop_();void main(void) uchar i; P2=0x01; P1=0xdf; while(1) P0=tabi; delay(); i+; if(i=10) i=0; 4、实现最右边的一个LED数码管循环显示09十个数字的汇编语言程序如下:ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV P1,#0DFH MOV P2,#01H MOV R1,#00HLOOP: MOV A,R1 MOV DPTR

15、,#TAB MOVC A,A+DPTR MOV P0,A LCALL DELAY INC R1 MOV A,R1 CJNE A,#10,LOOP CLR A MOV R1,A SJMP LOOP DELAY: MOV R7,#198DEL1: MOV R6,#50DEL2: MOV R5,#23 DJNZ R5,$ DJNZ R6,DEL2 DJNZ R7,DEL1 RETTAB: DB 48H,0EBH,52H,62H,0E1H,64H,44H,0EAH,40H,60H END五、思考题1. 分别写出六个字母(用于显示十六进制数)的段代码,编写程序,在最右边数码管上实现0-F的循环显示。2.

16、 能否交替点亮点8个LED数码管?实验三 LED数码管的动态驱动一、实验目的1. 学习LED数码管的动态驱动编程。2. 学习使用定时/计数器、中断。3学习汇编语言的有关运算。二、实验内容编写程序,使实验板上的8个LED数码管稳定显示8个不同的数字,并使这四位数从00000000开始,每0.5秒钟加1。三、实验电路连线本实验有关的硬件见实验二。四、实验说明1. 在实验二中,我们已经能够让某一个LED数码管显示需要的数字,比如选让第一个LED显示“1”,隔一较短的时间(如2.5毫秒)后关闭第一个LED,让第二个LED显示“2”,如此周而复始,让8个LED依次显1、2、3、4、5、6、7、8,我们就

17、能看到8个LED上稳定地显示8个不同的数字。当然,每个瞬间只有一个LED被点亮,大家亮的时间相同,均为2.5毫秒,8个LED数码管点亮一遍需要20毫秒,一秒钟各亮50次,所以看上去不会有闪烁感,但亮度只是实验二中LED亮度的八分之一。要实现每隔再隔2.5毫秒变换一个LED,最好的方法是使用定时器中断。2. 汇编语言参考程序为:LED_PORT EQU P0 ;笔划输出,低有效SCN_PORT EQU P2 ;段扫描输出,低有效(P2.4-P2.7) DSEG ORG 10HDISP_BUF: DS 8 ;显示缓冲区SCN_INX: DS 1 ;扫描指针SCN_COD: DS 1 ;扫描码CNT

18、: DS 1 ;中断计数,每2.5ms加1 CSEG ORG 00H LJMP MAIN ;主程序入口,转初始化程序 ORG 0BH ;定时中断0入口 LJMP INTP0 ;每2.5ms中断一次,用于刷新显示;-初-始-化- ORG 30HMAIN: MOV SP,#50H ;初始化堆栈指针 CLR RS0 ;选用第0组通用寄存器 CLR RS1 CLR P1.5 CLR A MOV CNT,A MOV R1,#8 MOV R0,#DISP_BUFLOOP1: MOV R0,A ;显示缓冲区清零 INC R0 DJNZ R1,LOOP1 MOV SCN_INX,A ;扫描指针置0 MOV S

19、CN_COD,#80H ;右边LED先点亮 MOV TMOD,#01H ;定时器0,方式1 MOV TH0,#0F7H ;计数初值,每次2.5ms(11.0592MHz晶振) MOV TL0,#000H ;65536-(2.5ms/1.085us)=65536-2304=63232=0F700H SETB TR0 ;启动定时器0 SETB EA ;中断总允许 SETB ET0 ;允许定时器0中断 SJMP $ ;主程序在此循环;-定时器0中断服务程序,间隔2.5ms-INTP0: PUSH ACC PUSH PSW MOV TH0,#0F7H ;置计数初值 MOV TL0,#00H SETB

20、RS0 ;选用第1组通用寄存器 CLR RS1 MOV A,SCN_INX ;取扫描指针 ANL A,#07H ;清除高5位 ADD A,#DISP_BUF ;加显示缓冲区首地址 MOV R1,A MOV A,R1 MOV DPTR,#CODE_TAB ;DPTR指向笔划代码表 ANL A,#0FH MOVC A,A+DPTR ;取笔划代码 MOV LED_PORT,A ;笔划代码送LED口 MOV A,SCN_COD ;取扫描段代码 MOV P2,A MOV A,SCN_COD RR A ;扫描段代码循环右移一位 MOV SCN_COD,A INC SCN_INX ;扫描指针+1 INC C

21、NT MOV A,CNT CJNE A,#200,EN MOV CNT,#0 INC DISP_BUF+7 ;个位加一 MOV A,DISP_BUF+7 CJNE A,#10,EN ;不进位转移 MOV DISP_BUF+7,#0 ;进位则个位清零 INC DISP_BUF+6 ;十位加一 MOV A,DISP_BUF+6 CJNE A,#10,EN MOV DISP_BUF+6,#0 ;进位则十位清零 INC DISP_BUF+5 ;百位加一 MOV A,DISP_BUF+5 CJNE A,#10,EN MOV DISP_BUF+5,#0 ;进位则百位清零 INC DISP_BUF+4 ;千

22、位加一 MOV A,DISP_BUF+4 CJNE A,#10,EN MOV DISP_BUF+4,#0 ;进位则千位清零 INC DISP_BUF+3 ;万位加一 MOV A,DISP_BUF+3 CJNE A,#10,EN MOV DISP_BUF+3,#0 ;进位则万位清零 INC DISP_BUF+2 ;十万位加一 MOV A,DISP_BUF+2 CJNE A,#10,EN MOV DISP_BUF+2,#0 ;进位则十万位清零 INC DISP_BUF+1 ;百万位加一 MOV A,DISP_BUF+1 CJNE A,#10,EN MOV DISP_BUF+1,#0 ;进位则百万位

23、清零 INC DISP_BUF+0 ;千万位加一 MOV A,DISP_BUF+0 CJNE A,#10,EN MOV DISP_BUF+0,#0 ;进位则千万位清零 EN: POP PSW POP ACC RETI;-笔划代码表-CODE_TAB: DB 48H,0EBH,52H,62H,0E1H,64H,44H,0EAH,40H,60H END3. C语言参考程序为:#include #define uchar unsigned charconst uchar code tab1=0x48,0xeb,0x52,0x62,0xe1,0x64,0x44,0xea,0x40,0x60;const

24、 uchar code tab2=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;uchar buf8=0,0,0,0,0,0,0,0;/显示缓冲区,开机先显示00000000void main(void) P1=0xdf; EA= 1; /允许中断 TMOD=0x01; /设定时器0为模式1(16位) ET0=1; /定时器0中断允许 TH0=0xf7; /晶振11.0592MHz,2.5ms TL0=0; TR0=1; /开始计数 while(1); /死循环,等待中断 void timeint(void) interrupt 1 /定时器0中断服务程序 s

25、tatic uchar k,count; char i; TH0=0xf7; /设置定时器时间常数 TL0=0; k+; k&=0x07; P0=tab1bufk; /笔划代码送P0口 P2=tab2k; /控制扫描码送P2口 if(+count=200) / 计数200次为2.5ms X 200=0.5s count=0; /到0.5秒钟,显示的数字加一 for(i=7;i=0;i-) bufi+; if(bufi=10) bufi=0;/加到10向前进位 else break; 五、思考题如何让8个LED数码管从00-00-00开始,每秒钟自动加1,前两位代表时,中间两位代表分,后两位代表

26、秒?实验四 用单片机自动演奏乐曲一、实验目的(1)进一步熟悉89C51定时器/计数器的功能及应用;(2)掌握其初始化与中断服务程序的编程方法;(3)掌握用定时器/计数器发出不同音调的编程方法。二、实验内容用单片机的定时器/计数器0作定时器使用,工作于模式1,中断产生方波发声,根据各个的频率,计算对应的定时时间常数,定时器中断后按此常数赋初值,从而发出对应的音调。将歌曲的音调和节拍编成一个表,用音调作为定时器的初值,用节拍控制发音时间, 就可以实现自动演奏。三、实验电路连线本实验有关的硬件如右图所示。四、实验说明声单定时初值常数计算方法:根据下表的音阶频率,计算对应的音阶周期T,用T/2计算定时

27、周期数(晶振11.0592MHz),填入下表中。定时器的计数初值为65536定时周期数,在程序计算产生。定时周期数增加1倍,音阶降低八度,定时周期数降低1倍,音阶升高八度。音阶(C调)1234567频率(Hz)256288320341384427480周期(s)3906347231252932260423422083定时周期数3600320028802702240021581920自动演奏东方红乐曲的C语言程序为:#include #define uchar unsigned char#define uint unsigned intsbit P15=P15;code uint cyc=3600,3200,2880,2702,2400,2158,1920;/音阶1-7对应的计数周期数code uchar tone=15,15,16,12,11,11,06,12,15,15,16,21,16,15,11,11, 06,12,15,12

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1