📄 config.c
字号:
#include "..\ucos-ii\includes.h"
#define SYSCLK 22118400
extern void SYSCLK_Init(void);
extern void Port_Init(void);
extern void Time2_Init(void);
extern void UART0_Init(void);
void config(void)
{
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init();
Port_Init ();
Time2_Init();
UART0_Init();
}
void Time2_Init (void)
{
char SFRPAGE_SAVE;
SFRPAGE_SAVE = SFRPAGE; // Preserve SFRPAGE
SFRPAGE = TMR2_PAGE;
TMR2CN = 0x00; // Timer in 16-bit auto-reload up timer
// mode
TMR2CF = 0x08; // SYSCLK is time base; no output;
// up count only
RCAP2 = - ((long) SYSCLK/1000);
//次数为SYSTEMCLOCK/1000 系统每次时间为1/SYSTEMCLOCK 所以就得出进行一次益处计数为1/1000秒
TMR2 = RCAP2;
TR2= 1;
ET2 = 1; // Timer2 interrupt enabled
}
void SYSCLK_Init (void)
{
char old_SFRPAGE = SFRPAGE;
unsigned int i;
SFRPAGE = CONFIG_PAGE; // Switch to Configuration Page
OSCXCN = 0x67; // start external oscillator with
// 22.1184MHz crystal on TB
for (i=0; i <5000; i++) ; // XTLVLD blanking interval (>1ms)
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
//RSTSRC = 0x04; // enable missing clock detector reset
CLKSEL = 0x01; // change to external crystal
OSCICN = 0x83; // Enable internal oscillator
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
}
void PORT_Init (void)
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = CONFIG_PAGE;
P2MDOUT = 0x03;
P0MDOUT = 0x01;
XBR0 = 0x05;
XBR2 = 0x40;
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// Configure the UART1 using Timer1, for <baudrate> and 8-N-1.
//
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = UART0_PAGE; // Switch to UART0 page
SCON0 = 0x50; // SCON: mode 1, 8-bit UART, enable RX
SSTA0 = 0x10; // Timer 1 generates UART0 baud rate and
// UART0 baud rate divide by two disabled
SFRPAGE = TIMER01_PAGE; // Switch to Timer 0/1 page
TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload
TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
//此公式在数据文档240页
TR1 = 1; // start Timer1
CKCON |= 0x10; // Timer1 uses SYSCLK as time base
PCON |= 0x80; // SMOD = 1
SFRPAGE = UART0_PAGE; // Switch to UART0 page
TI0 = 1; // Indicate TX ready
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -