标题:
单片机I2C改串口通讯的问题(C语言)
[打印本页]
作者:
alexhe
时间:
2018-8-11 08:21
标题:
单片机I2C改串口通讯的问题(C语言)
之前的工程师用的是I2C的,现在要求用串口通讯,TX RX 需要重新设置吗,改怎么设置,新手努力学习中,请大家帮帮忙!!
作者:
lyema1
时间:
2018-8-11 10:09
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配置来通讯,I2C是用时钟来控制的,接口不一样,具体看你要怎么用了
作者:
woshige
时间:
2018-8-11 11:12
肯定要改的,查参考手册,串口用的什么引脚,对应改一下,而且IIC和串口通信也不一样,收发程序也需要改
作者:
angmall
时间:
2018-8-11 11:32
/*-----------------------------------------------
名称:串口通信
内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
打开串口调试程序,将波特率设置为2400,无奇偶校验
晶振12MHz,发送和接收使用的格式相同,如都使用
字符型格式,按复位重启程序,可以看到接收到 UART test,请在发送区输入任意信
然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xF3; // TH1: 重装值 2400 波特率 晶振 12MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
// ES = 1; //打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
SendStr("UART test,请在发送区输入任意信息");
ES = 1; //打开串口中断
while (1)
{
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
unsigned char Temp; //定义临时变量
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
P1=Temp; //把值输出到P1口,用于观察
SBUF=Temp; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}
复制代码
作者:
alexhe
时间:
2018-8-11 15:17
lyema1 发表于 2018-8-11 10:09
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配 ...
用的是stc15f2k60s2单片机,然后我把数据存入SBUF,发现没有数据,是不是因为他没有自动发送接收数据的功能?如果没有的话我该怎么处理,是一位一位发吗?
作者:
alexhe
时间:
2018-8-11 15:26
lyema1 发表于 2018-8-11 10:09
I2C和串口通讯都是通讯用的,接口需要根据通讯协议来配置,具体的接口看你用的是什么mcu,串口是通过模式配 ...
stc15f2k60s2单片机,现在能发送数据了,但是我把数据存入SBUF中,没有数据发出,我一位一位发的就有数据,但是接收不到数据,请问怎么解决,有相关的程序例子或者资料吗
作者:
alexhe
时间:
2018-8-11 15:27
stc15f2k60s2单片机,现在能发送数据了,但是我把数据存入SBUF中,没有数据发出,我一位一位发的就有数据,但是接收不到数据,请问怎么解决,有相关的程序例子或者资料吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1