资源描述:
《实验四 单片机串行通行实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四单片机串行通信实验一、实验目的1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。3、学习串口通讯的中断方式的程序编写方法二、实验说明利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。三、实验仪器计算机伟福实验箱(lab2000P)四、实验内容1、8051的RXD、TXD接线柱在POD51/96仿真板上。2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转
2、换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形五、思考题1、接收到的数据加1显示出来;2、改变波特率,降低或者升高;3、保存前一个接收到的数据,数据向前推动显示。六、源程序修改原理及其
3、仿真结果注:源程序有许多地方不需要修改,如键盘和显示部分,故只写出主程序和修改的部分思考题一:接收到的数据加1显示出来MLoop:jbHasRcv,RcvData;收到数据?callDisplayLED;显示callTestKey;有键入?jzMLoop;无键入,继续显示callGetKey;读入键码anla,#0fh;通讯口输出键码MOVSBUF,ALJMPMLoopRcvData:clrHasRcv;是mova,RcvBuf;显示数据Adda,#01h;在显示之前将数据加一movb,aanla,#0fh;显示低位movdptr,#LEDMapmovca,@a+dptrmov
4、LEDBuf+5,amova,bswapa;显示高位anla,#0fhmovdptr,#LEDMapmovca,@a+dptrmovLEDBuf+4,aljmpMLoopEND仿真结果说明:当按下0~e时数码管分别显示1~f,当按下f时数码管显示10,实现了接收到的数据加一显示出来。思考题二:改变波特率,降低或者升高START:MOVSP,#60HMOVIE,#0;开所有中断允许MOVTMOD,#020H;定时器1工作于方式2(8位重装)MOVTH1,#0F3H(243);波特率2400BPS@12MHz通过查表改变初值也可以改变波特率SMOD:在串行口工作方式1、2、3中,是
5、波特率加倍位=1时,波特率加倍=0时,波特率不加倍。设SMOD为0或1可改变波特率MOVTL1,#0F3HANLPCON,#07FH;SMOD位清零orlPCON,#80h;SMOD位置一MOVSCON,#050H;串行口工作方式设置MOVLEDBuf,#0ffh;显示8.8.8.8.movLEDBuf+1,#0ffh方式0波特率:B=fosc/12方式1波特率:用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率波特率:方式2:B=(2SMOD/64)×fosc。方式3:B=(2SMOD/32)×T1溢出率也可以通过改变串口的工作方式改变波特率movLEDBuf+2,
6、#0ffhmovLEDBuf+3,#0ffhmovLEDBuf+4,#0ffhmovLEDBuf+5,#0ffhSETBTR1SETBESSETBEA思考题三:保存前一个接收到的数据,数据向前推动显示MLoop:jbHasRcv,RcvData;收到数据?callDisplayLED;显示callTestKey;有键入?jzMLoop;无键入,继续显示callGetKey;读入键码anla,#0fh;通讯口输出键码MOVSBUF,ALJMPMLoopRcvData:在每次给最右边的LED赋值之前将以前的数据顺次右移,保证每个灯的数据都传给了相邻的右边一个灯,然后再给最右边的灯赋
7、值,如此循环往复movLEDBuf,LEDBuf+1movLEDBuf+1,LEDBuf+2movLEDBuf+2,LEDBuf+3movLEDBuf+3,LEDBuf+4movLEDBuf+4,LEDBuf+5clrHasRcv;是mova,RcvBuf;显示数据anla,#0fhmovdptr,#LEDMapmovca,@a+dptrmovLEDBuf+5,aljmpMLoopEND仿真结果说明:开始六个灯都显示8,输入字符以后先是在最右侧的灯上显示出来,然后再次输入字符时,前面输入的字