?? ide2.c
字號:
#include <c8051f020.h> // SFR聲明
#include <stdio.h>
//-----------------------------------------------------------------------------
// C8051F02X的16位SFR定義
//-----------------------------------------------------------------------------
sfr16 DP = 0x82; // 數據指針
sfr16 TMR3RL = 0x92; // 定時器3重裝值
sfr16 TMR3 = 0x94; // 定時器3計數器
sfr16 ADC0 = 0xbe; // ADC0數據
sfr16 ADC0GT = 0xc4; // ADC0大于窗口
sfr16 ADC0LT = 0xc6; // ADC0小于窗口
sfr16 RCAP2 = 0xca; // 定時器2捕捉/重裝
sfr16 T2 = 0xcc; // 定時器2
sfr16 RCAP4 = 0xe4; // 定時器4捕捉/重裝
sfr16 T4 = 0xf4; // 定時器4
sfr16 DAC0 = 0xd2; // DAC0數據
sfr16 DAC1 = 0xd5; // DAC1數據
//-----------------------------------------------------------------------------
// 全局常量
//-----------------------------------------------------------------------------
#define SYSCLK 22118400 // 系統時鐘頻率
#define BAUDRATE 9600 // UART波特率
sbit LED = P1^6; // LED=’1’ 意為開
sbit SW1 = P3^7; // SW1=’0’ 意為按壓開關
//-----------------------------------------------------------------------------
// 函數原型
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void) {
WDTCN = 0xde; // 禁止看門狗定時器
WDTCN = 0xad;
SYSCLK_Init (); // 初始化振蕩器
PORT_Init (); // 初始化數據交叉開關和通用IO口
UART0_Init (); // 初始化UART0
//Timer3_Init (SYSCLK/SAMPLERATE0); // 初始化定時器3溢出作為ADC0采樣率
//ADC0_Init (); // 初始化ADC
EA = 1; // 允許全部中斷
ES0 = 1;
while (1);
}
void SYSCLK_Init (void)
{
int i; // 延時計數器
OSCXCN = 0x67; // 開啟外部振蕩器
//22.1184MHz晶體
for (i=0; i < 256; i++); // 等待振蕩器啟振
while (!(OSCXCN & 0x80)) ; // 等待晶體振蕩器穩定
OSCICN = 0x88; // 選擇外部振蕩器為系統時鐘源并允許丟失時鐘檢測器
}
void PORT_Init (void)
{
XBR0 = 0x04; // 使能UART0
XBR1 = 0x00;
XBR2 = 0x40; // 使能數據交叉開關和弱上拉
P0MDOUT |= 0x01; // 允許TX0為推挽輸出
P1MDOUT |= 0x40; // 允許P1.6(LED)為推挽輸出
}
void UART0_Init (void)
{
SCON0 = 0x50; // SCON0: 模式1, 8位UART, 使能RX
TMOD = 0x20; // TMOD: 定時器1, 模式2, 8位重裝
TH1 = -(SYSCLK/BAUDRATE/16); // 根據波特率的值設定定時器1重裝值
TR1 = 1; // 啟動定時器1
CKCON |= 0x10; // 定時器1使用系統時鐘作為時基
PCON |= 0x80; // SMOD00 = 1
TI0 = 1; // 表示TX0就緒
}
void UartInt(void) interrupt 4
{
unsigned char temp;
RI0 = 0;
LED =~LED;
temp = SBUF0;
SBUF0 =temp;
while(TI0==0);
TI0 = 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -