单片机实验报告_第1页
单片机实验报告_第2页
单片机实验报告_第3页
单片机实验报告_第4页
单片机实验报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 走马灯实验一、实验题目:P2口接八个发光二极管,分别为D0、D1D7。程序先点亮D1,延时一段时间(2秒钟),再顺序点亮D1D7,然后又是D0。同时只能有一个灯亮。设晶振频率fosc=6MHz,要求亮灯2秒后下一个灯点亮。二、实验目的:1、学习89C51的功能及编程方法。2、学习P2口的使用方法及延时子程序的编写及使用。3、学习内部定时/计数器的使用及编程方法。4、初步掌握中断处理程序的编写方法。5、学习Proteus ISIS和 Keil C51软件的使用方法。三、程序说明及流程图:1、计算计数初值 T=216(6M12)=0.13s0.1s分段数:2s0.1=20(段)a=-0.1600000012=-50000 2、程序流程图(1) 使用延时程序实现跑马灯(2) 使用软件计数方法实现跑马灯(3) 使用硬件计数方法实现跑马灯四、实验硬件连接及程序:1、使用延时程序实现跑马灯(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数void delay ()/延时程序int a=50000;while (-a);void main ()char a=1;/赋值a=00000001,用于亮灯do P2=a;/把a的值赋值给P2a=a1;/使a左移一位if (a= =0) a=1;/如果a=0,重新从0000001开始delay ();/调用延时程序 while (1);/让主函数死循环,一直运行2、使用软件计数方法实现跑马灯(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数char a=0x01,b=0;/a=00000001,用于亮灯;b=0,用于计数void main ()TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0TMOD=0x01; /T1不用。T0:软件控制启停,定时器状态,方式1ET0=1;/允许T0中断EA=1;/CPU开放中断TR0=1;/T0开始运行P2=0x01;/最低位的灯亮,即D0亮while (1);/让主函数死循环,一直运行void T0_srv () interrupt 1 using 1/T0的中断服务函数,中断编号1,寄存器组1 TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的低8位TL0b+;/b自加1if(b= =20)/如果b=20,则为2秒钟b=0;a=a1;/使b复位,a左移1位 if (a= =0) a=1;/如果a=0,重新从00000001开始 P2=a;/把a的值赋值给P2 3、使用硬件计数方法实现跑马灯(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数char a=0x01;/a=00000001,用于亮灯void main ()TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0TL1=TH1=-20;/T1为加1计时器,20次为2秒钟,故计数初值为-20TMOD=0x61; / T1:软件启停,计数器,方式1;T0:软件启停,定时器,方式1ET0=1;/允许T0中断ET1=1;/允许T1中断EA=1;/CPU开放中断TR0=1;/T0开始运行TR1=1;/T1开始运行P2=0x01;/最低位的灯亮,即D0亮while (1);/让主函数死循环,一直运行void T0_srv () interrupt 1 using 1 /T0的中断服务函数,中断编号1,寄存器组1 TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0P1=0x7f;/P1=01111111,使P1.7为低电平P1=0x7f;/P1=01111111,延时,目的为确保能检测到P1=0xff;/P1=11111111,这样产生一个负跳变“ ”void T1_srv () interrupt 3 using 1 /T1的中断服务函数,中断编号3,寄存器组1a=a0.1s分段数:1s0.1=10(段) a=-0.1600000012=-50000 2、程序流程图四、实验硬件连接及程序:(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数char count; bit flag;/count用于计数,flag用于标记是不到1ssbit P20=P20; sbit P21=P21;sbit P22=P22; sbit P23=P23;sbit P24=P24; sbit P25=P25;void T0_srv () interrupt 1 using 1/T0的中断服务函数 TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0count+;if (count= =10) count=0;flag=1;void main ()char sum=0;TMOD=0x01;/T1不用。T0:软件控制启停,定时器状态,方式1TH0=-50000/256;/将计数初值赋值给T0的低8位TL0TL0=-50000%256;/将计数初值赋值给T0的高8位TH0ET0=1;EA=1;TR0=1;P2=0;while (1) P20=1;P25=1; /东西:绿; 南北:红 while (sum30) /东西方向延时30秒钟 while (!flag); flag=0; sum+; sum=0; P25=0;P24=1; /东西:绿 黄; 南北:红 while (sum3) /黄灯延时3秒钟 while (!flag); flag=0; sum+; sum=0; P24=0;P20=0;P22=1;P23=1;/东西:黄 红 南北:红 绿 while (sum40) /东西方向延时40秒钟 while (!flag); flag=0; sum+; sum=0; P22=0;P21=1; /南北:绿 黄 东西:红 while (sum0.1s分段数:1s0.1=10(段) a=-0.1600000012=-50000 2、程序流程图四、实验硬件连接及程序:(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数char count; bit flag;/count用于计数,flag用于标记是不到1ssbit P20=P20; sbit P21=P21;sbit P22=P22; sbit P23=P23;sbit P24=P24; sbit P25=P25;void T0_srv () interrupt 1 using 1/T0的中断服务函数 TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0count+;if (count= =10) count=0;flag=1;void main ()char sum=0;TMOD=0x01;/T1不用。T0:软件控制启停,定时器状态,方式1TH0=-50000/256;/将计数初值赋值给T0的低8位TL0TL0=-50000%256;/将计数初值赋值给T0的高8位TH0ET0=1;EA=1;TR0=1;P2=0;PX0=1;/设置为高优先级中断EX0=1;/开放中断while (1) P20=1;P25=1; /东西:绿; 南北:红 while (sum30) /东西方向延时30秒钟 while (!flag); flag=0; sum+; sum=0; P25=0;P24=1; /东西:绿 黄; 南北:红 while (sum3) /黄灯延时3秒钟 while (!flag); flag=0; sum+; sum=0; P24=0;P20=0;P22=1;P23=1;/东西:黄 红 南北:红 绿 while (sum40) /东西方向延时40秒钟 while (!flag); flag=0; sum+; sum=0; P22=0;P21=1; /南北:绿 黄 东西:红 while (sum0.0005s a=-0.00051200000012=-500 2、程序流程图四、实验硬件连接及程序:(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数sbit P10=P10;/位定义P10口void main () TMOD=0x00;/使用T0,软件起停,计时器,方式0TH0=-500/32;/初始化计时器,存入计数初值TL0=-500%32;ET0=1;/T0允许中断EA=1;/CPU中断开放TR0=1;/打开T0while (1);void T0_srv () interrupt 1 using 1TH0=-500/32;/初始化计时器,存入计数初值TL0=-500%32;P10=!P10;/ P10取反,产生方波五、程序运行结果:实验五 简易顺序控制器实验一、实验题目:简易顺序控制监控程序。在一个简易顺序控制器中,用8031的P1口上的八个继电器来控制一个机械装置的八个机械动作,要求P1口输出如图所示波形,为这个控制器编写一个监控程序。二、实验目的:1、掌握单片机内部计数器的工作原理及使用方法。2、进一步掌握单片机中断程序的编程方法。3、掌握采用单片机实现时间顺序控制的功能及编程方法。三、程序说明及流程图:1、编程思想根据P1口输出的波形图,想到P1口的输出状态,可分为16个状态。延时时间可以利用单片机内部定时器T0产生。在定时器T0的中断服务程序中设置软件计数器(减法计数器)的值,对当前状态的时间进行计数。当计数器的计数值为0时,计算下一个状态并取出该状态的持续时间送计时器单元,同时将对应的状态送P1口。2、程序流程图四、实验硬件连接及程序:(1)硬件连线图:(2)程序及说明:#include reg51.h/89C51的库函数sbit P10=P10;sbit P11=P11;/位定义P10口sbit P12=P12;sbit P13=P13;sbit P14=P14;sbit P15=P15;sbit P16=P16;sbit P17=P17;void main ()TMOD=0x01;/使用T0,软启停,计时器,方式1TH0=-50000/256;/装入计数初值TL0=-50000%256;ET0=1;/T0允许中断EA=1;/CPU中断开放TR0=1;/打开T0P1=0;while(1);void T0_srv() interrupt 1 using 1 static unsigned int count;/定义静态计数变量TH0=-50000/256;/初始化计时器,存入计数初值TL0=-50000%256;count+;/计数变量自增1if(count= =1) P10=1;/一次执行后,P1.0高电平if(count= =2) P10=0;/二次执行后,P1.0低电平if(count= =3) P11=1;if(count= =4) P11=0;if(count= =5) P12=1;if(count= =6) P12=0;if(count= =7) P13=1;if(count= =8) P13=0;if(count= =9) P14=1;if(count= =10) P14=0;if(count= =11) P15=1;if(count= =12) P15=0;if(count= =13) P16=1;if(count= =14) P16=0;if(count= =15) P17=1;if(count= =16) P17=0; count=0;/复位计数变量,开始循环五、程序运行结果:实验六 脉冲宽度测试程序实验一、实验题目:T1从0开始计数P3.3INT090HTMOD置“1”TR10 TR1,停止T1计数,读出T1值脉冲宽度测试程序。该程序的功能是测试P3.3上输出的正脉冲宽度(如下图),将测试的结果送入内部RAM缓冲器中。二、实验目的:1、了解计数脉冲的实现方法。2、初步了解对脉冲宽度的测量方法。3、进一步掌握定时器/计数器的使用方法。三、流程图:四、实验程序:#include reg51.hunsigned int plusewidth=0;sbit P33=P33;void main ()EA=0;/禁止所有中断TR1=0;/停止定时/计数器的运行TMOD=0x90;/T1:硬件启停,计时器,方式1while (1) TL1=0;/计数器初值为0 TH1=0;doif(P33= =0) break;/等待变为低电平while (1); TR1=1;/打开定时器运行控制,启动的一个条件 while(1)if (P33) break;/等待变为高电平,高电平为启动另一条件 while(1)if(P33= =0) break; TR1=0;/变为低电平时停止计数 plusewidth=(unsigned int)TH1; plusewidth=8;/ plusewidth左移8位,为“或”做准备 plusewidth|=(unsigned int)TL1;/将计数值合并存入变量plusewidth中 实验收获与感想通过这次交通灯(含中断)的实验,我学会了定时计数器的使用,并运用示波器调试波形的方法,进一步将加深了对中断的理解和使用。通过实验,初步了解了脉冲宽度测量的编程思想。在实验六中计数值无法读出,比较遗憾。但是我们可以考虑使用液晶显示器或者点击debug菜单里的Watch Windows选项添加变量进行跟踪读出。实验七 串行通信实验一、实验题目:利用虚拟终端,实现上位机与下位机的通信。上位机发出指定字符,下位机即虚拟终端收到并且返回原字符,通过虚拟终端的窗口显示出来,与发送的数据进行对比。二、实验目的:1、学习串行口的工作原理及通信程序的编程方法。2、学习PROTEUS的虚拟终端的使用。三、程序流程图:四、实验硬件连接及程序:1、硬件连线图:2、程序及说明:#include reg51.h/89C51的库函数#include string.h/头文件,包含strlen()函数char s=HELLO MCS-51;/要发送的字符串void main ()char a,b=0;TMOD=0x20;/使用T1,软件启停,定时器,方式2 SCON=0x50;/SM1=1,REN=1,SM0=SM2=0。SCON=01010000TH1=0xF4;/振荡频率11.0592MHz,波特率2400bps,装入的计数初值TL1=0xF4;/使用方式2时候,TH1和TL1的初值相同TR1=1;/启动定时器T1a=strlen(s);/测量待发送字符串的长度for (;b0.1s分段数:2s0.1=20(段) a=-0.1600000012=-500002、程序流程图(1)发送数据程序(2)接收数据程序四、实验硬件连接及程序:1、硬件连线图:2、程序及说明:(1)发送数据程序#include reg51.h/89C51的库函数char count; bit flag;/count计数,flag标记定时时间int s=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0d,0x0e,0x0f;/要发送的16进制数void T0_srv () interrupt 1 using 1 /T0的中断服务函数 TL0=-50000%256;/将计数初值赋值给T0的低8位TL0TH0=-50000/256;/将计数初值赋值给T0的高8位TH0count+;if (count= =20)/2秒到,将flag置1 count=0;fla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论