📄 c8051f33xhighspeed.c
字号:
//-----------------------------------------------------------------------------
//
// 文件名:highspeed.c
//
// 编写人:宁太阳
//
// 编写时间:2005/01/06
//
// 目标器件: C8051F33x
//
// 编译工具: Silicon Laboratories IDE
//
//------------------------------------------------------------------------------------
//
//程序描述
//-----------------------------------------------------------------------------
// 这个程序可以实现PCA的高速输出功能,P0.0为系统时钟输出,用示波器可以在P0.1
//引脚上观察到“高速输出”的波形。
//
//-----------------------------------------------------------------------------
//头文件包含
//-----------------------------------------------------------------------------
#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 PCA_Init(void);
void PCA0_ISR(void);
//
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void) {
PCA0MD &= ~0x40; //禁止看门狗定时器
SYSCLK_Init (); //系统时钟初始化
PORT_Init (); //交叉开关和通用I/O口初始化
PCA_Init(); //PCA初始化
EA = 1; // 总中断使能
while (1)
{
}
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
OSCICN = 0x80; // 系统时钟初始化为片内的 24.5MHz / 8
RSTSRC = 0x04; // 使能时钟丢失检测器
}
//-----------------------------------------------------------------------------
// I/O口及交叉开关初始化
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x08; //系统时钟输出
XBR1 = 0x43; //交叉开关使能,PCA的CEX0、CEX1、CEX2分配到引脚上
P0MDIN = 0xFF;
P0MDOUT = 0x03; //P0.0、P0.1设为推挽方式
}
//-------------------------------------------------------------------------------
// PCA 初始化
//---------------------------------------------------------------------------
void PCA_Init(void)
{
PCA0CN = 0x40; //使能PCA计数/定时器
PCA0MD = 0x02; //选择PCA的时钟源,0x00、0x02、0x08分别为系统时钟的12、4、及
PCA0CPM0 =0x6d;//8f; //不分频
PCA0L =0x00; //PCA计数/定时寄存器低字节
PCA0H = 0x00; //PCA计数/定时寄存器高字节
PCA0CPL0 = 0x50; //PCA捕捉比较寄存器低字节
PCA0CPH0 = 0x20; //PCA捕捉比较寄存器高字节
EIE1 |= 0x10; // 使能PCA中断
}
//----------------------------------------------------------------
//PCA 中断处理
//----------------------------------------------------------------
void PCA0_ISR(void) interrupt 11
{
CCF0 =0; //PCA模块0捕捉/比较标志位清0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -