概述
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
符号 | SM0 | SM1 | SM2 | REN 允许接收 | TB 校验 | RB 校验 | TI 发送中断 硬件自动置1 只能软件清零 | RI 接收中断 硬件自动置1 只能软件清零 |
SM0 | SM1 | 方式 | 说明 |
0 | 0 | 0 | 移位寄存器 |
0 | 1 | 1 | 8位数据位 |
1 | 0 | 2 | 9位数据位 |
1 | 1 | 3 | 9位数据位 |
向电脑发送数据
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
void UART_init()
{
//串口设置为方式1
//定时器1设置位自动重装模式
//计算timer1初值
//打开timer1,打开串口允许接收
SCON = 0x50;
TMON = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;EA = 1;
}
void UART_send_data(uint8 dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void delay(uint16 n)
{
while(n--);
}
uint8 num=0;
main()
{
UART_init();
while(1){
UART_send_data(num++);
delay(2000);
}
}
从电脑接收数据,加一后发送回电脑
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
void UART_init()
{
//串口设置为方式1
//定时器1设置位自动重装模式
//计算timer1初值
//打开timer1,打开串口允许接收
SCON = 0x50;
TMON = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;EA = 1;
}
uint8 num;
main()
{
UART_init();
while(1);
}
void interrupt_uart() interrupt 4
{
if(TI) {
TI = 0;
REN = 1;
}
if(RI) {
RI = 0;
num = SBUF;
SBUF = ++num;
REN = 0;
}
}
发送字符串
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
void UART_init()
{
//串口设置为方式1
//定时器1设置位自动重装模式
//计算timer1初值
//打开timer1,打开串口允许接收
SCON = 0x50;
TMON = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;EA = 1;
}
void UART_send_byte(uint8 dat)
{
SBUF = dat;
}
uint8 buf_[] = "hello world!n";
void UART_send_string(uint8 *dat)
{
while(*dat!='