#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语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)