搜索

[PIC®/AVR® MCU] PIC单片机串口解算出现问题

[复制链接]
1302|7
手机看帖
扫描二维码
随时随地手机跟帖
45613513|  楼主 | 2021-9-13 15:00 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2021-9-16 11:01 编辑

这是主程序:
#include "p30f4011.h"
#include<stdlib.h>
#include<stdio.h>
#include "oled.h"
#define _CRT_SECURE_NO_WARNINGS
_FOSC(0XC307);//FCKSM = 11;时钟切换禁止 0111=带有16倍频PLL的XT??16倍频PLL使能的XT晶振模式 (晶振频率为4 MHz到10 MHz
_FWDT(0X0000);//关狗
_FBORPOR(0X3A3);//MCLREN禁止 欠压2.7V 上电延时64MS
_FGS(0X03);//
void UART_Init(void);
int check(char *p);
char        recdata;                        // 接收数据寄存器
//unsigned int check(unsigned int p)
void System_Init(void)//系统初始化
{
    OSCCON = 0x33e0;//主振荡器 新振荡器主振荡器 4MHz64分频 PLL锁定(使能)
        TRISB = 0x0000;
}
void UART_Init(void)
{
    U1MODE = 0x0000;//8位数据 无奇偶校验 1停止位
    U1MODEbits.UARTEN = 1;//使能UART
    U1STA = 0x0000;//状态和控制寄存器
    U1BRG = ((64000000/4/16)/9600)-1;//64MHz波特率9600(按照计算公式)
    IEC0bits.U1TXIE = 1;//发送中断允许
    IPC2bits.U1TXIP = 7;//发送中断优先级7
    U1STAbits.UTXEN = 1;// 使能发送
    IEC0bits.U1RXIE = 1;//接收中断允许
    IPC2bits.U1RXIP = 6;//接收中断优先级6
}
void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void)//接收中断
{
        while(U1STAbits.TRMT==0);      //当为0时,表明发送移位寄存器没空
        IFS0bits.U1TXIF=0;   
}
void __attribute__((__interrupt__, auto_psv)) _U1TXInterrupt(void)//发送中断
{
while(U1STAbits.URXDA==1)       //0 = 接收缓冲器为空
        {
        recdata=U1RXREG;               // 接收数据并存储   
    char *buf=&recdata;
        U1TXREG=check(buf);                                // 返送接收到的数据
        }
IFS0bits.U1RXIF=0;                                        // 清接收中断标志
}
int main()
{
    System_Init();
    UART_Init();
    while(1)
    {
     ;
    }
}
这是解算函数:
#include<stdlib.h>
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int check(char *p)
{
    int i,j;
    i=atoi(p);
    j=2*i+3;
    return j;
}
实现一个发1,经过check函数解算出来1*2+3=5的结果
请教各位大佬为什么这个解算不出来
75481613ef6ae99cea.png


94457613ef4d7c1c8d.png

使用特权

评论回复
45613513|  楼主 | 2021-9-13 15:05 | 显示全部楼层
自己顶一个

使用特权

评论回复
45613513|  楼主 | 2021-9-13 15:06 | 显示全部楼层
快绝望了,实在是想不出来咋回事

使用特权

评论回复
wooda| | 2021-9-14 08:46 | 显示全部楼层
*p的值多少

使用特权

评论回复
m564522634| | 2021-9-14 09:23 | 显示全部楼层
45613513 发表于 2021-9-13 15:06
快绝望了,实在是想不出来咋回事

这么简单的问题仿真下就可以了,大概率你atoi这个函数用法有问题,要不就是你串口打印问题,你确认串口没问题的话 好好看下atoi这个函数的参数是什么形式吧

使用特权

评论回复
一叶倾城wwq| | 2021-9-14 10:38 | 显示全部楼层
把i和j的值都打印出来就完了

使用特权

评论回复
littlelida| | 2021-9-14 14:25 | 显示全部楼层
观望一下,看看是怎么回事

使用特权

评论回复
pzsh| | 2021-9-16 11:01 | 显示全部楼层
用MCC配置出的代码对照一下看看是否有帮助

使用特权

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

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 火星国务卿 得到打赏 ¥430.00
  • 2 yanzhengxin1 得到打赏 ¥350.00
  • 3 qbwww 得到打赏 ¥245.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 yangjiaxu 得到打赏 ¥155.00
  • 8 两只袜子 得到打赏 ¥155.00
  • 9 elephant00 得到打赏 ¥150.00
  • 10 cr315 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表