Я работаю над проектом RGB LED, и это контролируется PIC12F1572. Программное обеспечение, которое я использую, - это MPLAB IDE с компилятором HiTech C. План состоит в том, чтобы использовать последовательную связь для отправки командных данных команды LED RGB в ПИК, которые будут храниться в переменной, которая заставит его выполнять мигание светодиодов и светится. Я смог установить связь UART. Любая функция или код кода I являются правильными по синтаксису и работает на терминале командной строки linux, если я компилирую .. И это не удается, если я пытаюсь имитировать использование регистров в MPLAB. Мне тоже нужно было запустить его в симуляции (кто-нибудь знает, как впрыска регистров работает в MPLAB?) Проблема, с которой я сталкиваюсь, когда пытаюсь отлаживать. он компилируется, но не работает вот мой код: Любая идея или намек на проблему будут высоко оценены. Я лично плату, что размещение кода [иерархический путь] может быть неправильным Спасибо!Нет выхода для встроенного приложения с PIC12, MPLAB и UART
#include <xc.h>
#include "mcc.h"
#include "LED.h"
#include "tmr0.h"
#include "interrupt_manager.h"
void SetLedColor(uint16_t R_color, uint16_t G_color, uint16_t B_color);
void main(void)
{
uint8_t data, i, j;
uint16_t R_value, G_value, B_value;
uint8_t value;
uint8_t RX_Buffer[FRAMESIZE] ,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)
{
// EUSART_Write(0x61);
while (!RCIF)
{
data = EUSART_Read(); // Read received character
for (i = 0; i < FRAMESIZE; i++)
{
RX_Buffer[i] = data;
}
EUSART_Write(data);
}
//check if any data is received
for (j = 0; j = 5; j++) // get the RGB value in the separate array
{
RGB_data[j] = RX_Buffer[j + 3];
HEX_data[value] = RGB_data[j]/16;
}
if (RX_Buffer[0] == 'R' && RX_Buffer[FRAMESIZE - 1] == '\n')
{
//ASCII to HEX separate values
// uint32_t number = (uint32_t)strtol(HEX_data, NULL, 16);
// R_value = number >>16;
// G_value = (number & 0xffff) >> 8;
// B_value = (number & 0x0000FF);
R_value = (uint16_t) atoh(HEX_data[0], HEX_data[1]);
G_value = (uint16_t) atoh(HEX_data[2], HEX_data[3]);
B_value = (uint16_t) atoh(HEX_data[4], HEX_data[5]);
}
SetLedColor(R_value, G_value, B_value);
}
}
void SetLedColor(uint16_t R_color, uint16_t G_color, uint16_t B_color)
{
if (R_color == 0xFF)
{
LATAbits.LATA2 = 1;
}
else
{
LATAbits.LATA2 = 0;
}
if (G_color == 0xFF)
{
LATAbits.LATA4 = 1;
}
else
{
LATAbits.LATA4 = 0;
}
if (B_color == 0xFF)
{
LATAbits.LATA5 = 1;
}
else
{
LATAbits.LATA5 = 0;
}
}
Не работайте ... Не могли бы вы немного разобраться? – LPs
'uint8_t RX_Buffer [], RGB_data [], HEX_data [];' ... ?????? Вы объявили массивы без размера ..... – LPs
Цель состоит в том, чтобы отображать светодиод по данным, которые я получаю от UART .. и если я делаю отдельные модули каждой задачи, скажем, «UART» -> он работает .. Я могу получить данные и echod обратно к серийному терминалу тоже .. Конверсия ASCII в HEX работает, проверяется светодиодная прога. Все, что я считаю в порядке, и когда я помещаю код вместе. Ограничения UART, не получая данные .. (функция инициализации системы проверена ранее) – Garryp