1

我正在尝试从 pic16f887 传输一个字符“a”并在终端上查看结果,但我得到的只是一个问号(使用 USART 终端),或者什么都没有(腻子,超级终端)。我对 C 不是很好,因为我只是一个初学者,但我真的需要让它为我的学校项目工作。我尝试了很多我在互联网上找到的代码,我确实设法收到了来自终端的字符,比如说,打开一个 LED,但我无法让它发送任何东西。我有一种强烈的感觉,它在代码的某个地方。我使用 MPLAB 和 Hi-Tech C 编译器来构建项目。这里是:

unsigned char cUART_char;
unsigned char cUART_data_flg;

void init_uart(void);
void UART_putc(unsigned char c);
void InterruptHandlerLow ();

void main()
{

TRISA = 0;
PORTA = 0;
TRISB = 0;
PORTB = 0;
TRISD = 0;
PORTD = 0;
ANSELH = 0;




    init_uart(); 

    while (1) 
    {
        if (cUART_data_flg==1)
        {
            UART_putc(cUART_char); 
            cUART_data_flg=0; 
        }
    }

}

void InterruptHandlerLow ()
{
  if (RCIF==1)//is interrupt occured by EUSART receive?, 
                        //then RCREG is full we have new data (cleared when RCREG is read)
  {  
    if(RCSTA&0x06) //more efficient way than following commented method to check for reception error 
    //if(RCSTAbits.FERR==1 || RCSTAbits.OERR==1 )
    {
      CREN=0;    //Overrun error (can be cleared by clearing bit CREN)
      cUART_char=RCREG;    //clear Framing error 
      CREN=1;
    }
    else
    {
       cUART_char = RCREG; // read new data into variable
       cUART_data_flg = 1; // new data received. so enable flg
    }
  }
}

void init_uart(void) // init UART module for 9600bps boud, start bit 1, stopbit 1, parity NONE
{
      // init data receive flag to zero (no data)
    TRISC7=1; //Make UART RX pin input
    TRISC6=0; //Make UART TX pin output
    SYNC = 0;   // enables for asynchronous EUART
    SPEN = 1;   // enables EUSART and sets TX (RC6) as output; ANSEL must be cleared if shared with analog I/O
    CREN = 1;

    TX9 = 0;    // 8bit mode
    RX9 = 0;

    TXEN = 1;    // enables Transmitter

    BRGH = 1;   // baud rate select
    BRG16 = 0;

    SPBRG = 25; //baud rate select  9600@4Mhz
    SPBRGH = 0;

    RCIE=1;     // receive interrupt enable
    GIE=1;      // global interrupt enable
    PEIE=1 ;    // Peripheral Interrupt Enable bit
}

void UART_putc(unsigned char c)
{
  TXEN=0;// disable transmission
  TXREG=0x61;            // load txreg with data
  TXEN=1;    // enable transmission
  while(TRMT==0) // wait here till transmit complete
  {

  }
}

请如果有人在此代码中看到问题(或更多问题),请帮我解决这个问题;)哦,当按下连接到 TX 引脚(RC6)的按钮时,我正在传输..

4

0 回答 0