㈠ 51单片机通过串口实现数据的发送与接收程序
串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。
一般来说,过程如下:
1,配置串口参数、波特率等,开启串口中断;
void Init_UART()
{
}
2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;
程序一般为:
void UART_ISR() interrupt x using y
{
;串口中断处理函数
}
x - 单片机的C51中断号
y - 指定使用的当前工作寄存器组号(0-3 PSW中的RS0,RS1组合)
3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//数据发送函数
}
}
㈡ 怎样编写单片机的串口通信的程序,一般的步骤是怎么样
编写串口通讯程序步骤为:
1、设置波特率
2、设置串口工作方式
3、收发数据。
比如:
main()
{
unsignedchardat;
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;
}
}
㈢ 两个单片机串口通信程序
两个单片机串口通信,用仿真来实现比较容易做,两个单片机的引脚TXD和RXD交叉连接即可。为了显示通信效果,P2口接两个数码管可显示接收的数据,P1口接两个四位数字开关,用于输入数据,然后从串口发送到另一单片机,两个单片机互发数据,电路相同,程序也相同。仿真图如下。
㈣ 51单片机串口通信程序(需要判断)
#include<reg51.h>
#define uchar unsigned char
uchar com1[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x01,0x00,0x05};
uchar red1[]={0xef,0x01,0xff,0xff,0xff,0xff,0x07,0x00,0x03,0x02,0x00,0x0c};
uchar red2[]={0xef,0x01,0xff,0xff,0xff,0xff,0x07,0x00,0x03,0x02,0x00,0x0a};
uchar red3[]={0xef,0x01,0xff,0xff,0xff,0xff,0x07,0x00,0x03,0x02,0x80,0x0a};
sbit p17=P1^7;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
main()
{
uchar i,rdat[12];
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
for(i=0;i<12;i++)
{
SBUF=com1[i];
while(!TI);
TI=0;
}
i=0;
while(i<12)
{
if(RI)
{
RI=0;
rdat[i]=SBUF;
i++;
}
}
for(i=0;i<12;i++)
{
if(rdat[i]!=red1[i])p17=1;
}
for(i=0;i<12;i++)
{
SBUF=com1[i];
while(!TI);
TI=0;
}
i=0;
while(i<12)
{
if(RI)
{
RI=0;
rdat[i]=SBUF;
i++;
}
for(i=0;i<12;i++)
{
if(rdat[i]!=red2[i])p10=1;
else if(rdat[i]!=red2[i])p11=1;
else p12=1;
}
}
}
}
㈤ 两个51单片机串口通信程序
串行发送程序 Tx.asm :
PCON, #00H ;; 波特率不倍增
SETB TR1 ;; 启动定时器T1
MOV IE, #0 ;; 禁止任何中断
CALL DLY125 ;; 延时125ms
;;--------------------------------------------
T_X: ;; 透传发送字串
ACALL DSPLED ;; P2.0控制LED闪亮
MOV R3, #4 ;; 待发送字符个数
MOV DPTR, #TAB_TX ;; 数据表首址
TX_LP1: CLR A
MOVC A, @A+DPTR ;; A←数据表的1个字符
CLR TI ;; TI清零,允许发送
MOV SBUF,A ;; 发送1个字符
JNB TI, $ ;; 等待1个字符帧发送结束
DJNZ R3, TX_next
CALL DLY500 ;; 延时500ms
SJMP T_X ;; 重复发送
TX_next: ;; 发送另一字符
INC DPTR ;; 数据表指针移动
SJMP TX_LP1
;;--------------------------------------------
DSPLED: ;;开机或复位,P2.0控制LED闪亮6遍
MOV R2, #6 ;; 循环次数
LEDLP1: CLR P2.0 ;; LED亮
CALL DLY125 ;; 延时125ms
SETB P2.0 ;; LED灭
CALL DLY125
DJNZ R2,LEDLP1 ;; 循环
RET
;;----------------------------------------------
DLY125: ;; 延时125ms
DLY125A: MOV R5,#250
DLY125B: MOV R6,#250
DJNZ R6,$
DJNZ R5,DLY125B
RET
;; 250*250*2μs=125 000μs =125ms
;;----------------------------------------------
DLY500: ;; 延时500ms
MOV R7,#4
DLY500A: MOV R6,#250
DLY500B: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY500B
DJNZ R7,DLY500A
RET
;; 4*250*250*2μs=500 000μs =500ms
;;-------------------------------------------------
TAB_TX: DB 38H,30H,35H,31H, ...
;; 8 0 5 1 ...
;;----------------------------------------------
END
㈥ 两个51单片机串口通讯程序
<p>甲机发送(拨码开关):</p>
<p>ORG 00H</p>
<p>AJMP MAIN</p>
<p>ORG 30H</p>
<p>MAIN: </p>
<p>MOV SCON,#50H ;8位发送,接收</p>
<p>MOV TMOD,#20H ;定时器1方式2,8 位自动重装。</p>
<p>MOV TH1,#0FAH ;11.0592MHz,4800bps</p>
<p>MOV TL1,#0FAH</p>
<p>SETB TR1</p>
<p> </p>
<p>MAIN1:</p>
<p>MOV A,P1</p>
<p>CJNE A,20H,SEND_0</p>
<p>AJMP MAIN1</p>
<p>SEND_0:</p>
<p>ACALL SEND</p>
<p>AJMP MAIN1</p>
<p> </p>
<p>SEND:</p>
<p>MOV 20H,A</p>
<p>MOV SBUF,A</p>
<p>JBC TI,SEND</p>
<p>RET</p>
<p>END</p>
<p> </p>
<p> </p>
<p>乙机接收(LED显示):</p>
<p>ORG 00H</p>
<p>AJMP MAIN</p>
<p>ORG 30H</p>
<p>MAIN: </p>
<p>MOV SCON,#50H ;串口工作方式1,允许接收。</p>
<p>MOV TMOD,#20H ;定时器1工作方式2,8 位计数,自动重装定时常数</p>
<p>MOV TH1,#0FAH ;11.0592MHz,4800bps</p>
<p>MOV TL1,#0FAH</p>
<p>SETB TR1</p>
<p>RECE: </p>
<p>JB RI,MAIN1 ;收完RI机器置1,转数据处理。</p>
<p>AJMP $-3
;没收完继续 </p>
<p>MAIN1: </p>
<p>MOV A,SBUF</p>
<p>MOV P2,A</p>
<p>CLR RI</p>
<p>AJMP RECE
;继续接收 </p>
<p> </p>
<p>END</p>
<p> </p>
<p> </p>
<p></p>
<p> </p>