首页 > 其他 > 详细

Putchar in Keil C, take 8051 as an instance

时间:2015-04-29 07:17:00      阅读:259      评论:0      收藏:0      [点我收藏+]

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

We should 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 should modify the FCLK macro constant for your micro chip, I use stc89c52rc, crystal be 22.1184MHz.

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

Putchar in Keil C, take 8051 as an instance

原文:http://blog.csdn.net/u013606170/article/details/45358049

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!