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

[复制链接]
3241|17
 楼主| 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的结果
请教各位大佬为什么这个解算不出来



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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配置出的代码对照一下看看是否有帮助
jkl21 发表于 2021-10-5 10:23 | 显示全部楼层
指针有问题。      
iyoum 发表于 2021-10-5 10:23 | 显示全部楼层
你是要数字转换吗?     
uytyu 发表于 2021-10-5 10:23 | 显示全部楼层
你要实现的是什么功能   
myiclife 发表于 2021-10-5 10:23 | 显示全部楼层
hex和字符串的区别吗   
touser 发表于 2021-10-5 10:24 | 显示全部楼层
要做数据加密吗      
pklong 发表于 2021-10-5 10:24 | 显示全部楼层
串口解算是什么意思     
htmlme 发表于 2021-10-5 10:25 | 显示全部楼层
为什么还需要atoi呢   
yujielun 发表于 2021-10-5 10:25 | 显示全部楼层
你获取指针的时候应该是*p吧   
typeof 发表于 2021-10-5 10:25 | 显示全部楼层
转换的地址有问题。   
usysm 发表于 2021-10-5 10:25 | 显示全部楼层
没有看懂楼主要实现什么功能   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部