找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4748|回复: 2
收起左侧

单片机和PC端的串口通信例程,有需要的同学可以参考,单片机为STC15W4K32S4系列

[复制链接]
ID:550414 发表于 2019-5-29 18:04 | 显示全部楼层 |阅读模式
单片机和PC端的串口通信例程,有需要的同学可以参考,单片机为STC15W4K32S4系列

单片机源程序如下:
  1. /*************        功能说明        **************
  2. 串口1全双工查询方式收发通讯程序。先进行握手联系,双方准备好之后,
  3. 通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
  4. 数据显示保留
  5. ******************************************/
  6. #include        "STC15F.H"
  7. u8  segcode    ;         //对应键码显示段码
  8. u8 code dsply_code[]={        //标准字库
  9. //         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F         H
  10.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};

  11. sbit        P_HC595_SER   = P4^0;        //pin 14        SER                data input
  12. sbit        P_HC595_RCLK  = P5^4;        //pin 12        RCLk        store (latch) clock
  13. sbit        P_HC595_SRCLK = P4^3;        //pin 11        SRCLK        Shift data clock
  14. bit flag=0;                   //握手成功标志 =1握手成功,=0没有成功
  15. void Send_595(u8 dat); //发送一个字节数据到595
  16. void mcu_ini();        //初始化单片机
  17. //========================================================================
  18. // 函数: void main(void)
  19. // 描述: 主函数。

  20. //========================================================================
  21. void main(void)
  22. {        u8 dat_recivd;
  23.      mcu_ini();  
  24. //监控接收状态
  25.    while(!flag)
  26.          { while(RI)
  27.                { RI=0;
  28.                      if (SBUF==0x55) //是否握手信号
  29.                     { SBUF=0xAA; //是,则发送应答信号
  30.                           while(!TI); //等待发送完毕                           
  31.                           TI=0; //发送完毕,清除中断位
  32.                          flag=1; //握手成功,跳出循环
  33.                                    segcode=dsply_code[5];
  34.                        Send_595(0xFC);
  35.                        Send_595(segcode);
  36.                         P_HC595_RCLK = 0;
  37.                         P_HC595_RCLK = 1;
  38.                          }
  39.                         }
  40.           }
  41. //握手成功之后,进入接收、发回状态
  42.     while(1)
  43.              { if (RI)
  44.                      { RI=0;            //清除中断标志
  45.                            dat_recivd=SBUF;        //接收
  46.                            SBUF=dat_recivd; //发回
  47.                            while (!TI);//等待发送完毕
  48.                                      TI=0; //清除中断标志
  49.                            //显示收到的字符
  50.                                segcode=dsply_code[dat_recivd];
  51.                        Send_595(0x7f);
  52.                        Send_595(segcode);
  53.                         P_HC595_RCLK = 0;
  54.                         P_HC595_RCLK = 1;
  55.                            }
  56.                   }
  57. }


  58. void Send_595(u8 dat) // 向HC595发送一个字节函数/
  59. {
  60.          u8        i;
  61.         for(i=0; i<8; i++)
  62.         {
  63.                 dat <<= 1;
  64.                 P_HC595_SER   = CY;
  65.                 P_HC595_SRCLK = 0;
  66.                 P_HC595_SRCLK = 1;
  67.                 }
  68. }
  69. void mcu_ini()
  70.      {//端口初始化
  71.            P0M1 = 0;        P0M0 = 0;        //设置为准双向口
  72.            P1M1 = 0;        P1M0 = 0;        //设置为准双向口
  73.            P2M1 = 0;        P2M0 = 0;        //设置为准双向口
  74.              P3M1 = 0;        P3M0 = 0;        //设置为准双向口
  75.            P4M1 = 0;        P4M0 = 0;        //设置为准双向口
  76.            P5M1 = 0;        P5M0 = 0;        //设置为准双向口
  77.            P6M1 = 0;        P6M0 = 0;        //设置为准双向口
  78.            P7M1 = 0;        P7M0 = 0;        //设置为准双向口

  79.       //串口初始化: //9600bps@11.0592MHz        
  80.             TH2 = 0xFE;         
  81.             TL2 = 0xE0;         
  82.             AUXR=0x15;        //串口1选择定时器2为波特率发生器,启动定时器2
  83.             SCON=0x50; //8位数据,可变波特率
  84.             TI=0;
  85.             RI=0;         
  86.             //P_SW1 |= 0x80; //切换到P1.6 p1.7引脚上去
  87.             P_SW1=0;
  88.           }
复制代码
  1. /*************        功能说明        **************
  2. 串口1全双工查询方式收发通讯程序。先进行握手联系,双方准备好之后,
  3. 通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
  4. 数据显示保留
  5. ******************************************/
  6. #include        "STC15Fxxxx.H"
  7. u8  segcode    ;         //对应键码显示段码
  8. u8 code dsply_code[]={        //标准字库
  9. //         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F         H
  10.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};

  11. sbit        P_HC595_SER   = P4^0;        //pin 14        SER                data input
  12. sbit        P_HC595_RCLK  = P5^4;        //pin 12        RCLk        store (latch) clock
  13. sbit        P_HC595_SRCLK = P4^3;        //pin 11        SRCLK        Shift data clock
  14. bit flag=0;                   //握手成功标志 =1握手成功,=0没有成功
  15. void Send_595(u8 dat); //发送一个字节数据到595
  16. void mcu_ini();        //初始化单片机
  17. //========================================================================
  18. // 函数: void main(void)
  19. // 描述: 主函数。

  20. //========================================================================
  21. void main(void)
  22. {        u8 dat_recivd;
  23.      mcu_ini();  
  24. //监控接收状态
  25.    while(!flag)
  26.          { while(RI)
  27.                { RI=0;
  28.                      if (SBUF==0x55) //是否握手信号
  29.                     { SBUF=0xAA; //是,则发送应答信号
  30.                           while(!TI) //等待发送完毕
  31.                             {}
  32.                           TI=0; //发送完毕,清除中断位
  33.                          flag=1; //握手成功,跳出循环
  34.                                    segcode=dsply_code[5];
  35.                        Send_595(0xFC);
  36.                        Send_595(segcode);
  37.                         P_HC595_RCLK = 0;
  38.                         P_HC595_RCLK = 1;
  39.                          }
  40.                         }
  41.           }
  42. //握手成功之后,进入接收、发回状态
  43.     while(1)
  44.              { if (RI)
  45.                      { RI=0;
  46.                            dat_recivd=SBUF;        //接收
  47.                            SBUF=dat_recivd; //发回
  48.                            while (!TI)
  49.                                {}//等待发送完毕
  50.                                      TI=0;
  51.                            //显示收到的字符
  52.                                segcode=dsply_code[dat_recivd];
  53.                        Send_595(0x7f);
  54.                        Send_595(segcode);
  55.                         P_HC595_RCLK = 0;
  56.                         P_HC595_RCLK = 1;
  57.                            
  58.                         
  59.                            }
  60.                   }
  61.                   
  62.   }


  63. void Send_595(u8 dat) // 向HC595发送一个字节函数/
  64. {
  65.          u8        i;
  66.         for(i=0; i<8; i++)
  67.         {
  68.                 dat <<= 1;
  69.                 P_HC595_SER   = CY;
  70.                 P_HC595_SRCLK = 0;
  71.                 P_HC595_SRCLK = 1;
  72.                 }
  73. }
  74. void mcu_ini()
  75.      {//端口初始化
  76.            P0M1 = 0;        P0M0 = 0;        //设置为准双向口
  77.            P1M1 = 0;        P1M0 = 0;        //设置为准双向口
  78.            P2M1 = 0;        P2M0 = 0;        //设置为准双向口
  79.              P3M1 = 0;        P3M0 = 0;        //设置为准双向口
  80.            P4M1 = 0;        P4M0 = 0;        //设置为准双向口
  81.            P5M1 = 0;        P5M0 = 0;        //设置为准双向口
  82.            P6M1 = 0;        P6M0 = 0;        //设置为准双向口
  83.            P7M1 = 0;        P7M0 = 0;        //设置为准双向口

  84.       //串口初始化        
  85.             TH2 = 0xFE;
  86.             TL2 = 0xE0;
  87.             AUXR=0x15;
  88.             SCON=0x50;
  89.             TI=0;
  90.             RI=0;         
  91.             //P_SW1 |= 0x80; //切换到P1.6 p1.7引脚上去
  92.             P_SW1=0;
  93.           }
复制代码

所有资料51hei提供下载:
MCU2PC串口1.rar (58.83 KB, 下载次数: 61)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1042619 发表于 2023-1-13 10:55 | 显示全部楼层
感谢楼主精彩分享!51因你而精彩!我们STC15系列实验箱里面有STC15W4K串口收发DEMO,希望能帮到您!    stc15实验箱jpg.png
STC15W实验箱jpg.png

回复

使用道具 举报

ID:241550 发表于 2023-10-3 11:19 | 显示全部楼层
大漠孤烟001 发表于 2023-1-13 10:55
感谢楼主精彩分享!51因你而精彩!我们STC15系列实验箱里面有STC15W4K串口收发DEMO,希望能帮到您!   

...

以前还从来没注意过isp里有demo
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表