51单片机使用串口printf
#define BIT(x) ((unsigned int)((unsigned int)1<<x))
串口初始化
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ void Uart0_Init(unsigned int baud) { unsigned long tmp; #if 0 P2CR &= ~BIT(0); //Input Mode P2PCR |= BIT(0); //Enable pull-up resistor P2 |= BIT(0); P2CR |= BIT(1); //Output Mode P2PCR &= ~(BIT(1)); //Disable pull-up resistor P2 |= BIT(1); #endif /* Config Uart0:Mode 1, 8-bits asynchronous. */ SCON = 0x50; PCON |=0x80; //Double baud rate tmp = 16000000/16/baud; //16000000UL*2/2/16/baud; tmp = 65536 - tmp; RCLK = 0; //T4 create rxd baud rate TCLK = 0; //T4 create txd baud rate _push_(INSCON); Select_Bank1(); T4CLKS = 0; //T4 Clock select = Sysclk = 16MHz; T4PS1 = 0; //T4 Prescaler = 1/1; T4PS0 = 0; T4M1 = 0; //T4 mode select bits = 01, T4 as Baud rate generator. T4M0 = 1; TL4 = (unsigned char)tmp; TH4 = (unsigned char)(tmp>>8); TR4 = 1; Select_Bank0(); _pop_(INSCON); REN = 1; //Enable Receive //ES0 = 1; //Enable Uart0 Interrupt //TI = 1; //printf need }
printf重映射
/*----------------------------------------------------------------------------*/ //printf call /*----------------------------------------------------------------------------*/ char putchar(char ch) { //ES=0; //Disable Uart0 Interrupt TI = 0; SBUF = (unsigned char)ch; while (!TI); TI = 0; //ES=1; //Enable Uart0 Interrupt return (ch); }