请教高手,如何实现51单片机和计算机之间的简单无线通信?
- 提问者网友:相思故
- 2021-02-01 11:02
- 二级知识专家网友:邪性洒脱
- 2021-02-01 11:20
- 1楼网友:不服输就别哭
- 2021-02-01 12:11
- 2楼网友:浪女动了心
- 2021-02-01 11:32
串口通讯参考程序如下:
来源:深入浅出avr单片机
#include<reg51.h>
unsigned char uart_rx; //定义串口接收数据变量
unsigned char rx_flag; //定义穿行接收标记
void uart_init (void){
ea = 1; //允许总中断(如不使用中断,可用//屏蔽)
es = 1; //允许uart串口的中断
tmod = 0x20; //定时器t/c1工作方式2
scon = 0x50; //串口工作方式1,允许串口接收(scon = 0x40 时禁止串口接收)
th1 = 0xf3; //定时器初值高8位设置
tl1 = 0xf3; //定时器初值低8位设置
pcon = 0x80; //波特率倍频(屏蔽本句波特率为2400)
tr1 = 1; //定时器启动
}
void uart_r (void) interrupt 4 using 1{ //切换寄存器组到1
ri = 0; //令接收中断标志位为0(软件清零)
uart_rx = sbuf; //将接收到的数据送入变量 uart_data
rx_flag=1; //标记接收
//用户函数内容(用户可使用uart_data做数据处理)
//sbuf = uart_data; //将接收的数据发送回去(删除//即生效)
//while(ti == 0); //检查发送中断标志位
//ti = 0; //令发送中断标志位为0(软件清零)
}
void uart_t (unsigned char uart_data){ //定义串口发送数据变量
es=0; //禁止穿行中断
sbuf = uart_data; //将接收的数据发送回去
while(ti == 0); //检查发送中断标志位
ti = 0; //令发送中断标志位为0(软件清零)
es=1; //打开穿行中断
}
void uart_s(unsigned char *str)
{
while(1)
{
if(*str=='\0') break;
uart_t(*str++);
}
}
void main()
{
unsigned char buf_data[]={" welcome to mcu world. \n\r"};
uart_init();
uart_s(buf_data);
while(1){
if(rx_flag==1)
{
uart_t(uart_rx);
rx_flag=0;
}
}
}
祝愿楼主马到功成