打印
[PIC®/AVR®/dsPIC®产品]

PIC单片机串口解算出现问题

[复制链接]
2983|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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的结果
请教各位大佬为什么这个解算不出来



94457613ef4d7c1c8d.png (31.85 KB )

94457613ef4d7c1c8d.png

使用特权

评论回复
沙发
45613513|  楼主 | 2021-9-13 15:05 | 只看该作者
自己顶一个

使用特权

评论回复
板凳
45613513|  楼主 | 2021-9-13 15:06 | 只看该作者
快绝望了,实在是想不出来咋回事

使用特权

评论回复
地板
wooda| | 2021-9-14 08:46 | 只看该作者
*p的值多少

使用特权

评论回复
5
m564522634| | 2021-9-14 09:23 | 只看该作者
45613513 发表于 2021-9-13 15:06
快绝望了,实在是想不出来咋回事

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

使用特权

评论回复
6
一叶倾城wwq| | 2021-9-14 10:38 | 只看该作者
把i和j的值都打印出来就完了

使用特权

评论回复
7
littlelida| | 2021-9-14 14:25 | 只看该作者
观望一下,看看是怎么回事

使用特权

评论回复
8
pzsh| | 2021-9-16 11:01 | 只看该作者
用MCC配置出的代码对照一下看看是否有帮助

使用特权

评论回复
9
jkl21| | 2021-10-5 10:23 | 只看该作者
指针有问题。      

使用特权

评论回复
10
iyoum| | 2021-10-5 10:23 | 只看该作者
你是要数字转换吗?     

使用特权

评论回复
11
uytyu| | 2021-10-5 10:23 | 只看该作者
你要实现的是什么功能   

使用特权

评论回复
12
myiclife| | 2021-10-5 10:23 | 只看该作者
hex和字符串的区别吗   

使用特权

评论回复
13
touser| | 2021-10-5 10:24 | 只看该作者
要做数据加密吗      

使用特权

评论回复
14
pklong| | 2021-10-5 10:24 | 只看该作者
串口解算是什么意思     

使用特权

评论回复
15
htmlme| | 2021-10-5 10:25 | 只看该作者
为什么还需要atoi呢   

使用特权

评论回复
16
yujielun| | 2021-10-5 10:25 | 只看该作者
你获取指针的时候应该是*p吧   

使用特权

评论回复
17
typeof| | 2021-10-5 10:25 | 只看该作者
转换的地址有问题。   

使用特权

评论回复
18
usysm| | 2021-10-5 10:25 | 只看该作者
没有看懂楼主要实现什么功能   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝