收藏 分享(赏)

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

上传人:小屁孩 文档编号:9089997 上传时间:2019-07-23 格式:DOC 页数:51 大小:1.78MB
下载 相关 举报
单片机原理及其应用实验报告.doc_第1页
第1页 / 共51页
单片机原理及其应用实验报告.doc_第2页
第2页 / 共51页
单片机原理及其应用实验报告.doc_第3页
第3页 / 共51页
单片机原理及其应用实验报告.doc_第4页
第4页 / 共51页
单片机原理及其应用实验报告.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、北航单片机原理及其应用实验报告班级:110323姓名:赵敏杰学号:11031064同组者:郑硕学号:110311052实验一 单片机开发环境以及 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 亮。本实验系统晶振为 11.0592MHz,则一个

2、机器周期为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;i /89S52 寄存器定义头文件void main()while(1) P0=0xff; /对端口写“1“,作为高阻抗输入端用if(P0_0) /判断 P0.0 是否为高电平P1_0=0;else /如果 P0.

3、0 不是高电平,则执行后面的语句P1_0=1;汇编语言参考程序ORG 00HLJMP MAINORG 30HMAIN:JB P0.0,DEL ;识别按键是否闭合SETB P1.0LJMP MAINDEL:CLR P1.0LJMP MAINEND实验现象:可以看到 LED1 的状态和开关 1 的状态一致。52.设计性实验实验内容:模拟舞台灯光控制实验具体要求:P0.0 和 P0.1 口连接两路拨动开关,P1 口连接 8 路 LED。不同的开光状态控制 LED 进行流水灯、闪烁等,从而达到模拟舞台炫耀灯光控制的目的。当 P0.1 和 P0.0 的状态为 00 时,8 路 LED 从右至左流水点亮,

4、具体循环顺序为:L1L2L3L4L5L6L7L8L1 ,如此重复循环;当 P0.1 和 P0.0 的状态为 01 时,8 路 LED 从左至右流水点亮,具体循环顺序为:L8L7L6L5L4L3L2L1L8 ,如此重复循环;当 P0.1 和 P0.0 的状态为 10 时,8 路 LED 交替闪烁,具体循环顺序为:L1、L3、L5、L7L2 、L4、L6、L8 L1、L3、L5、L7,如此重复循环下去;当 P0.0 和 P0.1 的状态为 11 时,8 路 LED 一起闪烁,具体循环顺序为:全灭 全亮 全灭,如此重复下去。硬件连接:用导线将实验箱中的 P0.0 与开关 K1 相连,P0.1 与开关

5、 K2 相连,P1.0P1.7 分别与 LED 发光二极管 L1L8 相连。程序:C 语言程序#include /89S52 寄存器定义头文件void delay(unsigned char n) unsigned char i,j,k;for(i=0;i1; if(P0_1!=0|P0_0!=1)break;if(P0_1=1for(i=1;iunsigned char STATE;unsigned char s0;/*-延时子程序(有参函数) ,t=n*10ms-*/void delay(unsigned char n) unsigned char i,j,k;for(i=0;iint t

6、ime;void main() TMOD=0x01; /定时器 0 工作方式 1TH0=64614/256; /计算初值TL0=64614%256;EA=1; /CPU 开中断ET0=1; /开定时器中断 0TR0=1; /开启定时器 0 并开始工作while(1); /等待中断/*-定时器 0 中断服务函数-*/void time0() interrupt 1 time+; /每 1ms,time 加 1if(time=500) /time 加满 500 次后,0.5s 时间到 time=0; /time 清零,重新计数P1+;TH0=64614/256; /重新装载定时器初值TL0=646

7、14%256;15汇编语言参考程序ORG 0000HJMP START ;在首地址处放置跳转指令;以免主程序占用中断入口地址ORG 000BH ;定时器 0 程序入口地址JMP ET0PORG 0030HSTART:MOV TMOD,#01H ;定时器 0,工作方式 1MOV TH0,#4CH ;定时器装载初值,50ms 中断一次MOV TL0,#00H ;这里需要注意,前面的 c 程序定时时间为;1ms,这里汇编定时时间为 50ms,因为汇编;数据长度只支持到 8 位,如果定时时间为 1ms,;500ms 需要中断 500 次,汇编无法支持,所以;定时时间改为 50msSETB EA ;CP

8、U 开中断SETB ET0 ;开定时器中断SETB TR0 ;定时器开始工作MOV A,#0AHCALL LOOPLOOP: CJNE A,#00H,LOOP ;A 不等于零,跳转 LOOPINC B ;B 加 116MOV P1,BMOV A,#0AHJMP LOOP ;/*-定时器 0 中断程序-*/ET0P:DEC A ;A 减 1MOV TH0,#4CHMOV TL0,#00HRETIEND实验现象:可以看到用 P1 口所接的 8 路 LED 表示的二进制数每隔 0.5s 加 1。2.设计性实验实验内容:模拟救护车优先的交通灯控制实验具体要求:具体要求为用两组不同颜色的 LED 分别模

9、仿两个路口的“红灯”、 “绿灯” 、 “黄灯” 。平时两组交通灯按规律点亮,具体规律为:南北路口:绿灯(5s) 黄灯(2s) 红灯(5s) 黄灯(2s) 绿灯(5s)17东西路口:红灯(5s) 黄灯(2s) 绿灯(5s) 黄灯(2s) 红灯(5s)当救护车来时(用负脉冲触发外部中断表示救护车到来) ,两个路口马上都变成红灯让救护车优先通过,红灯保持 3s,待救护车通过以后,两个路口的交通灯恢复正常的工作状态。实验中的交通灯点亮的时间需要用定时器精确定时,不能使用延时函数。硬件连接:INT0 与负脉冲相连,LED 与单片机的连接没有固定要求,下图只是提供一种参考接法。程序:# includeun

10、signed char STATE;unsigned char s0;18/*-延时子程序(有参函数) ,t=n*10ms-*/void delay(unsigned char n) unsigned char i,j,k;for(i=0;iint time,i;unsigned char STATE;unsigned char m;void delay(unsigned char n)unsigned char i,j,k;for(i=0;i=5000 TH0=64614/256; /重新装载定时器初值TL0=64614%256;void int0() interrupt 0 P1=0x24

11、;ET1=1;TR1=1;TH1=64614/256; /重新装载定时器初值TL1=64614%256;while(m#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 play6=0,0,0,0,0,0 ; /要显示的

12、数字uchar k;uchar d;27void 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

13、_Init()TMOD = TMOD|0x20; /定时器 1,工作方式 2TH1 = 0xfd; /波特率为 9600TL1 = 0xfd;SCON = 0x50; /设置定时器工作方式28PCON = 0;EA = 1; /CPU 开中断ES = 1; /允许串口中断TR1 = 1; /定时器 1 开始工作/*-扫描数码管数据显示函数-*/void Display()uchar n=0 ;uchar m=0x01;for(n=0;n0x0f)segmentn=0x10; /显示的数据大于 0x0f,则该位熄灭elsesegmentn=playn;byten=m;m = m1;/*-主函数-

14、*/void main (void)29Uart_Init() ;Display_Init();play0=0x00;play1=0x00;play2=0xff;play3=0xff;play4=0xff;play5=0xff;while(1)6Display() ;/*-定时器 0 中断服务函数-*/void time0() interrupt 1P1 = tablesegmentk;P2 = bytek;k+;if(k=6)30k=0;TH0=0xfc; /重新装载初值TL0=0x66;void uart() interrupt 4if(RI) /接收标志位d = SBUF; /读取串口发来的数据play1 = d/0x10;play0 = d%0x10;RI=0; /清除接收标志位实验现象:单片机复位以后,最后两位数码管显示00 ,其它位数码管则熄灭,当上位机通过串口发送数据时,数码管的后两位显示数据。(2)实验内容:单片机串行发送数据实验,波特率为 9600,外部中断 INT0 与负脉冲相连,对脉冲个数进行计数,将计数结果以字符形式通过串

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报