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

下载本文档

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

文档简介

单片机原理与接口技术实验报告第10页共10页实验七串行通信实验一、实验目的掌握实现串行通信的基本方法;掌握键盘按键控制的串行通信实现方法; 掌握定时控制的串行通信实现方法。根据已知电路和设计要求在PROTEUS平台仿真实现通信系统。二、实验内容 实验内容自己创意!在实验报告中详细列出。三、实验原理PS:电路原理图(可局部图)、实验实现控制的原理叙述。参照《单片机实验板电路原理图》四、实验方法与步骤设计思路和方法:根据电路图,分析交通灯的设计思路针对电路图及设计要求给出交通灯的程序框图。设计步骤:1、按照电路图上的MCU芯片与LED、7段数码管的连接方式,绘制交通灯控制系统电路图。2、编写源代码。…3、编译与调试。…4、Proteus仿真运行及验证。…五、实验结果与分析(实验程序设计必需先有程序框图,程序框图体现在实验报告中)软件设计过程a)源代码(汇编语言设计)ORG00H…ENDb)编译、调试过程c)编译结果分析控制系统设计实现过程、结果及分析a)控制系统电路图b)实现过程c)结果分析及结论(…没有完成的过程或步骤请说明原因所在,实验结果偏差要分析原因,并给出可行的实验解决方案或建议,得出正确的结果)六、实验结论(实验总结与实验心得)…(给出实验的总结)…(这是实验的心得)实验过程中经过对Wave6000仿真平台的操作,对软件仿真有了XXXX的认识。其中,在进行编译时,刚开始没有成功,后来重新打开软件再进行修改、编译就此解决了问题。不过最后虽然输入了XXXX并进行了保存,但是不知道如何检测XXXX是否保存到XXXX中。对于XXXX平台的设定,在这次实验中XXXX…。注意:1、此模板框架、字体大小不要修改,框架下的具体内容请按照各自试验自己认真完成。2、试验电路图是《单片机实验电路板原理图》。3、进实验室前请准备好程序流程框图和程序!请重视实验!喜欢实验!/**************************************************************标题: 串口调试程序,查询法接收数据效果: 运行本例子,打开本例子文件夹中的上位机软件,设置波特率2400,再进行发送数据,接收区返回接收内容***************************************************************/ORG0000HLJMPMAIN;主程序的开始ORG0200HMAIN: MOVTMOD,#20H ;设置定时器1为模式2,做为波特率发生器 MOVTL1,#0F3H ;2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400 MOVTH1,#0F3H ; SETBTR1 ;启动波特率发生 MOVSCON,#50H ;串口的工作方式,设置为方式2 M1: JNBRI,M1 ;查询是否有数据接收 MOVA,SBUF ;数据暂存于A CLRRI ;允许接收 MOVSBUF,A ;将接收到的数据发送出去M2: JNBTI,M2 ;等待发送完成 CLRTI SJMPM1 ;循环扫描串行通讯接口数据 END/****************************************************************标题: 串口调试程序,中断法接收数据效果: 运行本例子,打开本例子文件夹中的上位机软件,设置波特率2400,再进行发送数据,数码管显示接收内容**************************************************************/;脚功能定义 KEY1EQUP3.7 ;定义按键1 KEY2EQUP3.6 ;定义按键2 KEY3EQUP3.5 ;定义按键3 KEY4EQUP3.4 ;定义按键4 KEY5EQUP3.3 ;定义按键5 KEY6EQUP3.2 ;定义按键5 SMG_qEQUP1.0 ;定义数码管阳级控制脚,千位 SMG_bEQUP1.1 ;定义数码管阳级控制脚,百位 SMG_sEQUP1.2 ;定义数码管阳级控制脚,十位 SMG_gEQUP1.3 ;定义数码管阳级控制脚,个位 ;定义数据RAM空间 LDBEQU30H ;定义一个变量存放显示值 OLDKEYEQU31H ;保存按键接口状态;数据存放ORG0100TABLE: DB0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;表:共阳数码管0-9A-FORG0000HLJMPMAINORG0023H ;串口中断LJMPCOMORG0100HMAIN: MOVTMOD,#20H ;设置定时器1为模式2,做为波特率发生器 MOVTL1,#0F3H ;2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400 MOVTH1,#0F3H ; SETBTR1 ;启动波特率发生 MOVSCON,#50H ;串口的工作方式,设置为方式2 SETBES ;打开串口中断 SETBEA ;打开总中断 MOVLDB,#0 ;变量复值0M0: LCALLREADKEY ; JZM10 DECA ; JNZM1 ;按下1键 INCLDB ;显示数据加1处理 SJMPM10 ;处理后转入显示M1: DECA ;处理按键2按下,与上类同 JNZM2 DECLDB ;减1处理 SJMPM10M2: DECA ;处理键3按下 JNZM3 MOVA,LDB ;将变量加16处理,十六进制数 ADDA,#16 MOVLDB,A SJMPM10M3: DECA ;按键4按下 JNZM4 MOVA,LDB ;将变量减16处理 SUBBA,#16 MOVLDB,A SJMPM10M4: DECA ;按键5按下 JNZM5 MOVLDB,A ;将变量清0 SJMPM10M5: DECA ;按键6按下,发送数据到串口 JNZM10 MOVA,LDB MOVSBUF,A JNBTI,$ ;等待发关完成 CLRTI ;M10: MOVA,LDB ;用A做参数传递到显示子程序进行显示 LCALLDISPLAY ;调用显示子程序 LJMPM0 ;循环扫描按键;串口中断,串口中断其实很简单,设置正确通讯的波特率,中断一来接收数据即可COM: JNBRI,CR ;判断是接收中断处理 CLRRI ;允许接收下一字节,等待下一次中断 MOVA,SBUF ;将当前接收的数据存入变量空间 MOVLDB,ACR: RETI;读键值READKEY: MOVA,P3 ; ANLA,#0XFC ; CJNEA,OLDKEY,K01; CLRA ; SJMPK10 ; K01: MOVR7,#10 ;延时约10MS,消抖动 CALLDELAYM ; MOVA,P3 ; ANLA,#0XFC ; CJNEA,#0XFC,K02; SJMPK09 ;K02: MOVOLDKEY,A ; JBKEY1,K1 ; MOVA,#1 ; SJMPK10 ;K1: JBKEY2,K2 ; MOVA,#2 ; SJMPK10 ;K2: JBKEY3,K3 ; MOVA,#3 ; SJMPK10 ;K3: JBKEY4,K4 ; MOVA,#4 ; SJMPK10 ;K4: JBKEY5,K5 ; MOVA,#5 ; SJMPK10 ;K5: JBKEY6,K10 ; MOVA,#6 ; SJMPK10 ;K09: CLRA ; MOVOLDKEY,#0XFC;K10: RET;;延时子程序,可由R7控制时间量DELAYM: MOVR6,#200 DJNZR6,$ DJNZR7,DELAYM RET;数码管显示子程序DISPLAY:MOVDPTR,#TABLE MOVB,#16 DIVAB CLRSMG_s ;选择十位数码管 MOVCA,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容 MOVP0,A LCALLDELAY ;延时,停留一会,让人眼感触到它的亮度 MOVP0,#0FFH ;清除数码管显示,因是共阳型,所以不是0 SETBSMG_s ;关闭十位数码管 CLRSMG_g ;选择个位数码管 MOVA,B ;个位显示 MOVCA,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容 MOVP0,A LCALLDELAY ;延时,停留一会 MOVP0,#0FFH ;清除数码管显示 SETBSMG_g ;关闭个位数码管 RET;短延时子程序,DELAY: MOVR7,#10 ;延时子程序 DJNZR7,$ RETEND/*********************************************************************标题: 串口调试程序,查询法接收数据效果: 运行本例子,打开串口调试用上位机软件,设置波特率2400,再进行发送数据,接收区返回接收内容********************************************************************///头文件:#include"reg51.h"//主函数,C语言的入口函数: voidmain(void){ unsignedcharldat; TMOD=0X20; //设置定时器1为模式2,做为波特率发生器 TL1=0xF3; //2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400 TH1=0xF3; // TR1=1; //启动波特率发生 SCON=0x50; //设置串口方式2 while(1) { if(RI){ //查询是否有数据接收 ldat=SBUF; //数据暂存于变量中 RI=0; //重新清0等待接收 SBUF=ldat; //将接收到的数据发送出去 while(!TI); //等待发送完成 TI=0; } } }/********************************************************************标题: 串口调试程序,中断法接收数据效果: 运行本例子,打开串口调试上位机软件,设置波特率2400,再进行发送数据,数码管显示接收内容********************************************************************///头文件:#include"reg51.h"//变量定义:unsignedchartable[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //表:共阳数码管0-9a-f,十六进制显示 unsignedcharldata=0; //作为接收及发送的数据变量unsignedcharoldkey=0xff; //保按键接口状态//引脚定义: sbitSMG_q=P1^0; //定义数码管阳级控制脚(千位)sbitSMG_b=P1^1; //定义数码管阳级控制脚(百位)sbitSMG_s=P1^2; //定义数码管阳级控制脚(十位)sbitSMG_g=P1^3; //定义数码管阳级控制脚(个位)sbitSPK=P1^5; //定义蜂鸣器sbitkey1=P3^7; //定义按键1sbitkey2=P3^6; //定义按键2sbitkey3=P3^5; //定义按键3sbitkey4=P3^4; //定义按键4sbitkey5=P3^3; //定义按键5sbitkey6=P3^2; //定义按键6//函数声明:unsignedcharReadKey(void); //读键值返回voiddisplay(unsignedcharda);//定义显示函数,参数为显示内容,只显示两位十六进制 voiddelay(unsignedinttimer);//主函数,C语言的入口函数: voidmain(void){ unsignedcharlold=1; //作为按键放开的凭证,1为放开,0为按下 EA=1; //开启总中断 TMOD=0X20; //设置定时器1为模式2,做为波特率发生器 TL1=0xF3; //2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400 TH1=0xF3; // TR1=1; //启动波特率发生 SCON=0x50; //串口方式2 ES=1; //开始串口中断 while(1){ //循环扫描按键及显示 switch(ReadKey()){ //读取键值做以下相应处理 case1:ldata++; //1键显示内容加1 break; case2:ldata--; //2键显示内容减1 break; case3:ldata+=16; //3键显示内容加10 break; case4:ldata-=16; //4键显示内容减10 break; case5:ldata=0; //5键显示内容清0 break; case6: SBUF=ldata; //这里直接将数据发送出去 while(!TI){} TI=0; //等待发送完毕返回继续检测 break; } display(ldata); //显示相应的数值,这里用函数的形式调用显示 }}//串口中断入口函数voidcom_isr(void)interrupt4{ if(RI){ //是接收中断处理 RI=0; //将寄存器复位等待接收下一个 ldata=SBUF; //将接收的数据存于变量中 }}//扫描键盘unsignedcharReadKey(void) { unsignedcharlkey=0; if((P3&0xfc)!=0xfc){ //检测所有按键是否有按键按下 SPK=0; //按键按下则蜂鸣器发声 delay(10); //有按键按下则延时一段时间,以消除按键拌动 if(oldkey!=(P3&0xfc)){//检测按键未松开而且不是之前按下的按健就进入读键值,否则不作处理 oldkey=P3&0xfc; //保存当前状态,为下一次扫描做判断,请看上一行 if(key1==0) lkey=1; //第一个键按下复值1 elseif(key2==0) lkey=2; //第二个键按下复值2 elseif(key3==0) lkey=3;

温馨提示

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

评论

0/150

提交评论