串口通讯
-
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率) -
T1 溢出率 = fosc /{12×[256 -(TH1)]}
-
在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。
-
例题:设计程序使用串口调试助手向单片机传输指令,并用二极管显示传输的数据
注意:波特率要一致统一,即设置串口调试助手的波特率为9600
(使用查询法)
#include<reg52.h>
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
// EA=1;
// ES=1;
while(1)
{
if(RI==1)
{
RI=0;
P1=SBUF;//计算机上的数据都会存在SBUF寄存器上
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
}
(中断法)
#include<reg52.h>
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
/* if(RI==1)
{
RI=0;
P1=SBUF;//计算机上的数据都会存在SBUF寄存器上
}*/
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
}
续题:计算机给单片机发个程序,程序再给单片机发回来
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
/* if(RI==1)
{
RI=0;
P1=SBUF;//计算机上的数据都会存在SBUF寄存器上
}*/
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
SBUF???
返回ASC||码???