单片机使用串口通讯时,怎么设定波特率啊,
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON& = 0xef;
程序中波特率9600怎么来的?
用晶振怎么计算啊?
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON& = 0xef;
程序中波特率9600怎么来的?
用晶振怎么计算啊?
TMOD = 0x20; // 定时器1工作于方式2 8位自动重载模式 为什么用这种模式。答:这种模式特别适合用于把T1 用做串行口拨特率发生器
TH1 = 0xFD;
TL1 = 0xFD; // 波特率9600:
为什么这里设置成 0XFD 就是拨特率 9600呢?
我们先说 T1方式2的情况下。 为什么TH1 TL1 都被设置为0XFD 是因为 T1 在方式2时 当TL1计数溢出时 自动 把TH1的内容重装载到 TL1中 这也是为什么 它叫做自动重载模式
也许刚开始大家会想 明明是8位的定时计数器 为什么 TH1 TL1 都要定义。就是 这个原因。下面我们再说 为什么要用T1 并且初值为 0XFD
SCON = 0x50; // 设定串行口工作方式 :SCON 串行口控制寄存器 为 01010000 定为方式1 (为什么是方式1 。。。。这个 应该能看懂吧 )
PCON& = 0xef; //这条语句 PCON 特殊功能寄存器 被给定为 0XEF=01111111 也就是最高位为0 就是SMOD 为0 那么SMOD 干什么的呢 拨特率选择位 为1时 拨特率加倍 为0时就是普通 后面有个公式 2的SMOD次方 就要用到这个 这里 定义为 0了 那么后面公式里就直接可以不要这个了 因为 2的0次方 为1 了
好了 上面都设置好了 下面我们来看看 计算公式
当SMOD 等于0时 我们直接写成 FOSC/[32X12(2*8-T1初值)] =11059260/[32X12(256-253)=11059260/1152=9600.052083333333333333
(为什么是这个公式 。。。。。书上有 网上有 自己翻翻。。。。。)
OK不?
TH1 = 0xFD;
TL1 = 0xFD; // 波特率9600:
为什么这里设置成 0XFD 就是拨特率 9600呢?
我们先说 T1方式2的情况下。 为什么TH1 TL1 都被设置为0XFD 是因为 T1 在方式2时 当TL1计数溢出时 自动 把TH1的内容重装载到 TL1中 这也是为什么 它叫做自动重载模式
也许刚开始大家会想 明明是8位的定时计数器 为什么 TH1 TL1 都要定义。就是 这个原因。下面我们再说 为什么要用T1 并且初值为 0XFD
SCON = 0x50; // 设定串行口工作方式 :SCON 串行口控制寄存器 为 01010000 定为方式1 (为什么是方式1 。。。。这个 应该能看懂吧 )
PCON& = 0xef; //这条语句 PCON 特殊功能寄存器 被给定为 0XEF=01111111 也就是最高位为0 就是SMOD 为0 那么SMOD 干什么的呢 拨特率选择位 为1时 拨特率加倍 为0时就是普通 后面有个公式 2的SMOD次方 就要用到这个 这里 定义为 0了 那么后面公式里就直接可以不要这个了 因为 2的0次方 为1 了
好了 上面都设置好了 下面我们来看看 计算公式
当SMOD 等于0时 我们直接写成 FOSC/[32X12(2*8-T1初值)] =11059260/[32X12(256-253)=11059260/1152=9600.052083333333333333
(为什么是这个公式 。。。。。书上有 网上有 自己翻翻。。。。。)
OK不?