找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2811|回复: 6
收起左侧

单片机I2C改串口通讯的问题(C语言)

[复制链接]
ID:381738 发表于 2018-8-11 08:21 | 显示全部楼层 |阅读模式
之前的工程师用的是I2C的,现在要求用串口通讯,TX  RX 需要重新设置吗,改怎么设置,新手努力学习中,请大家帮帮忙!!
回复

使用道具 举报

ID:385204 发表于 2018-8-11 10:09 | 显示全部楼层
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配置来通讯,I2C是用时钟来控制的,接口不一样,具体看你要怎么用了
回复

使用道具 举报

ID:174087 发表于 2018-8-11 11:12 | 显示全部楼层
肯定要改的,查参考手册,串口用的什么引脚,对应改一下,而且IIC和串口通信也不一样,收发程序也需要改
回复

使用道具 举报

ID:155507 发表于 2018-8-11 11:32 | 显示全部楼层

  1. /*-----------------------------------------------
  2.   名称:串口通信
  3.   内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
  4.         打开串口调试程序,将波特率设置为2400,无奇偶校验
  5.         晶振12MHz,发送和接收使用的格式相同,如都使用
  6.         字符型格式,按复位重启程序,可以看到接收到 UART test,请在发送区输入任意信
  7.                 然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误
  8. ------------------------------------------------*/

  9. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        

  10. /*------------------------------------------------
  11.                    函数声明
  12. ------------------------------------------------*/
  13. void SendStr(unsigned char *s);

  14. /*------------------------------------------------
  15.                     串口初始化
  16. ------------------------------------------------*/
  17. void InitUART  (void)
  18. {

  19.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  20.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
  21.     TH1   = 0xF3;               // TH1:  重装值 2400 波特率 晶振 12MHz  
  22.     TR1   = 1;                  // TR1:  timer 1 打开                        
  23.     EA    = 1;                  //打开总中断
  24.    // ES    = 1;                  //打开串口中断
  25. }                           
  26. /*------------------------------------------------
  27.                     主函数
  28. ------------------------------------------------*/
  29. void main (void)
  30. {

  31. InitUART();

  32. SendStr("UART test,请在发送区输入任意信息");

  33. ES    = 1;                  //打开串口中断
  34. while (1)                       
  35.     {
  36.    
  37.     }
  38. }

  39. /*------------------------------------------------
  40.                     发送一个字节
  41. ------------------------------------------------*/
  42. void SendByte(unsigned char dat)
  43. {
  44. SBUF = dat;
  45. while(!TI);
  46.       TI = 0;
  47. }
  48. /*------------------------------------------------
  49.                     发送一个字符串
  50. ------------------------------------------------*/
  51. void SendStr(unsigned char *s)
  52. {
  53. while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
  54.   {
  55.   SendByte(*s);
  56.   s++;
  57.   }
  58. }
  59. /*------------------------------------------------
  60.                      串口中断程序
  61. ------------------------------------------------*/
  62. void UART_SER (void) interrupt 4 //串行中断服务程序
  63. {
  64.     unsigned char Temp;          //定义临时变量
  65.    
  66.    if(RI)                        //判断是接收中断产生
  67.      {
  68.           RI=0;                      //标志位清零
  69.           Temp=SBUF;                 //读入缓冲区的值
  70.           P1=Temp;                   //把值输出到P1口,用于观察
  71.       SBUF=Temp;                 //把接收到的值再发回电脑端
  72.          }
  73.    if(TI)                        //如果是发送标志位,清零
  74.      TI=0;
  75. }

复制代码
回复

使用道具 举报

ID:381738 发表于 2018-8-11 15:17 | 显示全部楼层
lyema1 发表于 2018-8-11 10:09
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配 ...

用的是stc15f2k60s2单片机,然后我把数据存入SBUF,发现没有数据,是不是因为他没有自动发送接收数据的功能?如果没有的话我该怎么处理,是一位一位发吗?
回复

使用道具 举报

ID:381738 发表于 2018-8-11 15:26 | 显示全部楼层
lyema1 发表于 2018-8-11 10:09
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配 ...

stc15f2k60s2单片机,现在能发送数据了,但是我把数据存入SBUF中,没有数据发出,我一位一位发的就有数据,但是接收不到数据,请问怎么解决,有相关的程序例子或者资料吗
回复

使用道具 举报

ID:381738 发表于 2018-8-11 15:27 | 显示全部楼层
stc15f2k60s2单片机,现在能发送数据了,但是我把数据存入SBUF中,没有数据发出,我一位一位发的就有数据,但是接收不到数据,请问怎么解决,有相关的程序例子或者资料吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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