欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机原理及其应用实验报告.docx

    • 资源ID:9016883       资源大小:1.78MB        全文页数:42页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机原理及其应用实验报告.docx

    1、单片机原理及其应用实验报告单片机原理及其应用实验报告北航单片机原理及其应用实验报告班级:110323姓名:赵敏杰学号:11031064同组者:郑硕学号:11031105实验一 单片机开发环境以及I/O 使用实验一实验目的1熟悉MCS-51 系列单片机开发软件的使用2掌握单片机I/O 口的使用3学习延时子程序的编写和使用二实验内容1验证性实验(1)实验内容:I/O 口做输出口,I/O 口接一个LED 发光二极管,使其闪烁。有关说明:根据 LED 的单向导通性,可以用单片机的P1.0(也可以是其他I/O 口)作为LED 的控制端。当P1.0 输出为低电平时,LED 灭,反之,LED 亮。本实验系统

    2、晶振为 11.0592MHz,则一个机器周期为12/11.0592us=1.085us,为方便编写延时函数,认为一个机器周期为1us。硬件连接:用导线将试验箱中的 P1.0 与L1 相连。程序:C 语言程序#include /89S52 寄存器定义头文件/*-延时子程序(有参函数),t=n*10ms-*/void delay(unsigned char n) unsigned char i,j,k;for(i=0;in;i+)for(j=0;j14;j+)for(k=0;k237;k+);/*-主函数-*/void main() while(1)P1_0=0; /P1.0 赋值为0,LED 灭

    3、delay(100); /调用延时子程序,t=100*10msP1_0=1; /P1.0 赋值为1,LED 亮delay(100);汇编语言程序ORG 00HAJMP START ;在首地址处放置跳转指令;以免主程序占用中断入口地址ORG 30HSTART:CLR P1.0 ;P1.0 赋值为0,LED 灭MOV R0,#100 ;R0 的值决定延时时间长短t=R0*10msLCALL DELAY ;调用延时函数SETB P1.0 ;P1.0 赋值为1,LED 亮MOV R0,#1003LCALL DELAY ;调用延时函数AJMP START ;无条件跳转至START,继续循环执行/*-延时

    4、子程序,t=R0*10ms-*/DELAY:D1:MOV R1,#20D2:MOV R2,#248DJNZ R2,$DJNZ R1,D2DJNZ R0,D1RETEND实验现象:可以看到 LED1 大致亮1s 后灭1s,如此循环。(2)实验内容:I/O 口做输入口,一个I/O 口接一个拨动开关,另一个I/O 口接一个LED发光二极管,单片机读取开关的状态并通过LED 显示出来。有关说明:P0 口是一组漏极开路型双向I/O 口,也即地址/数据总线复用口。对端口写“1”可作为高阻抗输入端用。硬件连接:用导线将试验箱中的 P1.0 与LED 发光二极管L1 相连,P0.0 与拨动开关K1相连。程序:

    5、C 语言程序#include /89S52 寄存器定义头文件void main()while(1) P0=0xff; /对端口写1,作为高阻抗输入端用if(P0_0) /判断P0.0 是否为高电平P1_0=0;else /如果P0.0 不是高电平,则执行后面的语句P1_0=1;汇编语言参考程序ORG 00HLJMP MAINORG 30HMAIN:JB P0.0,DEL ;识别按键是否闭合SETB P1.0LJMP MAINDEL:CLR P1.0LJMP MAINEND实验现象:可以看到 LED1 的状态和开关1 的状态一致。2.设计性实验实验内容:模拟舞台灯光控制实验具体要求:P0.0 和

    6、P0.1 口连接两路拨动开关,P1 口连接8 路LED。不同的开光状态控制LED 进行流水灯、闪烁等,从而达到模拟舞台炫耀灯光控制的目的。当 P0.1 和P0.0 的状态为00 时,8 路LED 从右至左流水点亮,具体循环顺序为:L1􀃆L2􀃆L3􀃆L4􀃆L5􀃆L6􀃆L7􀃆L8􀃆L1,如此重复循环;当P0.1 和P0.0的状态为01 时,8 路LED 从左至右流水点亮,具体循环顺序为:L8􀃆L7􀃆L6􀃆

    7、;L5􀃆L4􀃆L3􀃆L2􀃆L1􀃆L8,如此重复循环;当P0.1 和P0.0 的状态为10 时,8 路LED 交替闪烁,具体循环顺序为:L1、L3、L5、L7􀃆L2、L4、L6、L8􀃆 L1、L3、L5、L7,如此重复循环下去;当P0.0 和P0.1 的状态为11 时,8 路LED 一起闪烁,具体循环顺序为:全灭􀃆全亮􀃆全灭,如此重复下去。硬件连接:用导线将实验箱中的P0.0 与开关K1 相连,P0.1 与开关K2 相连,P1.0P1.

    8、7 分别与LED 发光二极管L1L8 相连。程序:C 语言程序#include /89S52 寄存器定义头文件void delay(unsigned char n) unsigned char i,j,k;for(i=0;in;i+)for(j=0;j14;j+)for(k=0;k237;k+);void main() unsigned char i; P0=0xff; while(1) if(P0_1=0&P0_0=0) P1=0x01; for(i=1;i=8;i+) delay(100); P1=P11; if(P0_1!=0|P0_0!=0) break; if(P0_1=0&P0_0

    9、=1) P1=0x80; for(i=1;i1; if(P0_1!=0|P0_0!=1) break; if(P0_1=1&P0_0=0) P1=0x01; for(i=1;i=4;i+) delay(100); P1=P12; if(P0_1!=1|P0_0!=0) break; P1=0x02; for(i=1;i=4;i+) delay(100); P1=P12; if(P0_1!=1|P0_0!=0) break; if(P0_1=1&P0_0=1) P1=0xff; delay(100); P1=0x00; delay(100); if(P0_1!=1|P0_0!=1) break;

    10、 三实验分析与感想本次实验的内容是单片机的开发环境以及I/O 的使用,主要要求我们熟悉MCS-51 系列单片机开发软件的使用,掌握单片机I/O 口和延时子程序的使用。第一次接触编写程序的软件有些不熟练,慢慢摸索之后逐渐掌握了编写和倒入单片机的过程,但是由于电脑串口的问题,经常出现串口被占用的情况,多次检查之后仍然不能排除错误,最后重启电脑之后可以继续完成实验,但一两次使用之后又出现串口的情况,十分奇怪,最近不得不换电脑才能完成实验。本次实验基本完成了老师要求的内容,但由于串口被占用的情况,被浪费太多时间,以至于最后一个实验没有完全完成,但整体思想及程序上已没有问题。第二次实验二 单片机中断及定

    11、时器使用实验一实验目的1学习外部中断技术的基本使用方法及中断处理的编程方法。2学习单片机定时器的基本使用方法及其编程方法。二实验内容1验证性实验(1)实验内容:外部中断的实验,8 路LED 做流水灯,当接收到外部中断后,LED 全部点亮一段时间,之后恢复到流水灯状态。有关说明:采用外部中断 0 负边沿产生中断信号,中断响应函数应尽量简洁。硬件连接:用导线将实验箱中的 P1.0P1.7 分别与LED 发光二极管L1L8 相连。INT0与负脉冲相连(硬件在实验箱的具体位置可以参照文档最后面的附图)。程序:C 语言程序# includeunsigned char STATE;unsigned cha

    12、r s0;/*-延时子程序(有参函数),t=n*10ms-*/void delay(unsigned char n) unsigned char i,j,k;for(i=0;in;i+)for(j=0;j14;j+)for(k=0;k237;k+);void main()EA=1; /CPU 开中断EX0=1; /开外部中断0IT0=1; /边沿触发方式s0=0x01;while(1) if(!STATE) /如果标志位STATE 为0,则做流水灯P1=s0;s0=s01;if(s0=0x00) s0=0x01;delay(30);else /如果标志位STATE 为1,则LED 全亮STAT

    13、E=0;P1=0xff;delay(100);/*-中断服务函数-*/void int0() interrupt 0STATE=1; /标志位STATE 置1汇编语言程序ORG 0000HJMP START ;在首地址处放置跳转指令;以免主程序占用中断入口地址ORG 0003H ;外部中断0 程序入口地址JMP INTORG 0030HSTART:SETB EA ;CPU 开中断SETB EX0 ;开外部中断0SETB IT0 ;边沿触发方式MOV A,#01HCALL LOOPLOOP: MOV P1,AMOV R0,#30 ;R0 的值决定延时时间长短;t=R0*10msCALL DELA

    14、Y ;调用延时函数RL A ;移位JMP LOOP ;无条件跳转至LOOP,继续循环执行/*-外部中断0 中断程序-*/INT: MOV B,#0FFHMOV P1,BMOV R0,#30CALL DELAYRETI/*-延时子程序,t=R0*10ms-*/DELAY:D1:MOV R1,#20D2:MOV R2,#248DJNZ R2,$DJNZ R1,D2DJNZ R0,D1RETEND实验现象:可以看到在没有中断的时候,8 路LED 从右至左流水点亮,当外部中断脉冲到来以后8 路LED 全部点亮一段时间,之后恢复流水点亮状态。(2)实验内容:定时器实验,8 路LED 所表示的二进制数每定

    15、时0.5s 增1。有关说明:实验箱单片机使用的晶振频率为 11.0592MHz,在计算定时器初值的时候要注意。在汇编语言中,数据长度只支持到8 位,因此在用定时器定时的时候要注意到这一点。硬件连接:用导线将实验箱中的 P1.0P1.7 分别与LED 发光二极管L1L8 相连。程序:C 语言程序# include int time;void main() TMOD=0x01; /定时器0 工作方式1TH0=64614/256; /计算初值TL0=64614%256;EA=1; /CPU 开中断ET0=1; /开定时器中断0TR0=1; /开启定时器0 并开始工作while(1); /等待中断/*

    16、-定时器0 中断服务函数-*/void time0() interrupt 1 time+; /每1ms,time 加1if(time=500) /time 加满500 次后,0.5s 时间到 time=0; /time 清零,重新计数P1+;TH0=64614/256; /重新装载定时器初值TL0=64614%256;汇编语言参考程序ORG 0000HJMP START ;在首地址处放置跳转指令;以免主程序占用中断入口地址ORG 000BH ;定时器0 程序入口地址JMP ET0PORG 0030HSTART:MOV TMOD,#01H ;定时器0,工作方式1MOV TH0,#4CH ;定时

    17、器装载初值,50ms 中断一次MOV TL0,#00H ;这里需要注意,前面的c 程序定时时间为;1ms,这里汇编定时时间为50ms,因为汇编;数据长度只支持到8 位,如果定时时间为1ms,;500ms 需要中断500 次,汇编无法支持,所以;定时时间改为50msSETB EA ;CPU 开中断SETB ET0 ;开定时器中断SETB TR0 ;定时器开始工作MOV A,#0AHCALL LOOPLOOP: CJNE A,#00H,LOOP ;A 不等于零,跳转LOOPINC B ;B 加1MOV P1,BMOV A,#0AHJMP LOOP ;/*-定时器0 中断程序-*/ET0P:DEC

    18、A ;A 减1MOV TH0,#4CHMOV TL0,#00HRETIEND实验现象:可以看到用 P1 口所接的8 路LED 表示的二进制数每隔0.5s 加1。2.设计性实验实验内容:模拟救护车优先的交通灯控制实验具体要求:具体要求为用两组不同颜色的LED 分别模仿两个路口的“红灯”、“绿灯”、“黄灯”。平时两组交通灯按规律点亮,具体规律为:南北路口:绿灯(5s)􀃆黄灯(2s)􀃆红灯(5s)􀃆黄灯(2s)􀃆绿灯(5s)东西路口:红灯(5s)􀃆黄灯(2s)􀃆绿灯(5s)􀃆

    19、黄灯(2s)􀃆红灯(5s)当救护车来时(用负脉冲触发外部中断表示救护车到来),两个路口马上都变成红灯让救护车优先通过,红灯保持3s,待救护车通过以后,两个路口的交通灯恢复正常的工作状态。实验中的交通灯点亮的时间需要用定时器精确定时,不能使用延时函数。硬件连接:INT0 与负脉冲相连,LED 与单片机的连接没有固定要求,下图只是提供一种参考接法。程序:# includeunsigned char STATE;unsigned char s0;/*-延时子程序(有参函数),t=n*10ms-*/void delay(unsigned char n) unsigned char i

    20、,j,k;for(i=0;in;i+)for(j=0;j14;j+)for(k=0;k237;k+);void main() EA=1; /CPU 开中断EX0=1; /开外部中断0IT0=1; /边沿触发方式s0=0x01;while(1) if(!STATE) /如果标志位STATE 为0,则做流水灯P1=s0;s0=s01;if(s0=0x00) s0=0x01;delay(30);else /如果标志位STATE 为1,则LED 全亮STATE=0;P1=0xff;delay(100);/*-中断服务函数-*/void int0() interrupt 0STATE=1 ; /标志位S

    21、TATE 置1# include int time,i;unsigned char STATE;unsigned char m;void delay(unsigned char n)unsigned char i,j,k;for(i=0;in;i+)for(j=0;j14;j+)for(k=0;k237;k+);void main() TMOD=0x01; /定时器0 工作方式1TH0=64614/256; /计算初值TL0=64614%256;EA=1; /CPU 开中断ET0=1; /开定时器中断0TR0=1; /开启定时器0 并开始工作EX0=1; /开外部中断0IT0=1; /边沿触发

    22、方式while(1);/*-定时器0 中断服务函数-*/void time0() interrupt 1 time+; /每1ms,time 加1if(time=5000&time=7000&time=12000&time14000) time=0; TH0=64614/256; /重新装载定时器初值TL0=64614%256;void int0() interrupt 0 P1=0x24;ET1=1;TR1=1;TH1=64614/256; /重新装载定时器初值TL1=64614%256;while(m=3000);ET1=0;TR1=0; void t1() interrupt 3m+;T

    23、H1=64614/256; /重新装载定时器初值TL1=64614%256;三实验分析与感想本次实验是单片机中断及定时器使用实验,要求我们学习外部中断技术的基本使用方法及中断处理的编程方法,学习单片机定时器的基本使用方法及其编程方法。前两个小实验都比较顺利,分别利用了中断和定时器的功能。只要注意一下实验使用的LED灯是共阳的还是共阴的,应该就可以较顺利完成。第三个设计性实验综合了前两个实验的内容,而且要求中出现了三个时间,但是51单片机没有三个定时器,故要利用软件的辅助才能完成。但是始终没有结果,调试将近半节课还是不行,在老师的帮助下再次调试,发现单片机出现了问题。这让我领悟到:出现问题不要一

    24、味埋头找程序错误或者硬件连接错误,应该灵活的判断器件是否出现了故障。这会让我们节约很多时间,少走一些弯路。实验三 单片机串口使用实验一实验目的1学习单片机与上位机串行通信的基本使用方法。2学习动态数码管显示的基本使用方法。二实验内容1验证性实验(1)实验内容:单片机串行接收数据实验:6 位数码管通过动态扫描作为显示模块,上位机通过串口调试助手以十六进制形式向单片机发送00-ff范围内的数据,波特率为9600,单片机接收到数据以后,在数码管的最后两位显示出来,数码管其它位熄灭。有关说明:LED 数码管显示是单片机应用系统中最常用、最基本的输出设备,用户可以利用显示器件显示各种需要输出的视觉信息,

    25、实现人机对话。单片机对数码管的显示方式可分为静态显示与动态显示两种。静态显示中每一个数码管需要一个独立的输出口控制,静态显示的特点是显示程序简单、亮度高、稳定性好、占用CPU 时间少,但占用的I/O 口较多,所以静态显示常用在显示器数目较少的应用系统中。当显示位数较多时,可以采用动态显示。动态显示是指数码管轮流地显示各自的字符,每位数码管都在显示和熄灭两个状态中循环,同一时间只有一位数码管处于显示状态。动态显示的特点是线路简单、硬件成本相对较低,但需要不断刷新、扫描I/O 口,占用CPU 时间较多。动态数码管控制原理:采用各位数码管循环轮流显示的方法,当循环显示频率较高时,由于人眼的暂留特性,

    26、看不出闪烁显示现象,这种显示需要一个接口完成字型码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。AT89S52 有UART 可编程的全双工串行口用于串行通信,由TXD 发送数据,RXD 接收外部输入的数据。具有两个缓冲器SBUF,一个作发送缓冲器,另一个作接收缓冲器,它们拥有相同的名字和地址空间,但不会出现冲突,因为一个只能读出数据,一个只能写入数据。硬件连接:首先将实验箱上的 LD0LD5 与S0S5 之间的短路冒全部拔去,ah 与B0B3、A0A3 之间的短路帽也全部拔去,将短路帽插到双排插针中的一根针上,防止丢失,做完实验再重新插回去。之后将LD0LD5 与P2_0P2

    27、_5 用导线相连,ah 与P1_0P1_7 用导线相连,最后还需要将串口插到电脑上,串口线的另一端与实验箱的J13 相连,注意引脚排列顺序。程序:C 语言程序#include#define uchar unsigned char /变量类型定义uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, /七段码0-70x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;/七段码8-f,最后一码0x00 作用为熄灭数码管uchar segment6 ; /段选uchar byte6 ; /位选uchar

    28、play6=0,0,0,0,0,0 ; /要显示的数字uchar k;uchar d;void Display_Init(); /数码管显示初始化void Uart_Init(); /串口初始化void Display(); /数码管显示函数/*-数码管显示初始化-*/void Display_Init() /初始化,通过定时器,按固定频率扫描数码管TMOD = TMOD|0x01; /定时器0,工作方式1TH0 = 0xfc; /计算初值,定时时间为1msTL0 = 0x66;EA = 1; /CPU 开中断ET0 = 1; /开定时器中断0TR0 = 1; /开启定时器0 并开始工作5/*-串口初始化-*/void Uart_Init()TMOD = TMOD|0x20; /定时器1,工作方式2TH1 = 0xfd; /波特率为9600TL1 = 0xfd;SCON = 0x50; /设置定时器工作方式PCON = 0;EA = 1; /CPU 开中断ES = 1; /允许串口中断TR1 = 1; /定时器1 开始工作/*-扫描数码管数据显示函数-*/void Display()uchar n=0 ;uchar m=0


    注意事项

    本文(单片机原理及其应用实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开