STC15 串口通信
2024-09-08 13:53:25
串口1选择定时器2产生波特率
串口1相关寄存器
1.选择串口1所放的管脚
2.串口1配置步骤
3.选择串口工作模式
4.确定定时器2工作速度
代码配置
void Uart1_Tim2_Config(int Baud)
{
//P3.6, P3.7准双向模式
P3M0 &= ~(0x03<<6);
P3M1 &= ~(0x03<<6);
//S1_S0=1 S1_S1=0 RxD_2,TxD_2
ACC = P_SW1;
ACC = ACC&0x3F|(0x01<<6);
P_SW1 = ACC;
//方式1,并允许串口接收中断
SCON = 0x50;
//设置波特率
T2L = (65536 - FOSC/4/Baud);
T2H = (65536 - FOSC/4/Baud) >> 8;
AUXR = 0x15; //T2为1T模式, 选择定时器2作为波特率发生器并启动
ES = 1; //使能串口1中断
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
Uart_Recv_Buf[Uart_Recv_Cnt] = SBUF; //P0显示串口数据
if(Uart_Recv_Buf[Uart_Recv_Cnt++] == '\n')
{
Uart_Recv_Flag = 1;
Uart_Recv_Cnt = 0;
}
}
if (TI)
{
TI = 0; //清除TI位
Uart_Busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
{
while (Uart_Busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
Uart_Busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
最新文章
- iOS之There was an internal API error错误
- iOS 疑难杂症 — — UIButton 点击卡顿/延迟
- 初学mongodb笔记
- WCF 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的
- .net c# 视频剪切抓取缩略图
- java课后作业6
- 软件测试面试(2)LR篇
- vpn与局域网冲突解决方案
- Housse Robber II | leetcode
- C#程序将对象保存为json文件的方法
- 矩阵链乘 hrbust 1600
- android FragmentPagerAdapter的“标准”配置
- 【转】使用ThinkPHP必须掌握的调试方法
- 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
- 安装phpnow服务[Apache_pn]提示失败的解决方法
- 使用 whistle 替代本地 nginx/webpack 服务
- 【RL-TCPnet网络教程】第28章 RL-TCPnet之DNS应用
- TLS / SSL密码强化的建议
- saltstack 入门
- [二叉树建树]1119. Pre- and Post-order Traversals (30) (前序和后序遍历建立二叉树)