stc15f104e单片机与PC机通信时如何设置9600的波特率?

stc15f104e单片机与PC机通信时如何设置9600的波特率?,第1张

#include "STC11h"
/#define/
#define RECEVICE P15=0
#define SEND P15=1
#define SERIAL_RELOAD_COUNT_4800 0xfa //4800/11059200
#define SERIAL_RELOAD_COUNT_9600 0xfd //串口波特率设置参数 9600/11059200
#define SERIAL_RELOAD_COUNT_14400 0xfe //14400/11059200
#define SERIAL_RELOAD_COUNT_19200 0xfe //19200/11059200
/外部变量声明/
extern uchar task_delay_for_uart_timeout;
extern uchar array[8],arraynum;
/extern bit timeout_flag;/
/函数声明/
void serial_send(uchar senddata);
void serial_rece(void); // interrupt 4;
void serial_port_init(void);
/函数体/
void serial_port_init(void)
{
SCON=0x50; //0101,0000 8位可变波特率,无奇偶校验
BRT=SERIAL_RELOAD_COUNT_9600; //重装值 串口波特率设置参数 9600/110592
AUXR=0X11; //启动独立波特率发生器并串口1选择独立波特率发生器;
AUXR1=0X80; //串口从P3 口切换到P1口
ES=1; //允许串口中断
EA=1; //开总中断
RECEVICE; //485串口芯片开接收
}
void serial_send(uchar senddata)
{ SEND;
ES=0; //即发送数据不希望发生串口中断 故将串口中断暂时关闭
TI=0;
SBUF=senddata;
while(TI==0); //此while语句后面需加分号以达到等待数据发送完成的目的 当数据发送完毕 TI=1 退出循环
TI=0; //说明虽然串口中断关了 但是在发送完数据的时候TI还是会被置位
ES=1; //开串口中断
RECEVICE;
}
void serial_rece() interrupt 4 //可以把下面的判断语句里面的RI==1去掉
{
//接收中断标志位 即表示有数据开始接收到
if(/RI==1&&/arraynum==0||task_delay_for_uart_timeout!=0) //(为第一个数据接收准备)
{RI=0;
task_delay_for_uart_timeout=10; //清除标志位并开始计时50ms
array[arraynum]=SBUF;
arraynum++;
}
//else if(/RI==1&&/task_delay1!=0) //(为后续的10ms判断准备)10ms未到才执行
//{RI=0;
// task_delay1=6; //清除标志位并开始计时10ms
// array[arraynum]=SBUF;
// arraynum++;
//}
/else if(RI==1&&arraynum==) //(接收最后一字节准备)
{RI=0;
array[arraynum]=SBUF;
arraynum++;
}/
else {array[8]=0;arraynum=0;} //如果不是第一个字节(arraynum!=0)且超时(task_delay1==0)那么全清零
}
我拷我自自己工程里的部分给你。
要自己学会看datasheet啊,不能拿别人的。

计算机的串口波特率
计算机的串口波特率,什么是波特率_波特率9600是什么意思_串口通信为什么要设置波特率?
波特率(Baud Rate) 单位 bps -- 每秒传送的字节数 Byte Per Second。
(BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。 波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,其单位是波特(Baud)。波特率与比特率的关系是比特率=波特率X单个调制状态对应的二进制位数。 在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是传输通道频宽的指标。 每秒钟通过信道传输的信息量称为位传输速率,简称比特率。比特率表示有效数据的传输速率。
波特率就是一秒种传输0或1的个数,若波特率是9600那么它传输一位0或1的时间就是1/9600秒如果串口工作在方式一下波特率是9600晶振是11059200定时器选用timer1的自动重装模式即1/9600=定时时间就是1/9600=(1232/11059200)(256-定时初值)。那么定时初值=256-(11059200/(12329600));
RS-485 就是 EIA-485,EIA-485仅仅规定了接受端和发送端的电气特性。没有规定或推荐任何通讯协议。
EIA-485可以应用于配置便宜的广域网和采用单机发送,多机接受通信链接。它提供高速的数据通信速率。(EIA-485和EIA-422一样 使用双绞线进行高电压差分平衡传输,它可以进行大面积长距离传输(超过1200米)。
不同的通讯协议,就是不同的数据通讯约定,如何呼,如何应,如何送,如何校对,如何握手。例如常见的 >

溢出速率=fosc/[12(256-TH1初值)]

比如晶振为110592MHz,波特率不加倍,那么

波特率=(1/32)11059200/12/(256-TH1初值)

如果波特率要求为9600

那么TH1初值=256-11059200/12/32/9600=256-3


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13400366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存