




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、STC单片机之PCA /*2路PCA的捕获、高速输出、16bit定时器、PWMI块PCA.c*文件名:PCA.c* 芯片:STC12C5A60S2* 晶振:12MHz*创建者:冷月*创建日期:2010.8.18*修改者:*修改日期:2010.9.3修改设置波特率参数为x%增加定时器0作为PCA时钟源*功能描述:2路PCA的捕获、高速输出、16bit定时器、PWM;现*/#include <STC12C5A.H>#include "PCA.h"#define uchar unsigned char#define uint unsigned int/CCAPnL,C
2、CAPnH 步进,/CCAPnL,CCAPnH增加一个相同的数值,下一次中断来临的间隔时间也是相同的 /无须赋值,PCA初始化函数中自动赋值 static uint step0 = 0;static uint stepl = 0;/*函数名:PCA_Capture_Init*功能描述:PCA捕获模式初始化* 输入参数:module:0-PCA模块0,1-PCA模块1;* PCA_CCAPMn:设置模块工作模式;* PCA_CCAPnH,PCA_CCAPnL:16bit的捕获寄存器* PCACLK:PCA时钟源*返回值:无*/void PCA_Init(bit module, uchar PCA
3、_CCAPMn, uchar PCA_CCAPnH, uchar PCA_CCAPnL,uchar PCACLK)(/CIDL - CPS2 CPS1 CPS0 ECFCMOD = 0x80 | PCACLK;/空闲模式下 PCA停止工作,PCA/PWM时钟源输入/CF CR - CCF1 CCF0CCON = 0x00;if (module = 0)/PCA模块0PCA_PWM0 = 0x3;/PWM模式下,CCAPnL,CCAPn第九位(CCAPM0 = PCA_CCAPMn;CCAP0L = PCA_CCAPnL;CCAP0H = PCA_CCAPnH;step0 = (PCA_CCAP
4、nH & 0x00FF)<<8) | PCA_CCAPnL;else/PCA模块 1(CCAPM1 = PCA_CCAPMn;CCAP1L = PCA_CCAPnL;CCAP1H = PCA_CCAPnH;step1 = (PCA_CCAPnH & 0x00FF)<<8) | PCA_CCAPnL;CL = 0x00;/清 PCA数器CH = 0x00;/- EPCnH EPCnLPCA_PWM1 = 0x00; /PWM模式下,CCAPnL,CCAPn第九位/高速脉冲输出时,将中断优先级设为最高级,以避免其他中断干扰IPH = 0x80;IP = 0x
5、80;EA = 1;CR = 1;/启动PCA计数器计数/* 函数名:InitTimer0*功能描述:定时器 0作为PCA时钟输入源,工作方式 2, 1T模式*输入参数:无*返回值:无*/void InitTimer0(void)TMOD |= 0x02;/方式 2TH0 = 0x00;TL0 = 0x00;/T0x12 T1x12 UM0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRSAUXR |= 0x80;/定时器0设置为1TTR0 = 1;/* 函数名:Set_PWM_Fre*功能描述:定时器 0作为PCA时钟输入源时,设置PW嗷率* 输入参数:fre :要设置的
6、PW嗷率,184Hz46KHz*返回值:无*/void Set_PWM_Fre(uint fre)(float timerVal; /定时器定时时间uchar tempTimerVal;timerVal = 1000000.0 / 256 / fre;tempTimerVal = (uint)(65536 - timerVal*12) % 256;TH0 = tempTimerVal;TL0 = tempTimerVal;/* 函数名:Set_PWM0*功能描述:设置PWM咕空比* 输入参数:duty :占空比0100*返回值:无*/void Set_PWM0(uchar duty)(ucha
7、r temp;if (duty = 0)/PWM固定输出低(/- EPCnH EPCnLPCA_PWM0 = 0x03; /PWM模式下,CCAPnL,CCAPn第九位temp = 0xFF;else if (duty = 100) /PWM固定输出高(/- EPCnH EPCnLPCA_PWM0 = 0x00; /PWM模式下,CCAPnL,CCAPn第九位temp = 0;elsePCA_PWM0 = 0x00;temp = 256 - 256*duty/100;CCAP0L = temp;CCAP0H = temp;/* 函数名:Set_PWM1*功能描述:设置PWM1T空比* 输入参数
8、:duty :占空比0100*返回值:无*/void Set_PWM1(uchar duty)(uint temp;if (duty = 0)/PWM固定输出低(/- EPCnH EPCnLPCA_PWM1 = 0x03; /PWM模式下,CCAPnL,CCAPn第九位temp = 0xFF;else if (duty = 100) /PWM固定输出高(/- EPCnH EPCnLPCA_PWM1 = 0x00; /PWM模式下,CCAPnL,CCAPn第九位temp = 0;else(PCA_PWM1 = 0x00;temp = 256 - 256*duty/100;CCAP1L = tem
9、p;CCAP1H = temp;/*函数名:PCA_Int*功能描述:PCA*输入参数:无*返回值:无*/void PCA_Int(void) interrupt 7(uint temp;if (CCF0 = 1)/PCA模块 0 中断(CCF0 = 0;/清PCA模块中断标志/CCAPnL,CCAPnH增加一个相同的数值,下一次中断来临的间隔时间也是相同的temp = (CCAP0H & 0x00FF)<<8) | CCAP0L;temp += step0;CCAP0L = temp & 0x00FF;CCAP0H = (temp & 0xFF00) &g
10、t;> 8;/if (CCF1 = 1)/PCA模块 1 中断(CCF1 = 0;/清PCA模块中断标志/CCAPnL,CCAPnH增加一个相同的数值,下一次中断来临的间隔时间也是相同的temp = (CCAP1H & 0x00FF)<<8) | CCAP1L;temp += stepl;CCAP1L = temp & 0x00FF;CCAP1H = (temp & 0xFF00) >> 8;/if (CF = 1)(CF = 0;/PCA.h/*文件名:PCA.h* 芯片:STC12C5A60S2* 晶振:12MHz*创建者:冷月*创建日
11、期:2010.8.18*修改者:*修改日期:*功能描述:2路PCA的捕获、高速输出、16bit定时器、PWMK口*/#ifndef _PCA_H_#define _PCA_H_#define uchar unsigned char#define uint unsigned int/CCAPMn - ECOMn CAPPn CAPNn MATn TOGn PWMn CCFn/ 00H00000000无操作,待机状态/ 42H010000108位PW晰出,无中断/ 63H0沿中断11000118位PW晰出,产生CEXn±升/ 53H0降沿中断10100118位PW晰出,产生CEX0n下/
12、 73H0中断11100118位PW晰出,产生CEXnB变/ 20H0发捕秋x10000016位捕获模式,CEXn上升沿触/ 10H0x01000016位捕获模式,CEXn下降沿触发捕获/ 30H捕获0 x1 10 0 0 016位捕获模式,CEXn跳变触发/ 48H0 1001 0 0 016位软件定时器/ 4CH0 1001 1 0 016位高速脉冲输出/捕获#defineRISE0x20/上升沿捕获#defineDOWN0x10/下降沿捕获/定时器/CCAPnH,CCAPnL = t / (1/PCA 时钟源)#define TIMER 0x48/高速输出(8Hz6MHz)/CCAPnH
13、,CCAPnL = INT(PCA 时钟源 /(2*f) + 0.5)#define HIGH_SPEED_OUT 0x4C/PWM/PWM频率=PCA时钟源/ 256/ 占空比=(CCAP0L / 256) *100%#define PWM 0x42/PCA模块中断充许#define ECCF 0x01/PCA时钟源#define CLK00x00/Fosc/12#define CLK10x02/Fosc/2#define CLK20x04/定时器0的溢出率#define CLK30x06/ECI外部时钟#define CLK40x08/Fosc/1#define CLK50x0a/Fosc
14、/4#define CLK60x0c/Fosc/6#define CLK70x0e/Fosc/8/* 函数名:PCA_Init* 调 用:PCA_Init(0, RISE|ECCF, 0x00, 0x00, CLK0);* 第1路PCA上捕获模式,升沿捕获* PCA_Init(1, TIMER|ECCF, 0x03, 0xE8, CLK0);* 第2路PCA定时器模式,PCA时钟源Fosc/12,定时1ms* PCA_Init(0, HIGH_SPEED_OUT|ECCF, 0x17, 0x70, CLK0);* 第1路PCA高速输出模式,PCA时钟源Fosc/12,输出脉冲频率1KHz* 第
15、2路PCA的PW膜式,PCA时钟源Fosc/12*功能描述:PCA初始化*/void PCA_Init(bit module, uchar PCA_CCAPMn, uchar PCA_CCAPnH, uchar PCA_CCAPnL, uchar PCACLK);/* 函数名:InitTimer0* 调 用:InitTimer0();*功能描述:定时器 0作为PCA时钟源时,要先初始化定时器0*/void InitTimer0(void);/* 函数名:Set_PWM_Fre* 调 用:Set_PWM_Fre(523);* 设置PW嗷率为523Hz*功能描述:定时器 0作为PCA时钟源时,PW
16、阿设置184Hz46KHz*/ void Set_PWM_Fre(uint fre);/* 函数名:Set_PWM0* 调 用:Set_PWM0(40);* 占空比40%*功能描述:设置PWM咕空比*/void Set_PWM0(uchar duty);/* 函数名:Set_PWM1* 调 用:Set_PWM1(40);* 占空比40%*功能描述:设置PWM空比*/void Set_PWM1(uchar duty);#endif main.c/* 文件名:main.c* 芯片:STC12C5A60S2* 晶振:12MHz*创建者:冷月*创建日期:2010.8.18*修改者:*修改日期:*功能描述:PCA± PW相式实现LED灯渐亮渐灭*/#include <STC12C5A.H>#include "Delay.h"#include "PCA.h"/* 函数名:main*功能描
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 真实案例解析的保安证试题及答案
- 保安证考试考前复习试题及答案
- 2025年保安证考试自测试题及答案
- 2025年保安证考试经验教训试题及答案
- 生物质颗粒燃料供应厂家
- 2025年保安证考试细节大全与试题及答案
- 加油加气站项目可行性研究报告
- 辽宁理工学院《国际贸易理论与实务(一)》2023-2024学年第二学期期末试卷
- 2024-2025学年河南省郑州二中等八校高三教学调研(二)历史试题试卷含解析
- 湖南税务高等专科学校《英语视听(三)》2023-2024学年第一学期期末试卷
- 2023年广东省深圳市龙华区中考道德与法治二模试卷及答案解析
- 中国书画艺术品投资(山东联盟)知到章节答案智慧树2023年山东财经大学
- 高中学生社会实践活动100例
- 天津渔港防波堤施工组织设计
- 公司样品承认书
- YY/T 1870-2023液相色谱-质谱法测定试剂盒通用要求
- 博科ERP产品介绍
- 后张法预应力T梁预制施工方案
- 丙醇安全技术说明书MSDS
- GB/T 3836.9-2021爆炸性环境第9部分:由浇封型“m”保护的设备
- GB/T 20001.4-2015标准编写规则第4部分:试验方法标准
评论
0/150
提交评论