pic 18F46k80 EUART



我正在尝试通过EUSART将数据传输到计算机。我已经设置了所有配置位,但串行通信仍然无法正常工作。我在 PC 中只收到错误的数据。这是我设置uart的代码(我正在使用mplab编译器XC8):

TRISC6 = 1; \ set in datasheet
TRISC7 = 1; \ set in datasheet
SPBRG1=25;  \ 4 MHz oscilator
SPBRGH1=0;  
TXSTA1bits.BRGH = 1;  \ high speed uart
BAUDCON1bits.BRG16 = 0; \ 8 bit data
TXSTA1bits.TX9 = 0;    
TXSTA1bits.SYNC = 0;  \ asynchronus mode
RCSTA1bits.SPEN = 1;  \ enable serial port
INTCONbits.GIE = 0;  \ set off interrupt
TXSTA1bits.TXEN = 1; \  transmitter is enabled
while (1) {
    TXSTA1bits.TXEN = 1;
    //UART_Write_Text("Bye pic n");
       TXREG = 76;
    __delay_ms(100);
    TXSTA1bits.TXEN = 0;
}

感谢您的帮助

在加载要发送的下一个字节之前,发送缓冲区寄存器必须为空。来自数据表:"一旦 TXREGx 寄存器将数据传输到 TSR 寄存器(在一个 TCY 中发生),TXREGx 寄存器为空,并且 TXxIF 标志位被设置。

看起来目标是以9600波特的延迟重复发送"L",以允许主机处理接收到的数据。因此,将最后一行更改为:

TXSTA1bits.TXEN = 1;
while(1){
  while (PIR1bits.TX1IF == 0);
  TXREG = 76;
  __delay_ms(100); 
}
这是我

带有配置位的代码,我的外部振荡器用于 100% 4 MHz,我没有示波器:(

#include <xc.h>
#include <String.h>
#include <pic18f46k80.h>
#define _XTAL_FREQ 4000000
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1L
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1L
#pragma config RETEN = OFF      // VREG Sleep Enable bit (Ultra low-power regulator is Disabled (Controlled by REGSLP bit))
#pragma config INTOSCSEL = LOW  // LF-INTOSC Low-power Enable bit (LF-INTOSC in Low-power mode during Sleep)
#pragma config SOSCSEL = DIG    // SOSC Power Selection and mode Configuration bits (Digital (SCLKI) mode)
#pragma config XINST = OFF       // Extended Instruction Set (Enabled)
// CONFIG1H
#pragma config FOSC = XT       // Oscillator (XT oscillator)
#pragma config PLLCFG = OFF     // PLL x4 Enable bit (Disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor (Disabled)
#pragma config IESO = OFF       // Internal External Oscillator Switch Over Mode (Disabled)
// CONFIG2L
#pragma config PWRTEN = OFF     // Power Up Timer (Disabled)
#pragma config BOREN = SBORDIS  // Brown Out Detect (Enabled in hardware, SBOREN disabled)
#pragma config BORV = 3         // Brown-out Reset Voltage bits (1.8V)
#pragma config BORPWR = ZPBORMV // BORMV Power level (ZPBORMV instead of BORMV is selected)
// CONFIG2H
#pragma config WDTEN = SWDTDIS  // Watchdog Timer (WDT enabled in hardware; SWDTEN bit disabled)
#pragma config WDTPS = 1048576  // Watchdog Postscaler (1:1048576)
// CONFIG3H                
#pragma config CANMX = PORTB    // ECAN Mux bit (ECAN TX and RX pins are located on RB2 and RB3, respectively)
#pragma config MSSPMSK = MSK7   // MSSP address masking (7 Bit address masking mode)
#pragma config MCLRE = ON       // Master Clear Enable (MCLR Enabled, RE3 Disabled)
// CONFIG4L
#pragma config STVREN = ON      // Stack Overflow Reset (Enabled)
#pragma config BBSIZ = BB2K     // Boot Block Size (2K word Boot Block size)
// CONFIG5L
#pragma config CP0 = OFF        // Code Protect 00800-03FFF (Disabled)
#pragma config CP1 = OFF        // Code Protect 04000-07FFF (Disabled)
#pragma config CP2 = OFF        // Code Protect 08000-0BFFF (Disabled)
#pragma config CP3 = OFF        // Code Protect 0C000-0FFFF (Disabled)
// CONFIG5H
#pragma config CPB = OFF        // Code Protect Boot (Disabled)
#pragma config CPD = OFF        // Data EE Read Protect (Disabled)
// CONFIG6L
#pragma config WRT0 = OFF       // Table Write Protect 00800-03FFF (Disabled)
#pragma config WRT1 = OFF       // Table Write Protect 04000-07FFF (Disabled)
#pragma config WRT2 = OFF       // Table Write Protect 08000-0BFFF (Disabled)
#pragma config WRT3 = OFF       // Table Write Protect 0C000-0FFFF (Disabled)
// CONFIG6H
#pragma config WRTC = OFF       // Config. Write Protect (Disabled)
#pragma config WRTB = OFF       // Table Write Protect Boot (Disabled)
#pragma config WRTD = OFF       // Data EE Write Protect (Disabled)
// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protect 00800-03FFF (Disabled)
#pragma config EBTR1 = OFF      // Table Read Protect 04000-07FFF (Disabled)
#pragma config EBTR2 = OFF      // Table Read Protect 08000-0BFFF (Disabled)
#pragma config EBTR3 = OFF      // Table Read Protect 0C000-0FFFF (Disabled)
// CONFIG7H
#pragma config EBTRB = OFF      // Table Read Protect Boot (Disabled)

void main(void) {
    TRISD = 0;
    ANCON0 = 0;
    ANCON1 = 0;
    TRISA = 0b00001111;
    TRISE = 0b00000000;
    TRISB = 0;

TRISCbits.TRISC6 = 1; // set in datasheet
TRISCbits.TRISC7 = 1; // set in datasheet
SPBRG1=25;  // 4 MHz oscilator
SPBRGH1=0;
TXSTA1bits.BRGH = 1;  // high speed uart
BAUDCON1bits.BRG16 = 0;// 8 bit data
TXSTA1bits.TX9 = 0;
TXSTA1bits.SYNC = 0;  // asynchronus mode
RCSTA1bits.SPEN = 1;  // enable serial port
INTCONbits.GIE = 0;  // set off interrupt
TXSTA1bits.TXEN = 1; //  transmitter is enabled
    while (1) {
      while (PIR1bits.TX1IF == 0);
     TXREG = 76;
      __delay_ms(100);
    }

    return;
}

相关内容

  • 没有找到相关文章

最新更新