单片机如何通过串口发送以下指令的?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-05-17
单片机的串口发送指令这个是怎么做的

串口通信,每次一个字节,内容是 0~255。

这 256 种不同的内容,都是干啥的,你自己瞎编,就行了。

可以看看我的百度空间,串口通信的代码,有好多的。

1、首先你要搭建好,51单片机系统,包括串口发送电路。
2、可以将你直接发送的字符串,作为一个变量,待用。
3、利用单片机中断发送字符串。
4、收端设备验证发送的内容是否正确。

;11.0592M 

;通讯波特率为9600bps

;按下接在P3.7的按键, 发送一串ASCII字符

ORG  0000H 

AJMP MAIN

ORG 0030H

MAIN:

MOV  SCON,#50H;设置成串口1方式

MOV  TMOD,#20H;波特率发生器T1工作在模式2上

MOV  PCON,#00H

MOV  TH1,#0FDH;预置初值

MOV  TL1,#0FDH;预置初值

SETB  TR1;启动定时器T1

;以上完成通讯初始化设置

JB  P3.7,$

ACALL  DELAY

JNB  P3.7,$

MOV A,#"%"

MOV  SBUF,A  ;单片机招待这条写数据发送缓冲器SBUF的指令,就启动发送,将"%"送通过串口发送出去

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"1"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"#"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"C"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"S"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"1"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"*"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"*"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"c"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

AJMP MAIN

;10毫秒延时子程序

DELAY:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

END

可以用任一串口调试助手收到这串字符。 

用查表方法程序应该简单一点

;11.0592M 

;通讯波特率为9600kbps,按下接在P3.7的按键, 发送一串23个ASCII字符:"% 01 # RC S R0001 ** cR"

ORG  0000H 

AJMP MAIN

ORG 0030H

MAIN:

MOV  SCON,#50H;设置成串口1方式

MOV  TMOD,#20H;波特率发生器T1工作在模式2上

MOV  PCON,#00H

MOV  TH1,#0FDH;预置初值

MOV  TL1,#0FDH;预置初值

SETB  TR1;启动定时器T1

;以上完成通讯初始化设置

MAIN1:

MOV R0,#23

MOV DPTR,#TAB

JB  P3.7,$

ACALL  DELAY

JNB  P3.7,$

SEND:

CLR TI

MOV A,#0

MOVC A,@A+DPTR

INC DPTR

MOV  SBUF,A  ;单片机招待这条写数据发送缓冲器SBUF的指令,就启动发送,数据通过串口发送出去

JNB TI,$

CLR TI

DJNZ R0,SEND

AJMP MAIN1 

;10毫秒延时子程序

DELAY:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

TAB: DB  "%"," ","0","1"," ","#"," ","R","C"," ","S"," "

         DB  "R","0""0","0","1"," ","*","*"," ","c","R"

END



单片机是的缓冲区是一个字节的。所以有两种思路。
一种是判断发送完成的标志位,一位一位的写进去。
一种是自己建立一个缓冲区,把要发送的数据复制到缓冲区,数据长度也写进去。然后通过串口中断来发送缓冲区的数据。如果写入的长度不为零,则发送该长度的字节。

#include<reg51.h>
void delayms(unsigned int i);
unsigned char b;
void rs_dmx() interrupt 4 using 2//串口中断服务程序
{

b=SBUF;//接收数据

SBUF=b;//把接收的数据发送出去
while(TI==0);TI=0;
delayms(1);

RI=0;
}
main()
{
//write(1,60);
//b=read(1);
EA=1;
// TR0=1;
// ET0=1;
// TMOD=0X01;

TMOD=0x21;

TH1=0xF3;//波速率为2400
TL1=0xf3;
TR1=1;
EA=1;
SCON=0XD0;

ES=1;

while(1)
{

}

}

void delayms(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=100;j>0;j--);
}

给你个C的程序看,也就是把数据丢进SBUF里,再配置好波特率就OK了

  • 简单的一个单片机串口发送字符串程序
    答:es =1;置 es=0;使之不产生串口中断事件,但并不等于不会置串口发生标志 ti 程序有几个可疑的位置 ,1.你用uchar 来指向uchar code 这个可能有问题 2.设es = 1;会在ti被置1时cpu控制权会跳到串口向量,但你未定义串口中断函数 3.程序就算能发送,也只在单片机开机那一小会,你看不到很正常...
  • 单片机向串口调试助手发送数据 c语言
    答:// EA=1;// ES=1;// TR1=1; }void sendchar(uchar ch) //串口送一个字节{ SBUF=ch;while(TI==0);TI=0;}void sendstring(uchar *p) //送字符串{ while(*p) { sendchar(*p); p++;} }///void receive(void) interrupt 4 using 1 //中断{ if(...
  • SBUF的详细介绍!(51单片机)
    答:区分:串行发送时,CPU向SBUF写入数据,此时99H表示发送SBUF;串行接收时,CPU从SBUF读出数据,此时99H表示接收SBUF。其中:发送缓冲寄存器SBUF只能写,不能读; 接收缓冲寄存器SBUF只能读,不能写.即:若要通过串口发送数据,只需要往sbuf里写数据,发送完毕后会引起串口中断。发送指令: MOV SBUF,A ;...
  • 用单片机串口向电脑串口调试助手发送一个字符串,用C语言编程
    答:uchar code AT[]="YES,IT IS";void UART_init (void){ TMOD=0x20;//用定时器1 PCON=0x00; //波特率不加倍 SCON=0x50;//串行方式1 TH1=0xFD;//9600 TL1=0xFD;// EA=1;// ES=1;// TR1=1;} void sendchar(uchar ch) //串口送一个字节 { SBUF=ch;while(TI==0);TI=0...
  • 单片机通过串口发送12位的十六进制数据,先发高4位,后发低8位,用C#做...
    答:发送:int ii;char i;ii=data;//待发送数据 i=ii>>8;//取高8位 i&=0x0f;//取高4位 putchar(i);//发送高4位 i=ii&0xff;//取低8位 putchar(i);//发送低8r 接收:int ii;char i;i=getchar();//收到高4位 ii=i;ii<<=8;//ii左移8位 i=getchar();ii...
  • 单片机串口c程序发送数据
    答:从你出现的问题看,你应该是发的0,1,2,3……255的数,而不是它们对应的ASCII的值。比如你要发送在串口调试工具中显示0,应该发送0的ASCII值;假设你的串口发送一字节的函数为:sendbyte(unsigned char n);则发送函数可以这样写:void send(void){ unsigned char i;for (i=0;i<256;i++){...
  • 我想利用单片机通过串口发送几个16进制数FF 10 11 01 DD 求高手指点...
    答:单片机通过串口发送几个16进制数FF 10 11 01 DD,程序如下:void Send(unsigned char Tx_Data)//向串口发字符 { SBUF=Tx_Data;while(!TI);TI=0;} main(){ 先串口初始化,然后:Send(0xFF);Send(0x10);Send(0x11);Send(0x01);Send(0xDD);即可。} ...
  • 80C51单片机串口通信工作方式1怎样发送字符串?
    答:1)数据发送与接收使用方式0实现数据的移位输入输出时,实际上是把串行口变成并行口使用。串行口作为并行输出口使用时,要和CD4049或74LS164配合使用,其电路连接如图10。图(b)为74LS164的引脚图,芯片各引脚功能如下:Q0~Q7为并行输出引脚。DSA、DSB为 串行输入引脚。清零引脚,低电平时,使74LS164输出...
  • 单片机串口通信,向单片机发送字符串"#01",单片机向PC回传"Hello World...
    答:include <reg52.h> include <intrins.h> include <string.h> sbit D0=P2^0;sbit D1=P2^1;sbit D2=P2^2;sbit D3=P2^3;sbit D4=P2^4;define uchar unsigned char uchar i=0;uchar j=0;uchar flag=0;uchar temprx,temptx;char str[15]="";char src[15]="";char cmpStr[15]=...
  • ...程序说明,单片机通过串口发送字符串给M33(GPRS模块)。
    答:谢谢 程序说明,单片机通过串口发送字符串给M33(GPRS模块)。 voidsendchar(ucharch)//函数voidsendchar(ucharch);实现功能:发送一字节数据{SBUF=ch;while(TI==0);TI=0;}voidsendstring(uchar*p)//函数voidsendstring(uchar*p);实现功能:通过串口... void sendchar(uchar ch) //函数void sendchar(uchar ch);实现...