📄 f326_uart0_stdio.c
字号:
//-----------------------------------------------------------------------------
// F326_UART0_STDIO.c
//-----------------------------------------------------------------------------
// Copyright 2007 Silicon Laboratories, Inc.
// http://www.silabs.com
//
// Program Description:
//
// This program demonstrates how to configure the C8051F326 to use routines
// in STDIO.h to write to and read from the UART interface. The program
// reads a character using the STDIO routine getkey(), outputs that character
// to the screen, and then outputs the ASCII hex value of that character.
//
//
// How To Test:
//
// 1) Ensure that jumpers are placed on J3 of the C8051F326 target board
// that connect the P0.4 pin to the TX signal, and P0.5 to the RX signal.
// 2) Ensure that the serial cable is connected to the RS232 connector
// on the target board.
// 3) Open Hyperterminal, or a similar program, and connect to the target
// board's serial port at a baud rate of <BAUDRATE1>.
// 4) Download and execute code on an 'F326 target board.
//
//
// Target: C8051F326
// Tool chain: Keil C51 7.50 / Keil EVAL C51
// Command Line: None
//
// Release 1.0
// -Initial Revision (SM)
// -16 JULY 2007
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f326.h> // SFR declarations
#include <stdio.h>
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define SYSCLK 12000000 // Clock speed in Hz
#define BAUDRATE1 115200 // Baud rate of UART in bps
sfr16 SBRL1 = 0x93;
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void UART0_Init (void);
void PORT_Init (void);
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void)
{
unsigned char inputcharacter;
PORT_Init(); // Initialize Port I/O
SYSCLK_Init (); // Initialize Oscillator
UART0_Init(); // Initialize UART0
while (1)
{
printf ("\nEnter character: ");
inputcharacter = getkey ();
printf ("\nCharacter entered : %c",inputcharacter);
printf ("\nValue in Hex: %bx",inputcharacter);
}
}
//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure the Crossbar and GPIO ports.
//
// P0.4 digital push-pull UART TX
// P0.5 digital open-drain UART RX
//
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
P0MDOUT = 0x10; // Enabling TX as push-pull
GPIOCN = 0x40; // Enable input path
}
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// This routine initializes the system clock to use the internal oscillator
// at its maximum frequency(12 Mhz).
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
OSCICN = 0x83; // Set internal oscillator to run
// at its maximum frequency
}
//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure the UART0 using Baudrate generator, for <BAUDRATE1> and 8-N-1.
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// clear RI0 and TI0 bits
// Baud Rate = [BRG Clock / (65536 - (SBRLH0:SBRLL0))] x 1/2 x 1/Prescaler
if (SYSCLK/BAUDRATE1/2/0xFFFF < 1) {
SBRL1 = -(SYSCLK/BAUDRATE1/2);
SBCON0 |= 0x03; // set prescaler to 1
} else if (SYSCLK/BAUDRATE1/2/0xFFFF < 4) {
SBRL1 = -(SYSCLK/BAUDRATE1/2/4);
SBCON0 &= ~0x03;
SBCON0 |= 0x01; // set prescaler to 4
} else if (SYSCLK/BAUDRATE1/2/0xFFFF < 12) {
SBRL1 = -(SYSCLK/BAUDRATE1/2/12);
SBCON0 &= ~0x03; // set prescaler to 12
} else {
SBRL1 = -(SYSCLK/BAUDRATE1/2/48);
SBCON0 &= ~0x03;
SBCON0 |= 0x02; // set prescaler to 4
}
SBCON0 |= 0x40; // enable baud rate generator
TI0 = 1; // Indicate TX0 ready
}
//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -