您的位置 首页 软件

51单片机GPIO口模仿串口通讯

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被…

跟着单片机的运用日益频繁,用其作前置机进行并重和通讯也常见于各种运用,一般是运用前置机并重各种终端数据后进行处理、存储,再自动或被迫上报给管理站。这种状况下下,并重会需求一个串口,上报又需求另一个串口,这就要求单片机具有双串口的功用,但咱们知道一般的51系列只提供一个串口,那么另一个串口只能靠程序模仿。

本文所说的模仿串口, 便是运用51的两个输入输出引脚P1.0和P1.1,置1或0别离代表凹凸电平,也便是串口通讯中所说的位,如开始位用低电平,则将其置0,中止位为高电平,则将其置1,各种数据位和校验位则依据状况置1或置0。

以11.0592MHz的晶振为例,经过守时计数器0发生中止信号来模仿串口电平,下面附上详细源代码。

[cpp]view plaincopy

  1. /*
  2. Fuction:运用51单片机GPIO口模仿串口通讯,经过守时计数器0来发生中止信号
  3. SoftwareDesigner:Jason
  4. */
  5. #include
  6. sbitP1_0=P1^0;
  7. sbitP1_1=P1^1;
  8. #defineRXDP1_0
  9. #defineTXDP1_1
  10. unsignedcharflag;
  11. voidinit();
  12. voidsend_byte(unsignedchar);
  13. unsignedcharrec_byte();
  14. voidwait_int();
  15. //将从PC机串口接纳到的数据原封不动回传给PC机
  16. voidmain()
  17. {
  18. unsignedchartemp;
  19. init();
  20. while(1)
  21. {
  22. if(RI==1)
  23. {
  24. RI=0;
  25. temp=rec_byte();
  26. send_byte(temp);
  27. while(!TI);
  28. TI=0;
  29. }
  30. }
  31. }
  32. //端口及中止初始化
  33. voidinit()
  34. {
  35. TMOD=0x02;//守时器0,方法2
  36. TH0=0xfd;//波特率9600
  37. TL0=TH0;
  38. TR0=0;//在发送或接纳时翻开
  39. ET0=1;//答应守时器0中止
  40. EA=1;//答应一切中止
  41. }
  42. //经过串口发送一个字节数据
  43. voidsend_byte(unsignedchardat)
  44. {
  45. unsignedchari=8;
  46. TR0=1;//舱位T0中止
  47. TXD=0;//发送开始位0
  48. wait_int();
  49. while(i–)//发送8位数据
  50. {
  51. TXD=(bit)(dat&0x01);
  52. wait_int();
  53. dat=dat>>1;
  54. }
  55. TXD=1;//发送中止位1
  56. wait_int();
  57. TR0=0;//封闭T0中止
  58. }
  59. //经过串口接纳一个字节数据
  60. unsignedcharrec_byte()
  61. {
  62. unsignedchardat=0;
  63. unsignedchari=8;
  64. TR0=1;//舱位T0中止
  65. wait_int();//等过开始位电平
  66. while(i–)//接纳8位数据
  67. {
  68. dat=dat<<1;
  69. if(RXD)
  70. dat|=0x80;
  71. wait_int();
  72. }
  73. wait_int();//等过中止位电平
  74. TR0=0;//封闭T0中止
  75. returndat;
  76. }
  77. //等候中止到来
  78. voidwait_int()
  79. {
  80. while(!flag);
  81. flag=0;
  82. }
  83. //中止服务程序
  84. voidtimer0()interrupt1
  85. {
  86. flag=1;
  87. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/265468.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部