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

串口解算出现问题

[复制链接]
406|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2023-1-11 23:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这是主程序:
#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的结果
请教各位大佬为什么这个解算不出来

使用特权

评论回复
沙发
jlyuan|  楼主 | 2023-1-11 23:54 | 只看该作者

使用特权

评论回复
板凳
jlyuan|  楼主 | 2023-1-11 23:58 | 只看该作者

使用特权

评论回复
地板
songqian17| | 2023-1-11 23:59 | 只看该作者
*p的值多少

使用特权

评论回复
5
pengf| | 2023-1-13 22:59 | 只看该作者
这么简单的问题仿真下就可以了,大概率你atoi这个函数用法有问题

使用特权

评论回复
6
renyaq| | 2023-1-13 23:00 | 只看该作者
要不就是你串口打印问题,你确认串口没问题的话 好好看下atoi这个函数的参数是什么形式吧

使用特权

评论回复
7
zhenykun| | 2023-1-13 23:01 | 只看该作者
把i和j的值都打印出来就完了

使用特权

评论回复
8
gongche| | 2023-1-13 23:03 | 只看该作者
观望一下,看看是怎么回事

使用特权

评论回复
9
songqian17| | 2023-1-13 23:05 | 只看该作者
用MCC配置出的代码对照一下看看是否有帮助

使用特权

评论回复
10
stly| | 2023-1-13 23:06 | 只看该作者
指针有问题。      

使用特权

评论回复
11
dengdc| | 2023-1-13 23:10 | 只看该作者
你是要数字转换吗?     

使用特权

评论回复
12
lizye| | 2023-1-13 23:12 | 只看该作者
你要实现的是什么功能   

使用特权

评论回复
13
zhaoxqi| | 2023-1-13 23:14 | 只看该作者
hex和字符串的区别吗   

使用特权

评论回复
14
zhanghqi| | 2023-1-13 23:16 | 只看该作者
要做数据加密吗      

使用特权

评论回复
15
tian111| | 2023-1-13 23:17 | 只看该作者
串口解算是什么意思     

使用特权

评论回复
16
renyaq| | 2023-1-13 23:20 | 只看该作者
为什么还需要atoi呢   

使用特权

评论回复
17
jiajs| | 2023-1-13 23:22 | 只看该作者
你获取指针的时候应该是*p吧   

使用特权

评论回复
18
wyjie| | 2023-1-13 23:24 | 只看该作者
转换的地址有问题。   

使用特权

评论回复
19
yinxiangh| | 2023-1-13 23:29 | 只看该作者
没有看懂楼主要实现什么功能   

使用特权

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

本版积分规则

880

主题

12030

帖子

4

粉丝