微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串行通信与辅助功能

串行通信与辅助功能

时间:10-02 整理:3721RD 点击:

在正常情况下,我们是通过RGB_LED来指示时间。但在测试阶段及初次启动计时器时,对串行通信功能的需求是不可或缺的。

要想正确使用串行通信功能,离不开下面几件事,即串行通信的波特率设置、串行收发功能的实现及数据格式的变换。这些功能的保障靠的是串行通信初始化函数init_serialcom()、

串口字符发送函数send_char_com()、 字符串发送函数send_string_com()、中断接收函数serial ()及相应的主函数。

相关的函数程序如下:

  1. //串行通信初始化函数
  2. void init_serialcom( void )
  3. {
  4.        SCON = 0x50 ;     //SCON: serail mode 1, 8-bit UART, enable ucvr
  5.            TMOD |= 0x20 ;   //TMOD: timer 1, mode 2, 8-bit reload
  6.            PCON |= 0x80 ;    //SMOD=1;
  7.            TH1 = 0xFA ;      //Baud:9600 fosc=11.0592MHz
  8.            IE |= 0x90 ;       //Enable Serial Interrupt
  9.            TR1 = 1 ;         // timer 1 run
  10.            TI=1;
  11. }
  12. //向串口发送一个字符
  13. void send_char_com( unsigned char ch)
  14. {
  15.              SBUF=ch;
  16.              while (TI== 0);
  17.                  TI= 0 ;
  18. }

  19. //向串口发送一个字符串,strlen为该字符串长度
  20. void send_string_com( unsigned char *str, unsigned int strlen)
  21. {
  22.      unsigned int k= 0 ;
  23.          do { send_char_com(*(str + k)); k++; }
  24.          while (k < strlen);
  25. }

  26. // 串口接收中断函数
  27. void serial () interrupt 4 using 3
  28. {
  29.    if (RI)
  30.    {  
  31.           RI = 0 ;
  32.           ch=SBUF;         //CHi           
  33.           read_flag= 1 ; //就置位取数标志
  34.    }
  35. }
  36. //串行收发测试主函数
  37. main()
  38. {
  39.             init_serialcom(); //初始化串口
  40.                 while ( 1 )
  41.                 {
  42.                    if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
  43.                    {
  44.                     read_flag= 0 ; //取数标志清0
  45.                         send_char_com(ch);
  46.                    }
  47.                 }
  48. }

复制代码



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top