网站代理浏览器7,wordpress实现新闻列表,12306网站如何做解绑,怎么做网站超市目录
一、串口通信
二、串口协议
三、原理图
四、串口通信配置参数
1、常用的串行口工作方式1 2、数据发送
3、数据接收
4、波特率计算
5、轮询接收
6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…目录
一、串口通信
二、串口协议
三、原理图
四、串口通信配置参数
1、常用的串行口工作方式1 2、数据发送
3、数据接收
4、波特率计算
5、轮询接收
6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式广泛用于计算机与外部设备或嵌入式系统之间的通信。串口通信的特点是逐位传输数据与并口相比具有以下优势
传输距离长适合远距离通信。占用引脚少只需两条通信线发送和接收。简单可靠易于实现和调试。
常见的串口标准
RS-232传统的串口标准常用于PC和设备之间的通信。RS-485支持多点通信适合工业应用。UART通用异步收发器嵌入式系统中常用的一种硬件模块实现异步串口通信。
二、串口协议
串口通信参数
波特率每秒传输的位数如9600、115200等。数据位每个数据帧的位数通常为8位。停止位用于标识一帧数据的结束常为1位或2位。校验位用于错误检测可选择无校验、奇校验、偶校验等。
三、原理图 四、串口通信配置参数
中断编号中断名中断源4串行口中断RI 可以看到串口接收中断是单片机中断的最低权限位。
中断控制位功能实现ES串行口中断允许控制位 1允许串口中断 0禁止串口中断 SCON串行控制寄存器。 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H SM0 SM1 SM2 REN TB8 RB8 TI RI 00同步波特率固定fosc/12 0110位异步波特率可以变 1011位异步波特率固定fosc/32\64 1111位异步波特率可变 0双机 1多机 0禁止接收 1允许接受 发送数据第九位 接收数据第九位 发送中断标志 接收中断标志
1、常用的串行口工作方式1
方式1是一帧10位的异步串行通信方式包括1个起始位(0)8个数据位和一个停止位(1)其帧格式如下 起始位0 D0 D1 D2 D3 D4 D5 D6 D7 停止位1 2、数据发送 当TI0时执行“MOV SBUFA”指令后开始发送由硬件自动加入起始位和停止位构成一帧数据然后由TXD端串行输出。发送完后TXD输出线维持在“1”状态下并将SCON中的TI置1表示一帧数据发送完毕。
3、数据接收 RI0REN1时接收电路以波特率的16倍速度采样RXD引脚如出现由“1”变“0”跳变认为有数据正在发送。 在接收到第9位数据即停止位时必须同时满足以下两个条件RI0和SM20或接收到的停止位为“1”才把接收到的数据存入SBUF中停止位送RB8同时置位RI。若上述条件不满足接收到的数据不装入SBUF被舍弃。在方式1下SM2应设定为0。
4、波特率计算 其中fosc为晶振频率M为重装载值T为定时器1的初值SMOD可选为加倍。
例如fosc11.0592MHz、9600波特率如果在定时器1模式2下M256SMOD0可以算出
T2530XFD
TMOD | 0x20; // 定时器1设置为模式28位自动重载
TH1 0xFD; // 设置初值为0xFD波特率9600
TL1 0xFD; // 装载初值
TR1 1; // 启动定时器1
SCON 0x50; // 设置串口为模式1允许接收
5、轮询接收
ES0; //禁止串口中断
while(1) //死循环,单片机初始化后,将一直运行这个死循环
{//****查询式串口接收程序****if(RI1) //如果接收标志位为1说明有数据接收完毕{ //RCIF在寄存器被读出后自动清零USARTbufSBUF; //将接收缓冲区内容转至USARTbuf寄存器中RI0; //清除接收标志位SBUFUSARTbuf1; //将接收到的内容1后发送出去while(!TI); //一直等到数据发送完毕}
} 可以看到在主函数判断RI是否为1得到获取SBUF的值如果要发送则赋值给SBUF即可。
6、中断接收
ES1; //允许串口中断
EA1; //开全局中断
void UART_SER (void) interrupt 4
{if(RI1) //如果接收标志位为1说明有数据接收完毕{ //RCIF在寄存器被读出后自动清零USARTbufSBUF; //将接收缓冲区内容转至USARTbuf寄存器中RI0; //清除接收标志位SBUFUSARTbuf1; //将接收到的内容1后发送出去while(!TI); //一直等到数据发送完毕}if(TI) TI0; //如果是发送引起的中断清零
} 可以看到中断服务函数不仅会让接收进入中断发送也会进入中断其不通过轮询可以大大降低系统的占用。 同样中断服务函数不要写太多乱七八糟的代码越简洁越好。