单片机实验七串行口通信.docx
- 文档编号:7954104
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:7
- 大小:17.20KB
单片机实验七串行口通信.docx
《单片机实验七串行口通信.docx》由会员分享,可在线阅读,更多相关《单片机实验七串行口通信.docx(7页珍藏版)》请在冰豆网上搜索。
单片机实验七串行口通信
实验七串行口通信
一、实验目的:
1、单片机系统中,如果并行口不够用,可使用未用的串行口进行扩充,实现串行输入并行输出。
2、用单片机串行口实现与单片机和PC机的通信。
3、熟悉XLISP系列单片机综合仿真试验仪的组成和使用方法。
用XLISP软件和keil-uvision2集成调试软件进行实验并能得到正确的实验结果。
二、实验内容
1、串入并出实验
本实验用74LS164来扩充并行口,并利用74LS164串行口实现8路跑马灯。
2、单片机与单片机之间的双机通信(P204)
用2台单片机用串行口实现双机通信。
(1)甲机P1口接8个键盘,乙机P1口接8个发光二极管。
甲机RXD接乙机TXD,乙机RXD接甲机TXD。
(2)甲机发送01H给乙机,乙机接到回复02H。
建立联系后甲机选择按键状态并将P1口信息发给乙机,乙机根据甲机发来的信息点亮相应的发光二级管。
发送FF时表示通信结束。
3、思考题
单片机串行口实现与PC机的通信
单片机接收主机的数据,然后将数据传送到P0口,并传回给主机;当按下K1时,单片机发送字串“welcome!
\n\r”给主机(串口通信速度2400/12MHz晶体)。
三、实验步骤
(一)串入并出实验
本实验用74LS164来扩充并行口,利用74LS164串行口实现8路跑马灯程序。
1、硬件连接:
(1)用一个2PIN数据排线一端插入CPU部分JP53(P3口)的P3.0,P3.1。
另外一端插入74LS164部分的输入端JP20。
(2)用一根8PIN的数据排线,一端插入74LS164部分的输出端JP26,另一端插入8路指示灯的JP32。
四、实验程序
1、参考程序
#include"reg51.h“
unsignedchardat=0xfe;//定义发送数据
voiddelay1(unsignedinti);//延时函数声明
main()
{unsignedchari;
SCON=0x00;//设置串行口工作方式0
while
(1)
{for(i=0;i<8;i++)
{SBUF=dat;//传送右8位灯
while(!
TI);//查询TI
TI=0;//软件给TI清0
SBUF=dat;//传送左8位灯
while(!
TI);//查询TI
TI=0;//软件给TI清0
dat<<=1;//数据左移一位
delay1(12000);}}}
voiddelay1(unsignedintt)
{inti;
for(i=0;i {;} } voiddelay1(unsignedintt) {inti; for(i=0;i {;} } (二)双机通信参考程序 1、甲机发送程序。 //功能: 晶振频率11.0592MHz,工作方式1,波特率为9600 #include voidmain()//主函数 {TMOD=0x20;//设定定时器1的工作方式为方式2 TH1=0xfd;//设置串行口波特率为9600 TL1=0xfd; SCON=0x50;//设置串行口的工作方式1允许接收 PCON=0x00; TR1=1; while (1) {do{SBUF=0x01;//甲机先发送01H给乙机 while(! TI);//查询发送是否完毕 TI=0; //发送完毕,TI由软件清0 while(! RI);//查询等待接收 RI=0;//接收完毕,RI由软件清0 } while((SBUF^0x02)! =0);//判断是否收到02H do{ SBUF=P1;//把P1口的状态发送给乙机 while(! TI);//查询发送是否完毕 TI=0;//发送完毕,TI由软件清0 SBUF=0xff;//发送结束符 while(! TI);//查询发送是否完毕 TI=0;//发送完毕,TI由软件清0 while(! RI);//查询等待接收 RI=0;//接收完毕,RI由软件清0 } while((SBUF^0xff)! =0);//判断是否收到应答结束符FFH } 2、乙机接收程序 //晶振频率11.0592MHz,串行口工作于方式1,波特率为9600 #include voidmain()//主函数 {TMOD=0x20;//设定定时器1的工作方式为方式2 TH1=0xfd;//设置串行口波特率为9600 TL1=0xfd; SCON=0x50;//设置串行口的工作方式1允许接收 PCON=0x00; TR1=1;//启动定时器 P1=0xff;//P1口LED全灭 while (1) {do {while(! RI);//查询等待接收 RI=0;//接收完毕,RI由软件清0 } while((SBUF^0x01)! =0);//判断是否接收到01H do{ SBUF=0x02;//向甲机发送应答02H while(! TI);//查询发送是否完毕 TI=0;//发送完毕,TI由软件清0 while(! RI);//查询等待接收 RI=0;//接收完毕,RI由软件清0 P1=SBUF;//根据甲机P1口的状态点亮发光二极管 while(! RI);//查询等待接收 RI=0;//接收完毕,RI由软件清0 } while((SBUF^0xff)! =0);//判断是否接收到结束符FFH SBUF=0xff;//发送应答结束符FFH while(! TI);//查询发送是否完毕 TI=0;//发送完毕,TI由软件清0 } } (三)用单片机串行口实现与PC机的通信 单片机接收主机的数据,然后将数据传送到P0口并传回给主机。 当按下K1时,单片机发送字串“welcome! \n\r”给主机。 1、硬件连接: p0口接8位指示灯,按键接p3.5。 2、输入通信程序生成名.HEX文件,并由XLISP程序烧入,烧入后将XLISP程序关闭。 3、在PC机上打开sscom20串口调试工具,设置波特率为2400,串口号1,在打开文件文本中找名.HEX文件,JP17要求在仿真状态(按下)点“发送文件”。 #include #include unsignedcharkey_s,key_v,tmp; charcodestr[]="welcome! \n\r"; voidsend_str(); Bitscan_key(); voidproc_key(); voiddelayms(unsignedcharms); voidsend_char(unsignedchartxd); SbitK1=P3^5; main() {TMOD=0x20;//T1工作于方式式,产生波特率 TH1=0xF3;//波特率2400 TL1=0xF3; SCON=0x50;//设定串行口工作方式 PCON&=0xef;//波特率不倍增 TR1=1;//启动定时器1 IE=0x0;//禁止任何中断 while (1) {if(scan_key())//扫描按键 {delayms(10);//延时去抖动 if(scan_key())//再次扫描 {key_v=key_s;//保存键值 proc_key();//键处理 } } if(RI)//是否有数据到来 {RI=0; tmp=SBUF;//暂存接收到的数据 P0=tmp;//数据传送到P0口 send_char(tmp);//回传接收到的数据 }} } bitscan_key()//扫描按键 {key_s=0x00; key_s|=K1; return(key_s^key_v);} voidproc_key()//键处理 {if((key_v&0x01)==0) {send_str();//传送字串"welcome! ... }} voidsend_char(unsignedchartxd)//传送一个字符 {SBUF=txd; while(! TI);//等特数据传送 TI=0;//清除数据传送标志 } voidsend_str()//传送字串 {unsignedchari=0; while(str[i]! ='\0') {SBUF=str[i]; while(! TI);//等特数据传送 TI=0;//清除数据传送标志 i++;//下一个字符 }} voiddelayms(unsignedcharms)//延时子程序 {unsignedchari; while(ms--) {for(i=0;i<120;i++); } } 五、心得体会 这次实验我用单片机串行口实现与单片机和PC机的通信。 这是实现单片机通信,我想也是我们信息专业的基础吧。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 串行口 通信