/*程序功能:实现PCA的所有功能,PWM调制输出,频率输出,高速输出。对应端口为
P00,P01和P04为CEX0,CEX1,CEX2,程序在硬件电路上实现,
2011-6-12*/
#include<c8051f330.h> //包涵f330的头文件
#include<intrins.h> //基本函数用的头文件,包涵_nop_()函数
#define uint unsigned int //对部分字符进行伪定义
#define uchar unsigned char //对部分字符进行伪定义
void WDT_Init(void); //看门狗的初始化申明
void PORT_Init(void); //端口初始化函数
void SYSCLK_Init(void); //系统时钟初始化函数
void PCA_Init(void); //PCA初始化程序申明
void main(void) //主函数
{
WDT_Init(); //看门狗的初始化调用
PORT_Init(); //端口初始化函数调用
SYSCLK_Init(); //系统初始化函数调用
PCA_Init();
while(1)
;
}
void WDT_Init(void)
{
PCA0MD&=~0x40; //禁止看门狗定时器
}
void SYSCLK_Init(void)
{
/*内部高频振荡器H-F的控制,该振荡器的标称频率为24.5MHz*/
//OSCICN=0x80;//内部振荡器8分频,频率24.5/8=3.0625M,时钟周期为0.3265us。
//OSCICN=0x81;//内部振荡器4分频,频率24.5/4=6.125M,时钟周期为0.1632us。
//OSCICN=0x82;//内部振荡器2分频,频率24.5/2=12.5M,时钟周期为0.08us。
//OSCICN=0x83;//内部振荡器不分频,频率24.5M,时钟周期为0.04us。
//while(OSCICN&0x40==0)
// ;
//CLKSEL=0x00;//CLKSEL=0x00;CLKSEL=0x01;CLKSEL=0x10分别对应系统时钟选择内部高频振荡器,外部振荡器和内部低频振荡器
/*内部低频振荡器L-F的控制,该振荡器的标称频率为80KHz*/
OSCLCN=0x80;//内部振荡器运行在低频最高速,使用其8分频,
//OSCLCN=0x81;//内部振荡器运行在低频最高速,使用其4分频,
//OSCLCN=0x82;//内部振荡器运行在低频最高速,使用其2分频,
//OSCLCN=0x83;//内部振荡器运行在低频最高速,不分频,
while(OSCLCN&0x40==0)
;
CLKSEL=0x02;//CLKSEL=0x00;CLKSEL=0x01;CLKSEL=0x10分别对应系统时钟选择内部高频振荡器,外部振荡器和内部低频振荡器
/*外部振荡器晶振控制*/
/*
uint i = 0;
OSCXCN=0x67; //01100110 选用外部晶体震荡器,不分频。分不分频由位4决定。为1二分频,为0不分频
for (i=0;i<3000;i++); // 等待振荡器稳定
while(OSCXCN&0x80==0)
;
CLKSEL=0x01;//CLKSEL=0x00;CLKSEL=0x01;CLKSEL=0x10分别对应系统时钟选择内部高频振荡器,外部振荡器和内部低频振荡器
*/
}
/*端口初始化函数,包括模拟,数字,晶振,串口等的配置*/
void PORT_Init(void)//端口配置函数
{
P0MDIN=0xf3; //相对应的端口为模拟输入,使用外部晶振,必须配置为模拟输入
//P1MDIN=0x
//P2MDIN=0x
P0SKIP=0x0c; //交叉开关跳过部分端口,必须跳过配置为晶振的端口P02和P03
//P1SKIP=0x
//P2SKIP=0x
//XBR0=0x08; //交叉开关的配置
XBR1=0x43; //使能强推挽,使能PCA端口连接到相对应的I/O口,该例中为P00,P01,P04
P0MDOUT=0xff; //对应的数值外设的输出配置,推挽或者漏极开路输出
//P1MDOUT=0XF0;
//P2MDOUT=0XF0;
}
/*PCA初始化程序,程序中模块0工作为16位PWM,模块1工作为频率输出方式,模块2工作为高速输出方式*/
void PCA_Init(void)
{
PCA0CN=0x40; //允许PCA定时器工作
PCA0MD=0x09; //在系统空闲方式时PCA任然工作,选择系统时钟作为PCA的定时时钟
PCA0L=0x00; //PWM定时计数器低字节
PCA0H=0x00; //PWM定时计数器高字节
PCA0CPM0=0xc3; //PCA模块0工作为16位的PWM方式
PCA0CPL0=0xff; //PWM的捕捉值低字节
PCA0CPH0=0xE0; //PWM的捕捉值高字节
PCA0CPM1=0x4c; //PCA模块1工作为频率输出的方式
PCA0CPL1=0xff; //PWM的捕捉值低字节
PCA0CPH1=0x80; //PWM的捕捉值高字节
PCA0CPM2=0x46; //PCA模块2工作为高速输出的方式
PCA0CPL2=0xff; //PWM的捕捉值低字节
PCA0CPH2=0xff; //PWM的捕捉值高字节
}
/*
void ISR_PCA(void) interrupt 11 //PCA中断处理程序
{
CF=0;
CCF0=0;
CCF1=0;
CCF2=0;
}
*/
没有合适的资源?快使用搜索试试~ 我知道了~
PCA.rar_C8051F330_pca pwm_pca0 c8051f330
共57个文件
obj:8个
lst:8个
bak:8个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2022-09-21
08:52:06
上传
评论 1
收藏 126KB RAR 举报
温馨提示
C8051F330的关于使用片内PCA的程序,可以产生PWM等电机控制波形.
资源详情
资源评论
资源推荐
收起资源包目录
PCA.rar (57个子文件)
PCA
16位脉宽调制
16位PWM
pwm 4KB
STARTUP.LST 14KB
pwm_Opt.Bak 2KB
pwm.LST 7KB
pwm.OBJ 4KB
pwm.plg 196B
pwm.c 3KB
pwm.Uv2 2KB
STARTUP.A51 6KB
pwm.lnp 54B
pwm_Uv2.Bak 0B
pwm.M51 6KB
STARTUP.OBJ 749B
pwm.Opt 2KB
PCA0CPM寄存器的对应各个模块的工作方式.bmp 2.2MB
8位脉宽调制
sss_Uv2.Bak 2KB
STARTUP.LST 14KB
sss.plg 162B
pwm.LST 5KB
sss 4KB
pwm.OBJ 3KB
sss.lnp 54B
pwm.c 3KB
STARTUP.A51 6KB
sss.Uv2 2KB
sss_Opt.Bak 1KB
STARTUP.OBJ 749B
sss.Opt 1KB
sss.M51 6KB
软件定时器
df_Uv2.Bak 0B
dgf.OBJ 4KB
STARTUP.LST 14KB
df.plg 185B
df.lnp 53B
df.Opt 2KB
df 4KB
df_Opt.Bak 2KB
STARTUP.A51 6KB
dgf.LST 6KB
df.Uv2 2KB
dgf.c 3KB
df.M51 7KB
STARTUP.OBJ 749B
CEXN电平捕捉
CEXN负沿捕捉
CEXN正沿捕捉
高速输出
PCA.plg 317B
pca.c 3KB
PCA_Opt.Bak 998B
PCA 4KB
STARTUP.LST 14KB
pca.OBJ 3KB
PCA.Uv2 2KB
PCA.Opt 2KB
STARTUP.A51 6KB
PCA_Uv2.Bak 0B
PCA.M51 6KB
PCA.lnp 54B
STARTUP.OBJ 749B
pca.LST 5KB
共 57 条
- 1
刘良运
- 粉丝: 71
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0