19773|43

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PIC16F1823程序例子ADC+UART [复制链接]

 
PIC16F1823程序例子ADC+UART,没钱的加我QQ。传给你。

[ 本帖最后由 QQ175744595 于 2012-2-3 10:52 编辑 ]

ad+uart test.rar

59.58 KB, 下载次数: 599

售价: 1 分芯积分  [记录]

最新回复

从你的程序来看,EUSART初始化代码和配置都看起来是正确的,但仍有一些可能导致串口无法使用的问题。以下是一些可能的原因和建议: 波特率计算错误: 你使用的是4MHz的内部时钟,并设置了波特率为9600。根据代码,SPBRG = 25。波特率计算公式为: SPBRG=FOSC16×BaudRate−1SPBRG = \frac{F_{OSC}}{16 \times BaudRate} - 1SPBRG=16×BaudRateFOSC​​−1 对于4MHz时钟和9600波特率,SPBRG 应该是 25。这个值是正确的,但建议你使用更高的波特率,因为4MHz的时钟可能会导致低速通信时出现不稳定性。 TX/RX引脚配置: 请确认你是否正确连接了物理引脚,并确保它们与代码中的引脚配置一致。如果你使用的引脚是 RC6 (TX) 和 RC7 (RX),那么 TRISC6 和 TRISC7 的配置是正确的。 内部时钟配置: 确认你是否正确设置了内部时钟的频率。你可以在初始化时添加以下代码以确保使用4MHz的内部时钟: c 复制代码 OSCCONbits.IRCF = 0b1101; // 设置内部时钟为4MHz EUSART配置: 确保启用了所有必要的寄存器配置。例如,TXSTAbits.SYNC = 0 配置为异步模式是正确的,但你也可以检查是否需要调整 TXSTAbits.BRGH 设置。 硬件问题: 确保硬件连接正确,并且没有短路或接触不良的情况。如果可能,可以使用示波器或逻辑分析仪检查TX引脚上的信号输出是否符合预期。 错误捕获: 添加代码检查是否有错误发生,如 OERR (溢出错误) 或 FERR (帧错误)。 c 复制代码 if (RCSTAbits.OERR) { RCSTAbits.CREN = 0; // 清除溢出错误 RCSTAbits.CREN = 1; // 重新启用连续接收 } 你可以根据以上建议逐步排查问题。如果你有其他更详细的硬件配置或情况,请提供更多信息,我可以帮助进一步诊断问题。   4o   You said: 这几个配置什么关系: TXSTAbits.SYNC = 0; // 配置为异步模式 TXSTAbits.BRGH = 0; // 低速波特率 RCSTAbits.SPEN = 1; // 启用串口 TXSTAbits.TXEN = 1; // 启用发送 RCSTAbits.CREN = 1; // 启用连续接收   ChatGPT said: ChatGPT 这几个配置寄存器的设置关系到PIC16F1719单片机的EUSART(增强型USART)模块的工作模式和功能。以下是每个配置的详细说明和它们之间的关系: TXSTAbits.SYNC = 0; 配置为异步模式:SYNC位用于选择EUSART模块的工作模式。设置为0表示EUSART工作在异步模式下,这意味着通信双方(发送方和接收方)不需要共享同一个时钟信号,而是通过设置相同的波特率来进行数据传输。通常,异步模式适用于标准的串口通信。 TXSTAbits.BRGH = 0; 低速波特率:BRGH位用于选择波特率生成器的高低速模式。设置为0表示使用低速波特率,即16倍波特率时钟(BRGH = 0);设置为1表示使用高速波特率,即4倍波特率时钟(BRGH = 1)。低速模式下,波特率的最大值较低,但波特率控制较稳定。 RCSTAbits.SPEN = 1; 启用串口:SPEN位用于启用串口模块。设置为1表示启用EUSART模块,使得TX和RX引脚作为串口的发送和接收引脚被启用。如果SPEN为0,串口通信功能将被禁用。 TXSTAbits.TXEN = 1; 启用发送:TXEN位用于启用EUSART的发送功能。设置为1表示启用发送功能,使得数据可以从TX引脚发送出去。发送数据时需要此位为1。 RCSTAbits.CREN = 1; 启用连续接收:CREN位用于启用EUSART的接收功能。设置为1表示启用连续接收模式,允许接收器连续接收数据。如果CREN为0,接收功能将被禁用。通常用于需要持续接收数据的场合。 关系与作用 模式选择:TXSTAbits.SYNC设置为0将EUSART配置为异步模式,这是最常用的串口通信模式,适合标准的串口协议。 波特率设置:TXSTAbits.BRGH影响波特率生成器的时钟选择。低速模式 (BRGH = 0) 允许较低的波特率范围,适合稳定的通信;而高速模式 (BRGH = 1) 允许较高的波特率范围,适合需要更快数据传输的应用。 串口启用:RCSTAbits.SPEN必须设置为1才能启用串口通信功能,使得数据可以从TX/RX引脚发送和接收。 发送和接收功能:TXSTAbits.TXEN启用发送功能,而RCSTAbits.CREN启用接收功能。二者分别控制数据的发送和接收,如果未启用相应的功能,则该功能无法正常工作。 这几个配置项共同作用,确保EUSART模块能够按照设定的波特率以异步模式进行双向通信。确保这些配置正确无误,对于EUSART模块的正常工作至关重要。   4o You said: 是不是因为我没写串口接收中断   ChatGPT said: ChatGPT 是的,串口接收中断可能是你遇到问题的原因之一。如果你的程序需要及时处理从串口接收到的数据,而你没有使用接收中断,那么可能会错过接收到的数据,特别是在高速通信或其他任务较多的情况下。 为什么使用串口接收中断? 当使用接收中断时,EUSART模块在接收到数据后会立即触发中断,无需你手动轮询接收寄存器。这种方式确保了数据不会因为处理延迟而丢失,是一种更可靠的数据接收方式,尤其在实时系统中更为重要。 如何启用串口接收中断 要启用串口接收中断,你需要进行以下步骤: 启用全局和外设中断: c 复制代码 INTCONbits.GIE = 1; // 启用全局中断 INTCONbits.PEIE = 1; // 启用外设中断 启用EUSART接收中断: c 复制代码 PIE1bits.RCIE = 1; // 启用接收中断 编写中断服务程序 (ISR): 在中断服务程序中处理接收到的数据。一般来说,你会在中断中读取RCREG寄存器来获得接收到的数据: c 复制代码 void __interrupt() ISR() { if (PIR1bits.RCIF) { // 检查接收中断标志 char received_char = RCREG; // 读取接收到的数据 // 处理接收到的数据,例如存入缓冲区 } } 处理接收错误: 在中断服务程序中,还需要检查接收溢出错误(OERR)和帧错误(FERR)。如果发生错误,需要清除它们: c 复制代码 if (RCSTAbits.OERR) { RCSTAbits.CREN = 0; // 清除溢出错误 RCSTAbits.CREN = 1; // 重新启用接收 } 示例代码整合 以下是如何整合中断的示例代码片段: c 复制代码 void main(void) { EUSART_Init(); // 初始化EUSART // 启用中断 INTCONbits.GIE = 1; // 启用全局中断 INTCONbits.PEIE = 1; // 启用外设中断 PIE1bits.RCIE = 1; // 启用接收中断 while (1) { // 你可以在这里处理其他任务 } } // 中断服务程序 void __interrupt() ISR() { if (PIR1bits.RCIF) { // 检查接收中断标志 char received_char = RCREG; // 读取接收到的数据 EUSART_SendChar(received_char); // Echo 回显收到的数据 // 处理接收错误 if (RCSTAbits.OERR) { RCSTAbits.CREN = 0; // 清除溢出错误 RCSTAbits.CREN = 1; // 重新启用接收 } } } 通过启用接收中断,你可以更可靠地处理串口通信,避免数据丢失问题。如果你希望程序能即时响应接收到的数据,建议使用这种方式。   4o       “sda”工作空间聊天未用于   详情 回复 发表于 2024-8-24 16:35
点赞(1) 关注
 

回复
举报

30

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

回复 楼主 QQ175744595 的帖子

很好的资料,谢谢楼主啊!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感謝分享。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
很好的东西,感谢分享……

点评

谢谢楼主啊  详情 回复 发表于 2014-9-27 17:53
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 

很好的东西,感谢分享……

很好的东西,感谢分享……
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

6
 
谢谢分享
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
多谢共享,学习一下
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

8
 
多谢共享,学习一下
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

9
 
多谢分享
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

10
 
感謝樓主分享!
 
 
 

回复

674

帖子

5

TA的资源

纯净的硅(初级)

11
 
需要了,谢谢
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

12
 
很好的东西,感谢分享……
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

13
 
没钱了,咋办呀
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

14
 
很好的东西,感谢分享,但是我下不了呢
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
谢谢,好的。
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

16
 
谢谢
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

17
 
···
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

18
 
有点水
 
 
 

回复

68

帖子

2

TA的资源

一粒金砂(中级)

19
 
冰冰热热 发表于 2012-8-20 12:57
很好的东西,感谢分享……

谢谢楼主啊
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

20
 
咋感觉那么古老呢,还是平台问题
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表