本帖最后由 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的结果
请教各位大佬为什么这个解算不出来
|