谁有,51单片机串口中断接受pc发送字符串 c程序,谢谢

谁有,51单片机串口中断接受pc发送字符串 c程序,谢谢,第1张

#include

<reg52h>

bit

Flag;

//串口接收到字符的标志

unsigned

char

UartChar;

void

InitUART(void);

void

SendByte(unsigned

char

dat);

void

SendStr(unsigned

char

s);

void

main

(void)

{

InitUART();

//串口初始化

Flag

=

0;

while

(1)

{

if(Flag

==

1)

{

Flag

=

0;

SendByte(UartChar);

if(UartChar

==

'\r')

{

SendByte('\n');

}

}

}

}

/----------------------------

串口初始化--------------------------------------------------------------/

void

InitUART(void)

{

SCON

=

0x50;

//

SCON:

模式

1,

8-bit

UART,

使能接收

TMOD

|=

0x20;

//

TMOD:

timer

1,

mode

2,

8-bit

重装

TH1

=

0xFD;

//

TH1:

重装值

9600

波特率

晶振

110592MHz

TR1

=

1;

//

TR1:

timer

1

打开

EA

=

1;

//打开总中断

ES

=

1;

//打开串口中断

}

/-------------------------------

发送一个字节---------------------------------------/

void

SendByte(unsigned

char

dat)

{

SBUF

=

dat;

while(!TI);

TI

=

0;

}

/-------------------

发送一个字符串------------------------------------------/

void

SendStr(unsigned

char

s)

{

while(s

!=

'\0')

//字符串是否发送完,

{

SendByte(s);

s++;

}

}

/----------------串口中断程序----------------------------------------/

void

UART_SER

(void)

interrupt

4

//串行中断服务程序

{

if(RI)

//判断是接收中断产生

{

RI=0;

//标志位清零

UartChar

=

SBUF;

//读入缓冲区的值

Flag

=

1;

//把值输出到P1口,用于观察

}

}

#include <reg51h> // 接收 试试

sbit led1=P3^2; // 接收 az , P2 输出低电平, P33 输出高电平。

sbit led2=P3^3; // 接收 aa , P2 输出高电平, P33 输出低电平。

bit t,s;

void main (void)

{

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1

TMOD|= 0x20; // 定时器工作方式2

PCON|= 0x80; // 数据位8、停止位1。效验位无 (12M)

TH1 = 0xFD; // TH1 = 0xFD; 波特率 9600

TL1 = 0xFD;

TR1 = 1;

ES = 1; // 开串口中断

EA = 1; // 开总中断

s=1;

while(1)

{

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

TI = 0;

if(t==1)

{

if(SBUF=='z') {led1=0;led2=1; }

if(SBUF=='a') {led1=1;led2=0; }

s=1; t=0;

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

/

程序把接收的数据发送出去,波速率为2400。

打开串口调试软件,把波速率设置为2400,

向板发送一个字节数据,软件应能接收到同样的数据。

/

#include<reg51h>

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--);

}

自己改波特率,该程序通过单片机与串口助手相互通信

既然都可以发一个字符了怎么不能发一个字符串呢?

unsigned char code str[] = "hello world!";

unsigned char pstr = str;

while(pstr)

{

send_a_char(pstr);

pstr ++;

}

大概就这思路吧。

以上就是关于谁有,51单片机串口中断接受pc发送字符串 c程序,谢谢全部的内容,包括:谁有,51单片机串口中断接受pc发送字符串 c程序,谢谢、C51关于判断串口接收数据的C程序,就判断输入是"az"还是"aa",麻烦帮我修改一下。最好有注释!、单片机串行口通信程序C语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9495111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存