173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机如何模拟串口通信

htxw 2023-03-16 资讯中心 62 ℃

单片机串口通信

2种不同的通讯接口,串口调试助手用的是UART通讯协议,I2C是另外一种通讯协议,2种完全不兼容,I2C一般用在设备内部各个集成电路之间的通讯,因为无法远距离的传输才限制了它的应用场合,UART就不同了,比较广泛。如果想用串口调试助手,那你要看目标设备有没有UART接口了,如果你想用串口调试助手调试I2C接口,那你只能用单片机做个通讯接口转换了,一般单片机都带有UART接口,另外一端如果单片机自带I2C接口那就好,没有的话也可以通过IO口模拟出来,还有I2C不是仅仅限制于EEPROM的通讯,很多其他的集成电路用的也是I2C通讯接口,比如传感器等等集成电路。另外你可能会遇到另外一个概念RS232,这个和UART是同一种通讯协议,只是电平不同罢了。。。

如何实现2个51单片机之间通过串口通信的源程序

汇编编写的模拟串口通信程序

T2作为波特率控制

UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调

用下面的接收程序。退出硬中断之前还需要将硬中断标志重新复位。

UART_TXD 是任何其它IO即可。

UART_SEND:

PUSH IE

PUSH DPH

PUSH DPL

PUSH PSW

PUSH 00H

PUSH ACC

CLR EA

SETB UART_TXD ;START BIT

MOV R0,A

CLR TR2 ;TR2置1,计数器2启动,时间计数启动。

MOV A,RCAP2L;计数器2重新装载值

MOV TL2,A ;置计数器2初值 ;T2需要重新装载

MOV A,DPH

MOV A,RCAP2H

MOV TH2,A

MOV A,R0

SETB TR2 ;TR2置1,计数器

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

CLR UART_TXD ;START BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

MOV R0,#08H

UART_SEND_LOOP:

RRC A

MOV UART_TXD,C ;8 BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

DJNZ R0,UART_SEND_LOOP

SETB UART_TXD ;END BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

POP ACC

POP 00H

POP PSW

POP DPL

POP DPH

POP IE

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UART_REC:

PUSH IE

PUSH DPH

PUSH DPL

CLR EA

CLR TR2 ;TR2置1,计数器2启动,时间计数启动。

MOV A,RCAP2L;计数器2重新装载值

MOV TL2,A ;置计数器2初值 ;T2需要重新装载

MOV A,DPH

MOV A,RCAP2H

MOV TH2,A

JB UART_RXD,$ ;REC

SETB TR2 ;TR2置1,计数器2启动,时间计数启动。

JNB TF2,$

CLR TF2 ;0.5 BIT

JNB TF2,$

CLR TF2 ;1 BIT

JNB TF2,$

CLR TF2 ;1.5 BIT

MOV C,UART_RXD

MOV ACC.0,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;2.5

MOV C,UART_RXD

MOV ACC.1,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;3.5

MOV C,UART_RXD

MOV ACC.2,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;4.5

MOV C,UART_RXD

MOV ACC.3,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;5.5

MOV C,UART_RXD

MOV ACC.4,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;6.5

MOV C,UART_RXD

MOV ACC.5,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;7.5

MOV C,UART_RXD

MOV ACC.6,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2 ;8.5

MOV C,UART_RXD

MOV ACC.7,C

JNB TF2,$

CLR TF2 ;9.5

JNB UART_RXD,$ ;等待停止位,并重新复位计数器

SETB UART_RXD

POP DPL

POP DPH

POP IE

RET

补充回答:

串口调试

1. 发送:向总线上发命令

2. 接收:从总线接收命令,并分析是地址还是数据。

3. 定时发送:从内存中取数并向主机发送.

经过调试,以上功能基本实现,可以通过上位机对单片机进行实时控制。

程序如下:

//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收

//和查询发送,发送没有必要用中断,因为程序的开销是一样的

#include reg51.h

#includestdio.h

#include string.h

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3 , flag,temp,ch;

bit read_flag=0;

sbit cp=P1^1;

sbit DIR=P1^2;

int i;

unsigned int xdata *RAMDATA; /*定义RAM地址指针*/

unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;

void init_serialcomm(void)

{

SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00;

ES=1;

TMOD=0x21; //定时器工作于方式2,自动装载方式

TH0=(65536-1000)%256;

TL0=(65536-1000)/256;

TL1=0xfd;

TH1=0xfd;

ET0=1;

TR0=1;

TR1=1;

// TI=0;

EA=1;

// TI=1;

RAMDATA=0x1F45;

}

void serial () interrupt 4 using 3

{

if(RI)

{ RI=0;

ch=SBUF;

TI=1; //置SBUF空

switch(ch)

{

case 0x01 :printf("A"); TI=0;break;

case 0x02 :printf("B"); TI=0;break;

case 0x03 :printf("C"); TI=0;break;

case 0x04 :printf("D"); TI=0;break;

default :printf("fg"); TI=0;break;

}

}

}

//向串口发送一个字符

void timer0() interrupt 1 using 3{

// char i;

flag++;

TH0=0x00;

TL0=0x00;

if(flag==10)

{// cp=!cp;

// for(i=0;i6;i++)

P2=0x25;

TI=1;

temp=*RAMDATA;

printf("%c",temp);

TI=0;

// RAMDATA--;

flag=0;

}

}

//主程序

main()

{

init_serialcomm(); //初始化串口

//向6264中送数据

{

*RAMDATA=0x33;

}

while(1)

{

*RAMDATA=0x33;;

}

}

调试需要注意的问题:

1. 发送过程:在发送时必须保证TI=1:即发送缓冲器为空,否则将导致数据发不出去,如果想强制发送可以用:TI=1.具体发送数据:利用printf(“abcd”);函数直接发送即可。

2. 接收过程:在接收时多选用中断方式,这样可以节约CPU的时间,提高效率,

单片机怎么连接到串口,然后跟串口通信呢?

简单说,串口通信需要三条线,接收、发送、地线;

看单片机的引脚TXD(发) RXD(收) GND(地) 把发射机和接收机的收发线对接,地线对接 也就是:TXD-RXD,RXD-TXD,GND-GND。这样就能够测试串口通信了。

还要注意电平转换的问题,单片机的串口出来的电平时TTL电平,电脑的串口是232电平,根据单片机电压的不同,需要用MAX232或MAX3232进行电平转换,单片机才能和电脑通信。

至于单片机串口的具体操作就要看型号了,不同的单片机有所不同。

怎样编写单片机的串口通信的程序,一般的步骤是怎么样

编写串口通讯程序步骤为:

1、设置波特率

2、设置串口工作方式

3、收发数据。

比如:

main()

{

unsigned char dat;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0x50;

while(1)

    {

    while(RI==0);

    RI=0;

    dat=SBUF;

    SBUF=~dat;

    while(TI==0)

    TI=0;

    }

}

51单片机模拟串口通讯,起始位判断问题

这属于技巧问题。发送端设置发送队列起始标志字节,这标志字节可以不止一个,最后发送校验字节,校验算法自己决定。接收端设置接收队列,不管什么起始位结束位,对整个队列进行移位处理,接收一位后判断起始标志字节,不是起始标志退出,是则判断校验字节,正确了你就完整收到一对列数据了。

单片机串口通讯有哪几种方式?

89系列单片机的串行通信有4种工作方式:

1、方式0是同步移位寄存器方式,帧格式8位,波特率固定为fosc/12。

2、方式1是8位异步通信方式,帧格式10位,波特率可变:T溢出率/n(n= :32或16)。

3、方式2是9位异步通信方式,帧格式11位,波特率固定: fosc/n(n=32 或16)。

4、方式3是9位异步通信方式,帧格式11位,波特率可变:T溢出率(m=32或16)。

方式1、2、3的区别主要表现在帧格式及波特率两个方面。

单片机应用范围:

单片机渗透到我们生活的各个领域。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制等等。

还有自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机如何模拟串口通信的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:单片机如何模拟串口通信

<