Ⅰ 编程实现51单片机与PC的串口通信,要求波特率设置为9600,循环发送字符串“abc
#include "reg51.h"
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void)
{
initUart();
EA=1;
while(1)
{
send_byte('abc');
}
}
Ⅱ 一道51单片机的C语言程序,关于串口通讯的,很简单......
#include<reg52.h> //增强型52寄存器的定义
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组
void init()
{
} //设置工作方式,这个懂。
void main()
{
init(); //系统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}
Ⅲ 51单片机串口问题,程序如下。
12288的十六进制是3000H
12544的十六进制是3100H
如果你送的是“2“,那打印出来的就是3200H了,也就是12800.
因此(其实我也不怎么知道,推断的):0的asc2码是48,也就是30H,1的asc2码是49,也就是31H……就是说:存储asc2码值的是sbuf的高8位,如果想打印真正的asc2码,就用高八位输出吧~
Ⅳ 简单51单片机串口程序
试试下列程序,这时用中断发送的。
#include<reg51.h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello....
Ⅳ 51单片机串口问题 修改程序
按你这程序,那只能是把:
SBUF=receiveData;
while(!TI);
修改成:
SBUF='O';
while(!TI);
SBUF='K';
while(!TI);
如果一定要指定接收‘Y’,那就在这4条语句外括上if条件,if(receiveData=='Y'){xxxxx}
不过本人建议你不要这么搞,这个while(!TI);是潜在死循环,也是N多串口通信导致死机的起因,它可能导致系统其他任务无法执行,出现所谓“死机”现象。
另外,标准51单片机,9600bps,其晶振必定得使用非整数晶振,如11.0592MHz。用 12MHz的晶振,会因其误码率过大而导致通信失败。
Ⅵ 使用8051单片机的串行通信方式1,要求波特率9600bps,请编写初始化程序。
初始化程序:
SCON = 0x50 ; //方式1,允许接受
TMOD = 0x20 ; //设置time1,方式2
TH1 = 0xfd; //波特率9600b/s 晶振12MHz
TL1 = 0xfd;
ES = 1 ; //允许串口中断
EA = 1; //中断总开启
TR1 = 1 ; //T1开启
Ⅶ 51单片机串行口工作方式1,波特率9600,fosc=6MHz,请用查询 的方法编写发送和接
如下即可:
JNBRI,$
CLRRI
MOVA,SUBF
MOVSUBF,A
JNBTI,$
CLRTI
别忘了采纳。
Ⅷ 51单片机的晶振频率为11.0592MHZ,波特率为9600b/s,要求串口工作在方式1,发送数据
init_uart()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x5=40;
TR1=1;
}