全双工:通信双方可以在同一时刻互相传输数据
半双工:通信双方可以互相传输数据,但必须分时复用一条数据线
单工:通信只能有一方发送到另一方,不能反向传输
异步:通信双方各自约定通信速率
同步:通信双方靠一根时钟线来约定通信速率
总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)
使用stc-isp软件中的波特率计算器生成指定函数,配置如下:
#include <REGX52.H>
#include "Delay.h"
unsigned char Sec;
//使用波特率计算器生成的函数
void UartInit(void) //4800bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
//是一个子函数,串口发送一个字节,Byte
void UART_SendByte(unsigned char Byte){
SBUF=Byte; //发送数据
while(TI==0); //检查是否发送成功,发送成功TI=1;否则一直发送
TI=0; //发送成功后进行软件复位,TI=0
}
void main(){
//在main函数中进行调用,初始化
UartInit();
while(1){
UART_SendByte(Sec);
Sec++;
Delay(1000);
}
}
接收发送
#include <REGX52.H>
#include "Delay.h"
unsigned char Sec;
//使用波特率计算器生成的函数
void UartInit(void) //4800bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率,这里0x50可以实现接收数据
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1; //启动所有中断
ES=1; //启动串口中断
}
//是一个子函数,串口发送一个字节,Byte
void UART_SendByte(unsigned char Byte){
SBUF=Byte; //发送数据
while(TI==0); //检查是否发送成功,发送成功TI=1;否则一直发送
TI=0; //发送成功后进行软件复位,TI=0
}
void main(){
//在main函数中进行调用,初始化
UartInit();
while(1){
}
}
//中断函数,后面有interrupt 4才是中断函数,当出现中断号4时就会执行当前函数
//当发送数据时,就会执行中断函数
void UART_Routine() interrupt 4{
// 需要判断一下,因为接收和发送占用同一条线,接收为RI,发送为TI
if(RI==1){ //接收中断
P2=~SBUF;
UART_SendByte(SBUF); //把接收到的数据再发送出去
RI=0; //最后需要要复位
}
}
在这里进行发送数据,这里发送就不需要在前面加上0x了
当接收位置为文本模式的时候: