当前位置:网站首页>gpio模拟串口通信
gpio模拟串口通信
2022-08-01 13:21:00 【四季帆】
1. 串口的传输协议
UART使用异步模式工作,不需要时钟信号,其一般格式为:起始位+数据位+校验位+停止位。其中起始位1位,数据位5~8位,校验位0或1位,停止位1、1.5或2位。不过最常用的格式是1位起始位、8位数据位、没有奇偶校验、1位停止位,简记为8/N/1。
8/N/1格式的时序图如下:

空闲时数据线上规定为逻辑1。
开始传输数据时先发送起始位,规定为逻辑0,接收端会检测这个下降沿,以便之后开始采样接收数据。
起始位之后是数据位,规定先发送最低位,即LSB First。因为UART没有时钟信号,故使用波特率来确定每一位的长度,不过为保证检测的准确性,实际采样频率会高于波特率,一般每一位会进行若干次采样,取中间的采样值作为这一位的结果。
奇偶校验位一般不使用。
停止位一般使用1位,规定为逻辑1,除了表示传输结束外,停止位还可以起到时钟同步的作用。
需要注意的是,这里的逻辑0并不一定是0V,这与使用的电平标准有关。对于TTL电平而言,逻辑0是0V,逻辑1是高电平(一般为3.3V或5V);对于RS-232电平而言,逻辑0是3V~15V,逻辑1是-3~-15V。
2. gpio模拟串口通信
以晶振频率11.0592M为时钟的芯片为例,实现波特率为9600BPS的串口通信(即传输一个位需要1/9600秒),定时时间=定时器计数值*机器周期=定时器计数值*12/晶振频率,现在定时时间为1/9600秒,定时器计数值=定时时间*晶振频率/12=110592/1152=96
补充:机器周期表示执行一条cpu指令所需时间,时钟周期是1/晶振频率,一个机器周期一般由多个时钟周期组成,比如51单片机的一个机器周期由12个时钟周期组成。
#define TM0_FLAG 0 //设传输标志位
#define RXD P1_0 //通过P1_0 IO脚来模拟RXD功能引脚
#define TXD P1_1 //通过P1_0 IO脚来模拟TXD功能引脚
/* 计数器及中断初始化 */
void S2INI(void)
{
TMOD |= 0x02; //计数器0,方式2
TH0 = 0xA0; //预值为256-96=140,十六进制A0
TL0 = TH0;
TR0 = 0; //在发送或接收才开始使用
TF0 = 0;
ET0 = 1; //允许定时器0中断
EA = 1; //中断允许总开关
}
/* 从串口读一个字符 */
uchar RByte()
{
uchar Output = 0;
uchar i = 8;
TR0 = 1; //启动Timer0
TL0 = TH0;
WaitTF0(); //等过起始位
//发送8位数据位
while(i--)
{
Output >>= 1;
if(RXD) Output |= 0x80; //先收低位
WaitTF0(); //位间延时
}
while(!TM0_FLAG)
{
if(RXD) break; //收到结束位
}
TR0 = 0; //停止
Timer0
return Output;
}
/* 往串口写一个字节 */
void WByte(uchar input)
{
uchar i = 8;
TXD = (bit)0; //发送启始位
WaitTF0();
//发送8位数据位
while(i--)
{
TXD = (bit)(input & 0x01); //先传低位
WaitTF0();
input = input >> 1;
}
TXD = (bit)1; //发送结束位
WaitTF0();
}
/* 中断1处理程序 */
void IntTimer0() interrupt 1
{
TM0_FLAG = 1; //设置标志位。
}
/* 查询传输标志位 */
void WaitTF0( void )
{
while(!TM0_FLAG);
TM0_FLAG = 0; //清标志位
}边栏推荐
- SQL函数 %SQLSTRING
- PIR人体感应AC系列感应器投光灯人体感应开关等应用定制方案
- How do we do full-link grayscale on the database?
- 如何将第三方服务中心注册集成到 Istio ?
- 台积电认清了形势,新的建厂计划没有美国,中国芯片也得到重视
- sql is not null 优化(oracle语句索引优化)
- Efficiency tools to let programmers get off work earlier
- 求方阵的无穷范数「建议收藏」
- 【5GC】5G网络切片与5G QoS的区别?
- Six Stones Programming: Problems must be faced, methods must be skillful, and functions that cannot be done well must be solved
猜你喜欢
随机推荐
四足机器人软件架构现状分析
2022-07-29 网工进阶(二十二)BGP-其他特性(路由过滤、团体属性、认证、AS欺骗、对等体组、子路由器、路由最大接收数量)
论文详读《基于改进 LeNet-5 模型的手写体中文识别》,未完待补充
markdown常用数学符号cov(markdown求和符号)
消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?
使用ffmpeg来查看视频的信息,fps,和width,height
数字孪生北京故宫,元宇宙推进旅游业进程
What is consistent hashing?In what scenarios can it be applied?
SQL函数 SQRT
PanGu-Coder:函数级的代码生成模型
PyTorch 进阶之路:在 GPU 上训练深度神经网络
JMP Pro 16.0 software installation package download and installation tutorial
批量任务导入到数据库中
Detailed explanation of table join
AtCoder Beginner Contest 261 D - Flipping and Bonus
lua脚本关键
数字证书原理
sql中常用到的正则表达
tensorflow2.0手写数字识别(tensorflow手写体识别)
态路小课堂丨浅谈优质光模块需要具备的条件!









