使用PIC12、MPLAB和UART的嵌入式应用程序无输出

使用PIC12、MPLAB和UART的嵌入式应用程序无输出,c,embedded,hierarchy,uart,mplab,C,Embedded,Hierarchy,Uart,Mplab,我正在从事RGB LED项目,该项目由PIC12F1572控制。我使用的软件是带有HiTech C编译器的MPLAB IDE。计划是使用串行通信将LED RGB组合数据命令发送到PIC,并存储在一个变量中,该变量将使其执行LED闪烁和发光。我已经能够建立UART通信。每个函数或步骤I代码的语法都是正确的,如果我编译的话,可以在linux命令行终端上工作。。 如果我尝试在MPLAB中使用寄存器注入进行模拟,它就会失败。我也想在模拟中运行它(有人知道寄存器注入在MPLAB中实际是如何工作的吗?) 当

我正在从事RGB LED项目,该项目由PIC12F1572控制。我使用的软件是带有HiTech C编译器的MPLAB IDE。计划是使用串行通信将LED RGB组合数据命令发送到PIC,并存储在一个变量中,该变量将使其执行LED闪烁和发光。我已经能够建立UART通信。每个函数或步骤I代码的语法都是正确的,如果我编译的话,可以在linux命令行终端上工作。。 如果我尝试在MPLAB中使用寄存器注入进行模拟,它就会失败。我也想在模拟中运行它(有人知道寄存器注入在MPLAB中实际是如何工作的吗?) 当我尝试调试时,我共同面临的问题。它可以编译,但不起作用 这是我的密码: 任何关于这个问题的想法或暗示都将受到高度赞赏。 我个人认为,将代码[分层方式]放置可能是错误的 谢谢

#包括
#包括“mcc.h”
#包括“LED.h”
#包括“tmr0.h”
#包括“中断管理器.h”
无效设置颜色(uint16\u t R\u颜色、uint16\u t G\u颜色、uint16\u t B\u颜色);
真空总管(真空)
{
uint8_t数据,i,j;
uint16_t R_值、G_值、B_值;
uint8_t值;
uint8_t RX_缓冲区[帧大小]、RGB_数据[6]、十六进制数据[6];
//初始化设备
系统初始化();
中断_globalinterrupEnable();//启用全局中断
中断_peripheraldinterruptenable();//启用外围中断
而(1)
{
//EUSART_写入(0x61);
而(!RCIF)
{
data=EUSART_Read();//读取接收到的字符
对于(i=0;i>16;
//G_值=(数字和0xffff)>>8;
//B_值=(数字和0x0000FF);
R_值=(uint16_t)atoh(十六进制数据[0],十六进制数据[1]);
G_值=(uint16_t)atoh(十六进制数据[2],十六进制数据[3]);
B_值=(uint16_t)atoh(十六进制数据[4],十六进制数据[5]);
}
设置颜色(R_值、G_值、B_值);
}
}
无效设置颜色(uint16\u t R\u颜色、uint16\u t G\u颜色、uint16\u t B\u颜色)
{
如果(R_颜色==0xFF)
{
LATAbits.LATA2=1;
}
其他的
{
LATAbits.LATA2=0;
}
如果(G_颜色==0xFF)
{
LATAbits.LATA4=1;
}
其他的
{
LATAbits.LATA4=0;
}
如果(B_颜色==0xFF)
{
LATAbits.LATA5=1;
}
其他的
{
LATAbits.LATA5=0;
}
}

因此,在接收到UART帧并从存储数据中回响并使LED闪烁之前,我能够成功,而这正是我希望通过分层方式实现的主要步骤

#include "mcc_generated_files/mcc.h"
#include <stdlib.h>
#include <stdio.h>
#include "atoh.h"
#include "LED.h"
#define _XTAL_FREQ 16000000
#define FRAMESIZE 19

void main(void)
{
   uint8_t data,i,j,got_char;

   uint8_t R_value, G_value ,B_value;
   uint8_t value;
   uint8_t RX_Buffer[FRAMESIZE];
   uint8_t RGB_data[6] ,HEX_data[6];

    // initialize the device
    SYSTEM_Initialize();
    INTERRUPT_GlobalInterruptEnable();                       // Enable the Global Interrupts
    INTERRUPT_PeripheralInterruptEnable();                   // Enable the Peripheral Interrupts

  while (1)
 {

        if (EUSART_DataReady)
        {
            for (i = 0; i<FRAMESIZE; i++)
            {
                RX_Buffer[i] = EUSART_Read();
                if (RX_Buffer[i] == '\n')
                   break;
            }

            RX_Buffer[i] = '\n';                        //append '\n' at the end of stoaring array for detection of frame
            RX_Buffer[i+1] = '\0';                      // End of an array
            EUSART_WriteAnArrayOfBytes(RX_Buffer);


        if(RX_Buffer[0]=='R' && RX_Buffer[FRAMESIZE-2] == '\n')   //check for correct frame
          {

            LATAbits.LATA2 = 1;
            __delay_ms(2000);
            LATAbits.LATA2 = 0;
            __delay_ms(1000);
          }
        }

  }       
#包括“mcc_生成的文件/mcc.h”
#包括
#包括
#包括“atoh.h”
#包括“LED.h”
#定义频率16000000
#定义帧大小19
真空总管(真空)
{
uint8_t数据,i,j,got_char;
uint8_t R_值、G_值、B_值;
uint8_t值;
uint8_t RX_缓冲区[帧大小];
uint8_t RGB_数据[6],十六进制数据[6];
//初始化设备
系统初始化();
中断_globalinterrupEnable();//启用全局中断
中断_peripheraldinterruptenable();//启用外围中断
而(1)
{
if(EUSART_数据就绪)
{

对于(i=0;i所以,直到接收到UART帧并从存储数据返回并使LED闪烁为止,我能够成功,这就是我希望通过分层方式进行的主要步骤

#include "mcc_generated_files/mcc.h"
#include <stdlib.h>
#include <stdio.h>
#include "atoh.h"
#include "LED.h"
#define _XTAL_FREQ 16000000
#define FRAMESIZE 19

void main(void)
{
   uint8_t data,i,j,got_char;

   uint8_t R_value, G_value ,B_value;
   uint8_t value;
   uint8_t RX_Buffer[FRAMESIZE];
   uint8_t RGB_data[6] ,HEX_data[6];

    // initialize the device
    SYSTEM_Initialize();
    INTERRUPT_GlobalInterruptEnable();                       // Enable the Global Interrupts
    INTERRUPT_PeripheralInterruptEnable();                   // Enable the Peripheral Interrupts

  while (1)
 {

        if (EUSART_DataReady)
        {
            for (i = 0; i<FRAMESIZE; i++)
            {
                RX_Buffer[i] = EUSART_Read();
                if (RX_Buffer[i] == '\n')
                   break;
            }

            RX_Buffer[i] = '\n';                        //append '\n' at the end of stoaring array for detection of frame
            RX_Buffer[i+1] = '\0';                      // End of an array
            EUSART_WriteAnArrayOfBytes(RX_Buffer);


        if(RX_Buffer[0]=='R' && RX_Buffer[FRAMESIZE-2] == '\n')   //check for correct frame
          {

            LATAbits.LATA2 = 1;
            __delay_ms(2000);
            LATAbits.LATA2 = 0;
            __delay_ms(1000);
          }
        }

  }       
#包括“mcc_生成的文件/mcc.h”
#包括
#包括
#包括“atoh.h”
#包括“LED.h”
#定义频率16000000
#定义帧大小19
真空总管(真空)
{
uint8_t数据,i,j,got_char;
uint8_t R_值、G_值、B_值;
uint8_t值;
uint8_t RX_缓冲区[帧大小];
uint8_t RGB_数据[6],十六进制数据[6];
//初始化设备
系统初始化();
中断_globalinterrupEnable();//启用全局中断
中断_peripheraldinterruptenable();//启用外围中断
而(1)
{
if(EUSART_数据就绪)
{

对于(i=0;我不工作…..您能详细说明一下吗?
uint8_t RX_Buffer[]、RGB_data[]、HEX_data[];
??您声明了没有大小的数组…..目标是通过我从UART接收的数据点亮LED。如果我对每个任务执行单独的模块,就说“UART”->它可以工作..我也可以接收数据并回显到串行终端..将ASCII转换为十六进制工作,LED prog已测试..我认为一切正常,当我将代码放在一起..UART停止,未接收数据..(之前已测试系统初始化功能)已更正..应该是这样->uint8_t RX_Buffer[FRAMESIZE],RGB_数据[6],十六进制数据[6];首先,您没有初始化颜色变量,这是一个错误。不起作用……您能详细说明一下吗?
uint8_t RX_缓冲区[],RGB_数据[],十六进制数据[]
…您声明了无大小的阵列…目标是通过我从UART接收的数据使LED发光。如果我对每个任务执行单独的模块,就说“UART”->它工作..我可以接收数据并回显到串行终端..转换ASCII到十六进制工作,LED prog已测试..我认为一切正常,当我将代码放在一起..UART停止,没有接收数据..(系统初始化功能I