⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c8051f33xblinky.c

📁 c8051f330 C程序源代码
💻 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 + -