Putchar in Keil C, take 8051 as an instance, putcharkeil

Source: Internet
Author: User

Putchar in Keil C, take 8051 as an instance, putcharkeil

In Keil C, it is necessary to implement char putchar (char c), or the powerful function printf wocould not work.

We shoshould notice in here: new line command for serial output be "\ r \ n" (line feed: LF, 0x0a + carriage return: CR, 0x0d ), not only "\ n" in Keil C.


I do not want to write too much tedious word in here, below is my putchar code for 8051, use timer 1 as interrupt:





 
#define FCLK           22118400UL  #define BAUDRATE        9600UL            /* ref http://csserver.evansville.edu/~blandfor/EE354/SFRegisters.pdf */void InitUART(void){ EA = 0;  TMOD &= 0x0F;  /*timer 1 clean*/ TMOD |= 0x20;  /*mode 2: 0~255,  auto-reload */ REN = 0; /*forbid 8051 receive data*/   SM1 = 1; /* Serial Control Register be set by timer*/ /*  BaudRate = OscillatorFreq/(N*256-TH1)   if SMOD = 0, N = 384  if SMOD = 1, N = 192   SMOD is PCON.7  , Serial mode bit */  TH1 = 256 - FCLK/(BAUDRATE*12*16);   TL1 = 256 - FCLK/(BAUDRATE*12*16); PCON |= 0x80; ES = 1;  /*Enable Serial port interrupt */ REN = 1;   /*allow 8051 receive data */ EA = 1;   /*Enable interrupt*/       TI = 1; /* the transmitting has been done */ RI = 0; /* the receiving is not done yet */ TR1 = 1;  /*Timer 1 is turned on*/}/*InitUART*/void UartInterrupt(void) interrupt 4{#if(0) if(RI)     {    } else      {  }#endif}/*UartInterrupt*/char putchar(char c)  { /* \n -> \r\n   \r -> carriage return, 13 */ if ('\n' == c)   {  SBUF = 0x0d;       while(0 == TI);  TI = 0; }  SBUF = c;   while(0 == TI); TI = 0;   return c;}/*putchar*/


If you want to use the code, you shocould modify the FCLK macro constant for your micro chip, I use maid, crystal be 22.1184 MHz.

The baud rate, for most use, be 9600, you cocould modify the parameter in your serial communication software. (I suggest sscom)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.