免费认证网站,图书馆网站建设的要求,用phpmysql做图书网站,濮阳建站建设1.SM0,SM1 我们一般用 8位UART#xff0c;波特率可变 #xff08;方式1的工作方式#xff09; SCON #xff1a;SM2 一般不用#xff0c;SM0 0 ,SM1 1 PCON : 有两位 我们不动它#xff0c;不加速#xff0c;初始值 TMOD#xff1a;8位自动重装定时器#xff0…1.SM0,SM1 我们一般用 8位UART波特率可变 方式1的工作方式 SCON SM2 一般不用SM0 0 ,SM1 1 PCON : 有两位 我们不动它不加速初始值 TMOD8位自动重装定时器当溢出时将TH1存放的值自动重装入TL1 高四位清零 TMOD 0x0F 高四位清0 TMOD |0x20; 由此变成 M1,M0 为 1 0 8位自动重装模式 定时器 由波特率计算 TH1 0xFD; TL1 0xFD; //9600波特率的初值 TR1 1 //启动定时器
2.波特率计算
12T: 2^0 / 32 x 11059200 / 12 (256-t) 9600 SCON: TMOD: 波特率计算 串口实现字符串输出
1.自定义初始化串口
void UartInit(void)
{AUXR 0x01;SCON 0x40;TMOD 0x0F;TMOD | 0x20;TH1 0xFD;TL1 0xFD;TR1 1;
}2.利用串口中断来延迟输出因为通过手册我们可以知道发数据的过程中移位寄存器操作也是消耗时间的所以我们可以加软件延迟或者中断来抵消这一部分时间
用 TI void sendByte(char data_msg) { SBUF data_msg; while(!TI); //(TI0) TI 0;
}
void sendString(char *str) { while(*str ! \0){ sendByte(*str); str; //指针偏移 } }
void main() { UartInit(); while(1) { Delay1000ms(); sendString(caoshupei shuai\r\n); //不加 \r 和 \n 会乱行 } } 串口通信编程PC端发送指令控制LED
1.REN使能端必须让它等于1才能接受数据
B7 B6 B5 B4 B3 B2 B1 B0
0 1 0 1 0 0 0 0 SM1 0 REN 2.RI接收中断请求标志位。在方式0当接收到第八位结束时硬件自动置位RI 1; 响应中断后必须软件复位即 RI 0
2.1 用外部中断函数不会卡死同时打开ES外部串口中断和总中断EA