查看: 101|回复: 2

[讨论] [每日一帖] 之10__串行通信与辅助之功

[复制链接]

55

主题

1

好友

496

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 202 天

    [LV.7]常住居民III

    爱板会员勋章 活跃会员勋章

    发表于 2016-8-17 08:20:45 |显示全部楼层
    在正常情况下,我们是通过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. }
    复制代码
    下一贴我们将介绍串行收发过程中所涉及的数据格式转换处理。

    回复

    使用道具 举报

    138

    主题

    7

    好友

    1888

    积分

    超级版主

    Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2016-7-28 15:40
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2016-8-17 09:03:15 |显示全部楼层
    虽然代码看的有的困难,但格式看起来非常好
    回复

    使用道具 举报

    55

    主题

    1

    好友

    496

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 202 天

    [LV.7]常住居民III

    爱板会员勋章 活跃会员勋章

    发表于 2016-8-18 09:57:43 |显示全部楼层
    yerun 发表于 2016-8-17 09:03
    虽然代码看的有的困难,但格式看起来非常好

    不会吧,这是比较基本的好懂呀!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-10 17:02 , Processed in 0.104591 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部