当前位置:   article > 正文

蓝桥杯单片学习总结(Day12 串口通讯实验)

蓝桥杯单片学习总结(Day12 串口通讯实验)

实验现象:

        通过串口调试助手发送数字1~8,板子上面的对应指示灯亮。注意此处发送应选择文本模式发送。

 实例代码:

  1. #include <STC15F2K60S2.H>
  2. #define BUAD 9600 //所需波特率、
  3. #define SYSTEMCLOCK 11059200L //系统时钟频率,L表示该数据为长整型
  4. void uart_sendstring(unsigned char *str);
  5. unsigned char flag; //数据接收标志位
  6. char rin='1';
  7. void UartInit(void) //9600bps@11.0592MHz
  8. {
  9. SCON = 0x50; //8位数据,可变波特率
  10. AUXR |= 0x40; //定时器1时钟为Fosc,即1T
  11. TMOD = 0x00; //设定定时器1为16位自动重装方式
  12. TL1 = 65535-(SYSTEMCLOCK/4/BUAD); //设定定时初值与终值,固定模板
  13. TH1 = (65535-(SYSTEMCLOCK/4/BUAD)>>8);
  14. TR1 = 1; //启动定时器1
  15. ES=1;
  16. EA=1;
  17. }
  18. void main()
  19. {
  20. UartInit();
  21. while(1)
  22. {
  23. if(flag)
  24. {
  25. flag=0;
  26. switch(rin)
  27. {
  28. case '1':
  29. {
  30. P2=(P2&0x1f)|0x80;
  31. P0=0xfe;
  32. P2&=0x1f;
  33. uart_sendstring('1');
  34. }
  35. break;
  36. case '2':
  37. {
  38. P2=(P2&0x1f)|0x80;
  39. P0=0xfd;
  40. P2&=0x1f;
  41. uart_sendstring('2');
  42. }
  43. break;
  44. case '3':
  45. {
  46. P2=(P2&0x1f)|0x80;
  47. P0=0xfb;
  48. P2&=0x1f;
  49. uart_sendstring('3');
  50. }
  51. break;
  52. case '4':
  53. {
  54. P2=(P2&0x1f)|0x80;
  55. P0=0xf7;
  56. P2&=0x1f;
  57. uart_sendstring('4');
  58. }
  59. break;
  60. case '5':
  61. {
  62. P2=(P2&0x1f)|0x80;
  63. P0=0xef;
  64. P2&=0x1f;
  65. uart_sendstring('5');
  66. }
  67. break;
  68. case '6':
  69. {
  70. P2=(P2&0x1f)|0x80;
  71. P0=0xdf;
  72. P2&=0x1f;
  73. uart_sendstring('6');
  74. }
  75. break;
  76. case '7':
  77. {
  78. P2=(P2&0x1f)|0x80;
  79. P0=0xbf;
  80. P2&=0x1f;
  81. uart_sendstring('7');
  82. }
  83. break;
  84. case '8':
  85. {
  86. P2=(P2&0x1f)|0x80;
  87. P0=0x7f;
  88. P2&=0x1f;
  89. uart_sendstring('8');
  90. }
  91. break;
  92. default:
  93. uart_sendstring("error\r\n"); //输入其他数据返回error
  94. break;
  95. }
  96. ES=1;
  97. }
  98. }
  99. }
  100. //串口中断服务函数
  101. void uart_Proc() interrupt 4
  102. {
  103. if(RI) //正在接收数据
  104. {
  105. RI=0; //需要手动赋0
  106. rin=SBUF; //定时持续接收数据
  107. ES=0;
  108. flag=1;
  109. }
  110. }
  111. //通过串口发送信息
  112. void uart_sendstring(unsigned char *str)
  113. {
  114. unsigned char *p;
  115. p=str;
  116. while(*p!='\0')
  117. {
  118. SBUF=*p; //send
  119. while(TI==0) //等待发送标志位
  120. TI=0;
  121. p++;
  122. }
  123. }

实验原理: 

        

        EA为总开关,ES为串行口中断开关 ,在使用串行口中断前必须闭合EA、ES,即EA=1;

ES=1;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/884196
推荐阅读
相关标签
  

闽ICP备14008679号