串口中定时器T1工作方式与波特率设置问题

关于串口的波特率有些问题搞不明白,于是在此请教各位,恳请各位的解答。
波特率的设置是用的TH1、TL1来装载相应的初值。
一般书上用串口时,定时器都设置为工作方式2,因为他可以自动重装初值,但是下面官方所给的代码里用的定时方式0,是不可以自动重装初值的,而书上又明确说,定时器在每次计数溢出后,TH1和TL1都会清0。所以这是为什么呢?波特率的设置只需要在一开始给定就行了吗?
我觉得我肯定理解错了定时器T1和波特率之间的关系。
如果是这样的话,那他们两者之间的关系又是什么样的呢?求解,谢谢!

代码如下(此段代码效果:通过串口调试助手发送数字1~8,板子上面的对应指示灯亮):

#include "STC15F2K60S2.h " //定义51单片机特殊功能寄存器
#include "absacc.h"

#define BAUD           9600          //波特率
#define SYSTEMCLOCK  11059200L  //系统时钟频率

bit rxc = 0; //数据接收标志位
char rx = '1';//接收到的数据
void uart_sendstring(unsigned char *str); //数据发送


//主函数
void main(void)
{ 
    SCON = 0x50;                

    AUXR = 0x40;                //1T
    TMOD = 0x00;                //
    TL1 = (65536 - (SYSTEMCLOCK/4/BAUD));   //
    TH1 = (65536 - (SYSTEMCLOCK/4/BAUD))>>8;
    TR1 = 1;  
    ES = 1;
    EA = 1;
    
    while(1)
    {
        if(rxc == 1){
            rxc = 0;
            switch(rx){
                case '1':
                {
                    XBYTE[0x8000] = 0xFE;
                    uart_sendstring("1");    
                }
                break;        
                //...省略一段
                default:
                    uart_sendstring("error\r\n");    //输入其他数据返回error
                break;
            }
            ES = 1;
        }
    }
}

//串口中断服务函数
void isr_uart(void) interrupt 4
{
    if(RI)
    {
        RI = 0;  //清除接收标志位 
        rx = SBUF;
        ES = 0;
        rxc = 1;
      }
}

//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{
    unsigned char *p;   
    p = str;
    while(*p != '\0')
    {
        SBUF = *p;
        while(TI == 0);  //等待发送标志位置位
        TI = 0;
        p++;
    }
}

查看了一下关于STC15系列的单片机手册,和书上学的51单片机不太一样。这里的定时器在模式0下也是可以自动重装的,且是16位,计算公式也与一开始书上学的不太一样。这个事情教会我要学会看用户手册。

img