【问题标题】:PIC to PIC UART communication to Blink the LEDPIC 到 PIC UART 通信以闪烁 LED
【发布时间】:2017-01-23 01:13:33
【问题描述】:

我想通过 UART 将 PIC12F1572 的命令发送到另一个 PIC12F1572 并且我想发送一个函数,该函数将使从 PIC 上的 LED 闪烁。 我已经做了一些代码,但我有点困惑 有人能帮我一下吗? P.S-我正在使用 MPLAB X IDE v3.50

主机/发送器 PIC12F1572:

    #include <xc.h>
    #include "main.h"
    #include "config.h"
    #include "TYPEDEF_Definitions.h"
    #include "PIC_12_Timer0.h"
    #include "PIC_12_UART.h"
    #include "System_init.h"
    #include "Pin_manager.h"
    #include "LED.h"

    #define _XTAL_FREQ 16000000
void main()
{   
    SYSTEM_Initialize();
    //pin_config();
    LATA = 0x00;  
    UART_Init();                  //Initialize UART
  // StartLedBlinkingWithColor(color);

    TRISAbits.TRISA2  = 1; //make RA2 as input

    while (1)
    {   
      //LATAbits.LATA2 = 1;
      uint8_t Var = 0x61;
       //uint8_t Var = LATAbits.LATA2;

        if(TXSTAbits.TRMT == 1)
            {

                  UART_write(LED_Blink()); // is it possible?? or how it will be possible

                 // __delay_ms(1000);
            }

       LATAbits.LATA2 = 1;


    }
}

void LED_Blink()
{
       LATAbits.LATA2   = 1; 
       LATAbits.LATA5   = 1; 

       __delay_ms(1000);


       LATAbits.LATA2   = 0; 
       LATAbits.LATA5   = 0;


}

接收器/从器件 PIC12F1572:

#include <xc.h>
#include "config.h"
#include "PIC_12F_GPIO.h"
#include "Led.h"
#include "Interruptmanage.h"
#include "PIC_12F_UART.h"
#include "PIC_12F_TIMER0.h"
#include "main.h"

void main( void)
{
    uint8 data;   

    InterruptInit();
    TIMER0_Init();
    UART_Init();
    InitLeds(); // here I init GPIO pin..no prb here

    // SetLedOff();

    /*-------------R E C E I V E R*------------*/
    while (1) 
    {   // Endless loop

        if (UART_DataReady() )     // I get prob here ..
        { 
          PORTA = UART_ReadOneByte(); // read the received data, [how can I receive my Led_Blink() function??
          LATAbits.LATA2   = 1;      
          //LATAbits.LATA2 = data;

          //SendByteSerially(data);
        }
     }
}

【问题讨论】:

  • 这看起来可能是一个有趣的问题,但目前尚不清楚您具体要问什么。您期望什么,您的代码有何不同?查看How to Ask 页面以获得一些指导。
  • 好的。现在我想通过 UART 发送一个 led_blink() 函数,以便该函数将闪烁其他 PIC 上的 LED ..简而言之我想控制 LED 的闪烁..我编辑上面的代码:)

标签: pic uart led


【解决方案1】:

有几点需要考虑:

  • 您不能通过 UART“发送函数”。因此,LED_Blink() 函数需要在接收方。在执行任何其他操作之前,请验证该函数是否在接收器端工作,没有任何 UART 交互。
  • 接下来,您可以定义一个protocol,它基本上决定了您通过UART发送的哪些字节值应该触发接收方的LED_Blink()调用。例如,如果您决定使用字节值 42 来触发 LED 闪烁,您的发送方将调用 UART_write(42),而在接收方,您将得到如下内容:

    data = UART_ReadOneByte();
    if (data == 42) {
        LED_Blink();
    }
    

【讨论】:

  • 谢谢@FriendFX 我得到了这部分,现在我有新的疑问我必须发送一个帧命令让我们说格式为 ...RGBXXYYZZMAABBCCDD 其中 RGBis 固定值和 XXYYZZ 是 RGB hex vakue M 是 LED 的模式,如闪烁或发光,A B C 是发光强度的十六进制值,如何通过 UART 发送..如果您有任何解决方案或提示,我将不胜感激..:) 我为此编写了此功能void UART_WriteAnArrayOfBytes(uint8 *data, uint8 length) { uint8 i; for(i = 0; data[i] !='\0'; i++) { UART_WriteOneByte(data[i]); } }
  • 您不需要将 LED 连接到某种 D-A 或 A-D 上吗?
  • @Garryp,这将是一个新问题 - 您可以创建一个新问题并在此处使用链接写评论,所以我会看看。如果它为您解决了问题,请不要忘记mark my answer as "accepted" :-)
【解决方案2】:

所以为了从 UART 接收数据并将其保存在数组中并使用数据链接到 LED 我已经完成了这段代码:任何有兴趣的人都可以看看

 while (1)
 {

        if (EUSART_DataReady)
        {
            for (i = 0; i<FRAMESIZE; i++)   //#define FRAMESIZE 19
            {
                RX_Buffer[i] = EUSART_Read();
                if (RX_Buffer[i] == '\n')        //check'\n' in the end of frame
                   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);
          }
        }

  }  

【讨论】:

  • 干得好。注意RX_Buffer[i] = '\n';RX_Buffer[i+1] = '\0'; 行——如果你的RX_BufferFRAMESIZE 字节长,你实际上可以写超出缓冲区的末尾——这就是我们所说的@987654321 @.
  • 请给我点赞,然后我就不能再发布新的查询了...我的配额已完成..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多