完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
51单片机之232串口实现-任务要求Fosc为6MHz,定时器T1为工作模式2
任务要求 发送机(甲机) 接受机(乙机) 任务要求 Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 1、通过波特率计算定时器T1时间常数初值。 2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。 3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。 发送机(甲机) /***************************************************** *任务要求 *Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 *1、通过波特率计算定时器T1时间常数初值。 *2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。 *3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。 * *项目名:甲机 *作者:刘子琰 *时间:2020年4月4日11:34:59 ******************************************************/ #include 《REG52.H》 #include 《stdio.h》 typedef unsigned char u8; void delay(unsigned int i); //函数声明 u8 i=0; u8 *Tx_Buf= (u8*)0x30; void main (void) { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; //定时器1的工作方式2 PCON|= 0x80; //波特率提高一倍 TH1 = 0xFA; //TH1=256-(6000000/12)*(2/(32*4800)) TL1 = 0xFA; //因为是定时器模式2,所以高8位和低八位要相同 TR1 = 1; //开启定时器1 ES = 1; //开串口中断 EA = 1; // 开总中断 while(1) { for(i=0;i《16;i++){ SBUF = Tx_Buf; //SUBF作为发送缓冲器 while(!TI); // 等特数据传送 (TI发送中断标志) TI = 0; // 清除数据传送标志 } delay(1000); } } /************************************************** 延时处理程序 **************************************************/ void delay(unsigned int i) { unsigned char j; for(i; i 》 0; i--) for(j = 200; j 》 0; j--) ; } 接受机(乙机) /***************************************************** *任务要求 *Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 *1、通过波特率计算定时器T1时间常数初值。 *2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。 *3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。 * *项目名:乙机 *作者:刘子琰 *时间:2020年4月4日11:34:59 ******************************************************/ #include 《REG52.H》 #include 《stdio.h》 typedef unsigned char u8; void delay(unsigned int i); //函数声明 u8 i=0; u8 *Rx_Buf= (u8*)0x40; void main (void) { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; //定时器1的工作方式2 PCON|= 0x80; //波特率提高一倍 TH1 = 0xFA; //TH1=256-(6000000/12)*(2/(32*4800)) TL1 = 0xFA; //因为是定时器模式2,所以高8位和低八位要相同 TR1 = 1; //开启定时器1 ES = 1; //开串口中断 EA = 1; // 开总中断 while(1) { for(i=0;i《16;i++){ if(RI) //RI接受中断标志 { RI=0; //清除RI接受中断标志 Rx_Buf=SBUF ; //SUBF作为接受寄存器 } } delay(1000); } } /************************************************** 延时处理程序 **************************************************/ void delay(unsigned int i) { unsigned char j; for(i; i 》 0; i--) for(j = 200; j 》 0; j--) ; } |
|
|
|
只有小组成员才能发言,加入小组>>
2489 浏览 0 评论
1057浏览 2评论
673浏览 1评论
439浏览 0评论
175浏览 0评论
283浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 21:27 , Processed in 1.249387 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号