?? c8051f33xblinky.c
字號:
//-----------------------------------------------------------------------------
// 版權歸新華龍電子公司所有
//-----------------------------------------------------------------------------
//
// 文件名:Blinky.c
//
// 編寫人:寧太陽
//
// 編寫時間:2004/12/28
//
// 目標器件: C8051F33x
//
// 編譯工具: Silicon Laboratories IDE
//
//程序功能:這個程序可以在C8051F33x目標板上使用,它通過定時器2的中斷來控制LED發光二極管。
//
//-----------------------------------------------------------------------------
// 頭文件包含
//-----------------------------------------------------------------------------
#include <c8051f330.h>
//-----------------------------------------------------------------------------
// 定時器2的16位特殊功能寄存器
//-----------------------------------------------------------------------------
sfr16 TMR2RL = 0xca;
sfr16 TMR2 = 0xcc;
//-----------------------------------------------------------------------------
// 常量定義
//-----------------------------------------------------------------------------
//
#define SYSCLK 24500000 / 8 // 系統工作頻率
//
//-----------------------------------------------------------------------------
//位定義
//-----------------------------------------------------------------------------
sbit LED = P1^3; // LED所接的引腳
//-----------------------------------------------------------------------------
// 函數定義
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void Timer2_Init (int counts);
void Timer2_ISR (void);
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void) {
PCA0MD &= ~0x40; //禁止看門狗定時器
SYSCLK_Init (); // 系統時鐘初始化
PORT_Init (); // 交叉開關和通用I/O口初始化
Timer2_Init (SYSCLK / 12 / 10); // 定時器2初始化
EA = 1; // 總中斷使能
while (1) {
}
}
//-----------------------------------------------------------------------------
//系統時鐘初始化
//-----------------------------------------------------------------------------
//
void SYSCLK_Init (void)
{
OSCICN = 0x80; // 系統時鐘初始化為片內的 24.5MHz / 8
RSTSRC = 0x04; // 使能時鐘丟失檢測器
}
//-----------------------------------------------------------------------------
// 端口初始化
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x00; // 沒有選擇數字外設
XBR1 = 0x40; // 使能交叉開關和弱上拉
P1MDOUT |= 0x08; // P1.3設為推挽方式
}
//-----------------------------------------------------------------------------
// 定時器2初始化
//-----------------------------------------------------------------------------
void Timer2_Init (int counts)
{
TMR2CN = 0x00; // 禁止定時器2; 并清TF2標志位;
CKCON &= ~0x60;
TMR2RL = -counts;
TMR2 = 0xffff;
ET2 = 1; // 使能定時器2中斷
TR2 = 1; // 啟動定時器2
}
//-----------------------------------------------------------------------------
// 定時器2中斷處理
//-----------------------------------------------------------------------------
void Timer2_ISR (void) interrupt 5
{
TF2H = 0; // 清定時器2中斷標志位
LED = ~LED; // LED狀態取反
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -