Microchip
直播中

张婷婷

8年用户 239经验值
私信 关注
[问答]

如何使用MPLAB-X编写代码

你好,我正在使用MPLAB-X编写代码,该代码将在16位和8位PicsClock频率上使用……当使用内部时钟时……有没有办法在软件中确定运行时的时钟频率?是否有一个或MOREC运行时变量、宏或任何C代码会告诉你时钟频率?为什么我可以基于时钟设置uart速度?有没有Uart init代码可以尝试根据时钟设置所需的速度?如果没有,那么有什么快速的方式来告诉配置位?丹

回帖(12)

张娜

2020-5-13 11:28:40
基本上,这是一个很长的问题,不是:所有的东西都与相同的总时钟有关,所以你不能识别它。除非你能够使用,比如说,50Hz输入或其他外部时钟。也许甚至32768 XTAL用于实时时钟…
举报

王玉华

2020-5-13 11:43:41
如果您知道正在使用内部时钟,那么在汇编器中,至少(我假设在C中)您可以读取OSCCON位,并且(知道问题的MCU*)确定Fosc。从那里您可以通过循环遍历各种波特率生成器控制位来寻找最小的错误。我在汇编宏中完成了这项工作,而且它运行良好(它在汇编时完成,所以运行时成本为零)。我只是用期望的波特率调用宏,它在“设置”符号中设置波特率发生器控制位。宏的参数是Fosc、波特率和容限(以允许宏失败)。*给定MCU的数量,从OSCCON位上确定Fosc是不实际的。我总是将Finst设置为一个符号,所以我不会面临确定Fosc的问题——对于我使用的MCU,它总是4XFinst。免责声明:我听说过这种新奇的东西叫做C,但是我从来没有在PIC中使用过。——如果你不知道你正在使用内部时钟,那么我同意Dario。我不知道如何准确地确定FoSC来设定波特率。例如,WDT容忍度太大而无法使用。
举报

tijing忽忽

2020-5-13 11:49:25
许多UART模块都有一个自动波特率模式,也许可以帮助?它需要从传输数据到USAT的任何特定的编程和合作。
举报

李天竹

2020-5-13 11:56:13
如果您定义_XTAL_FREQ,那么您就知道频率(并且它在_u._ms宏中使用)。这假设时钟没有改变。如果它改变,您可以读取时钟寄存器,这是PIC特定的。但是这只是在一定程度上起作用,不会告诉你晶体有多快。在许多PIC上,你可以通过比较低功率振荡器来测量,但是这也是PIC特有的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分