📄 serialcommtest.c
字号:
/********************************************************************************************************
*单片机串行口发送/接收测试程序,每收到字节即刻发送出去;此程序证明单片机串行口发送/接收都正常; *
*********************************************************************************************************
*采用定时器2作为波特率发生器,T2CON的各位分别为TF2,EXF2,RCLK,TCLK,EXEN2,TR2,C/~T2,CP/~RL2 *
*TF2: 定时器2溢出标志,软件清除(在波特率发生器方式下,即RCLK或TCLK=1时,定时器溢出不对TF2置位); *
*EXF2: 定时器2外部标志,当EXEN2=1,且T2EX引脚出现负跳变而造成捕获或重装载时置位并申请中断,软件清除 *
*RCLK: 接收时钟标志,软件置位或清除,用于选择定时器2或1作串行口接收波特率发生器,RCLK=1时用定时器2;*
*TCLK: 发送时钟标志,同RCLK; *
*EXEN2: 定时器2外部允许标志,软件置位或清除,以允许或不允许外部信号触发捕获或重装载,EXEN2=1时若定时器*
* 未用于波特率发生器,T2EX出现负跳变时造成捕获或重装载,EXF2=1申请中断,=0时外部信号不起作用;*
*TR2: 定时器2运行控制位,软件设置或清除,TR2=1时,启动定时器2; *
*C/~T2: 定时器或计数器方式选择位,软件设置或清除, *
*CP/~RL2:捕获/重装载标志,软件设置或清除,CP/~RL2=1时选择捕获功能,(EXEN2=1且T2EX负跳变),CP/~RL2=0*
* 时重装载(定时器2溢出或EXEN2=1条件下T2EX负跳变)——RCAP2H和RCAP2L内容传送给TH2和TL2。 *
*********************************************************************************************************
*定时器2作波特率发生器时,波特率取决于它的溢出速率,而与SMOD的状态无关 *
*C/~T2=0,计数时钟来自内部,计数频率=fosc/2,波特率=溢出速率1/16=fosc/(2*16*(65536-(RCAP2H,RCAP2L)))*
*C/~T2=1,计数时钟来自外部,计数频率=外部时钟频率,波特率=外部时钟频率/(16*(65536-(RCAP2H,RCAP2L))) *
*外部时钟最高频率是fosc/24。 *
********************************************************************************************************/
#include<reg52.h>
void main(void)
{
unsigned char a;
SCON = 0x50; //mode 1:10-bit UART,enable receiver
T2CON = 0x30; //T2 is the baud rate generator,transmit and receive
RCAP2H = 0xff;
RCAP2L = 0xd9; //set baudrate=9600
TR2 = 1; //timer 2 run
while(1)
{
while(RI==0);
RI=0;
a=SBUF; //transmit out at once after received
SBUF=a;
while(TI==0);
TI=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -