📄 com.h
字号:
/* ##########################################################################
# Terawins Inc. Company #
# Copyright (c) 2005, All rights reserved #
# #
# All rights reserved. Reproduction in whole or in parts is prohibited #
# without the prior written consent. #
########################################################################## */
////////////////////////////////////////////////////////////////////////////////
// //
// LCD Application Firmware //
// ========================================================================== //
// //
// Module : Com.h //
// //
// Purpose : UART communication routine header //
// //
// Version : 1.00 //
// //
// Compiler : Keil 8051 C Compiler v7.0 //
// //
// Reference: [1] Keil C51 Compiler User's Guide 09.2001, Keil Software, Inc.//
// //
// ========================================================================== //
// //
// Date Author Reason (what and why) //
// ----------- ------------- ---------------------------------------------- //
// 2005/12/30 Bruce Cho Initial Draft //
// //
////////////////////////////////////////////////////////////////////////////////
#ifndef __COM_H__
#define __COM_H__
#include "common.h"
//#include "reg51.h"
#include <intrins.h> // Required for _testbit_();
#define CHAR_OFFSET ('A'-'9'-1)
// Common XTAL frequencies (Hz).
#define XTAL_11_059MHZ 11059200
#define XTAL_12_000MHZ 12000000
#define XTAL_12_288MHZ 12288000
#define XTAL_16_000MHZ 16000000
#define XTAL_20_000MHZ 20000000
#define XTAL_22_118MHZ 22118400
#define XTAL_24_000MHZ 24000000
#define XTAL_27_000MHZ 27000000
// Baud rate
#define BAUD_RATE_9600 1
#define BAUD_RATE_19200 2
#define BAUD_RATE_38400 3
#define BAUD_RATE_57600 4
// Choose your frequency and baud rate
// The Baud rate supported by Xtal:
// ============================================
// Xtal Freq. | baud rate supported
// ============================================
// 11.059M 9600
// 19200
// 57600
// ============================================
// 22.118M 9600
// 19200
// 38400
// 57600
// ============================================
// 27.000M 9600
// 19200
//=============================================
#define XTAL_FREQ XTAL_27_000MHZ
#define BAUD_RATE BAUD_RATE_19200
#if (XTAL_FREQ == XTAL_11_059MHZ)
#if (BAUD_RATE == BAUD_RATE_9600)
#define TH1_VALUE 0xFA
#elif (BAUD_RATE == BAUD_RATE_19200)
#define TH1_VALUE 0xFD
#elif (BAUD_RATE == BAUD_RATE_57600)
#define TH1_VALUE 0xFF
#else
#error Not a valid Baud rate
#endif
#elif (XTAL_FREQ == XTAL_22_118MHZ)
#if (BAUD_RATE == BAUD_RATE_9600)
#define TH1_VALUE 0xF4
#elif (BAUD_RATE == BAUD_RATE_19200)
#define TH1_VALUE 0xFA
#elif (BAUD_RATE == BAUD_RATE_38400)
#define TH1_VALUE 0xFD
#elif (BAUD_RATE == BAUD_RATE_57600)
#define TH1_VALUE 0xFE
#else
#error Not a valid Baud rate
#endif
#elif (XTAL_FREQ == XTAL_27_000MHZ)
#if (BAUD_RATE == BAUD_RATE_9600)
#define TH1_VALUE 0xF1
#elif (BAUD_RATE == BAUD_RATE_19200)
#define TH1_VALUE 0xF9
#else
#error Not a valid Baud rate
#endif
#else
# error You must pick a reference XTAL frequency.
#endif
//#define SHOW_MSG(level,msg, par, parcnt)
// Choice of memory space will affect ring buffer sizes. Usually, RX >= TX size.
// 0 - data
// 1 - idata
// 2 - pdata
// 3 - xdata
#define RING_MEM_SPACE 1
#define RX_RING_SIZE 0
#define TX_RING_SIZE 8
#if RING_MEM_SPACE == 0
# undef RING_MEM_SPACE
# define RING_MEM_SPACE data
# if RX_RING_SIZE + TX_RING_SIZE > 0x7F - 0x20
# error Suggest you drop the size of UART ring buffers or switch to another memory space.
# endif
#elif RING_MEM_SPACE == 1
# undef RING_MEM_SPACE
# define RING_MEM_SPACE idata
# if RX_RING_SIZE + TX_RING_SIZE > 0xFF - 0x20
# error Suggest you drop the size of UART ring buffers or switch to another memory space.
# endif
#elif RING_MEM_SPACE == 2
# undef RING_MEM_SPACE
# define RING_MEM_SPACE pdata
# if RX_RING_SIZE + TX_RING_SIZE > 0xFF
# error Suggest you drop the size of UART ring buffers or switch to another memory space.
# endif
#elif RING_MEM_SPACE == 3
# undef RING_MEM_SPACE
# define RING_MEM_SPACE xdata
# if RX_RING_SIZE + TX_RING_SIZE > 0xFFFF - 0x20
# error Suggest you drop the size of UART ring buffers or switch to another memory space.
# endif
#else
# error You must pick a UART ring buffer memory space of xdata, idata, or data.
#endif
// Documentational.
#define UART_INTR_NUM 4
#define REGISTER_BANK_1 1
#define SCON_8N1 0x40 // SCON.SM1 = 1, SM0,2 = 0
#define SCON_REN 0x10
// Timer 1 only (Timer 0 not used here)
#define TMOD_GATE_T1 0x00 //0x80
#define TMOD_C_T_T1 0x00 //0x40
#define TMOD_M1_T1 0x01 //0x20
#define TMOD_M0_T1 0x00 //0x10
//#define T1_MODE (TMOD_GATE_T1<<3 | TMOD_C_T_T1<<2 | TMOD_M1_T1<<1 | TMOD_M0_T1)<<4
#define T1_MODE 0x21
#define T1_8BIT_AUTO_RELOAD (TMOD_M1_T1)
#define PCON_SMOD 0x80 // Doubles baud rate timing of Timer 1
// Clip indexes at 2^16 since the 8051 only supports a 16-bit XDATA space.
#if RX_RING_SIZE > 256
typedef unsigned int RxRingIndex;
#else
typedef unsigned char RxRingIndex;
#endif
#if TX_RING_SIZE > 256
typedef unsigned int TxRingIndex;
#else
typedef unsigned char TxRingIndex;
#endif
typedef enum UartOptions
{
UART_TRANSLATE_EOL,
UART_BAUD_RATE ,
NUM_UART_OPTIONS
} UartOptions;
/*
typedef enum UartBaudRates
{
BAUD_RATE_1200 ,
BAUD_RATE_2400 ,
BAUD_RATE_9600 ,
BAUD_RATE_19200 ,
BAUD_RATE_38400 ,
BAUD_RATE_57600 ,
BAUD_RATE_115200 ,
NUM_BAUD_RATES ,
BAUD_RATE_NO_CHANGE
} UartBaudRates;
*/
bit UartInit(void);
bit uart_putchar(uCHAR outChar);
static void uartIsr(void);
void ShowMsg(char *cpData);
//void ShowMsgVal(char *cpData, uCHAR *bpData, uCHAR bDataCnt);
#endif //end of Com.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -