怎么使用IAPstc15w4k48s461s4做一个可调PWM

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
lcd2004 stc iap154k61s4驱动程序及例程
下载积分:400
内容提示:lcd2004 stc iap154k61s4驱动程序及例程
文档格式:DOC|
浏览次数:54|
上传日期: 11:28:50|
文档星级:
全文阅读已结束,如果下载本文需要使用
 400 积分
下载此文档
该用户还上传了这些文档
lcd2004 stc iap154k61s4驱动程序及例程
官方公共微信每页显示:
联系人:肖先生/刘小姐电话:1/
IAP15W4K61S4
STC
12186
16+
LQFP64S
STC宏晶全新原装只做现货
联系人:李先生【十年信誉,品质保证】电话:0/【每片都来自原厂】
IAP15W4K61S4
STC
6522
2016+
QFP44
原装正品质保一年找艾来斯
&
联系人:李小姐/雷先生电话:0/
IAP15W4K61S4
STC
18800
16+
原厂封装
原装正品,真实库存!
联系人:汪先生电话:9
IAP15W4K61S4
STC
5800
16+
DIP40
全新原装正品,代理货源,可开17%增值税票
联系人:汪先生电话:5
IAP15W4K61S4
STc
5000
15+
DIP40
全新原装正品,原厂代理货源,可开17%增值税票
联系人:周小姐/朱文文电话:5/
IAP15W4K61S4-30I-SOP28
STC代理
2017
137807
SOP28
一级代理特价现货
联系人:张先生电话:0
IAP15W4K61S4-30I-P
STC
15668
2017+
DIP-40
劲爆特价现货!假一赔百!原厂原装正品!
联系人:张锐电话:4
IAP15W4K61S4-30I-LQFP44
STC
22904
1639+
QFP44
优势库存,常备现货,支持小批量
&Skype:
联系人:李先生/吴小姐电话:7/
IAP15W4K61S4-30I-LQFP44
STC
50000
2016+
LQFP44
公司原装现货,可出样品,价格优惠
&
联系人:李先生/朱小姐电话:9/
IAP15W4K61S4-30I-LQFP44
STC
22904
2017+
QFP44
原装现货/品质有保证/诚信经营/可开17%增值票!
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-SOP28
STC
11650
16+
SOP28
原装正品
联系人:雷先生/李小姐电话:3/
IAP15W4K61S4-30I-SOP28
STC
18800
16+
原厂封装
原装正品,真实库存!
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-SOP28
STC代理
13254
&
联系人:雷先生/李小姐电话:2/
IAP15W4K61S4-30I-QFN48
STC
18800
16+
原厂封装
原装正品,真实库存!
&
联系人:李小姐/雷先生电话:0/
IAP15W4K61S4-30I-LQFP48
STC
18800
16+
原厂封装
原装正品,真实库存!
联系人:朱文文/周小姐电话:5/
IAP15W4K61S4-30I-P
STC
689000
2017+
DIP40
一级代理特价现货!
联系人:张先生电话:0
IAP15W4K61S4-30I-P
STC
15668
2017+
DIP-40
劲爆特价现货!假一赔百!原厂原装正品!
联系人:高小姐电话:8、
IAP15W4K61S4-30I-SOP28
STC
11650
15+
SOP28
原装正品公司现货
联系人:江先生电话:5
IAP15W4K61S4-30I
STC
4800
16+/17+
QFP44
原装
&
联系人:朱小姐朱先生电话:
IAP15W4K61S4-30I-P
STC(宏晶)
3000
15
DIP40
原装正品现货/订货价格优惠可提供发票
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-LQFP32
STC
11650
16+
LQFP32
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-LQFP44
STC
11650
16+
LQFP44
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-LQFP48
STC
11650
16+
LQFP48
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-LQFP64L
STC
11650
16+
LQFP64L
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-LQFP64S
STC
11650
16+
LQFP64S
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-PDIP40
STC
11650
16+
PDIP40
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-QFN48
STC
11650
16+
QFN48
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-QFN64
STC
11650
16+
QFN64
原装正品
联系人:张生/陈小姐【专注原装正品现货◆订货◆价格绝对让你满意】电话:3/3
IAP15W4K61S4-30I-SKDIP28
STC
11650
16+
SKDIP28
原装正品
联系人:雷先生/李小姐电话:3/
IAP15W4K61S4-30I-QFN64
STC
18800
16+
原厂封装
原装正品,真实库存!
联系人:雷先生/李小姐电话:3/
IAP15W4K61S4-30I-SKDIP28
STC
18800
16+
原厂封装
原装正品,真实库存!
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-LQFP32
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-LQFP44
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-LQFP48
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-LQFP64L
STC代理
13455
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-LQFP64S
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-PDIP40
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-QFN48
STC代理
13254
联系人:█马先生█优势价格█原装正品电话:0/QQ:
IAP15W4K61S4-30I-SKDIP28
STC代理
13254
&
联系人:雷先生/李小姐电话:2/
IAP15W4K61S4-30I-LQFP64L
STC
18800
16+
原厂封装
原装正品,真实库存!
1 全选本页 全选所有页
采购型号*:
品牌:封装:
您好!我公司用到 IAP15W4K61S4 产品,请速报价联系!祝商祺!
还不是会员
发布给有[IAP15W4K61S4]的供应商,请您输入正确的邮箱地址
*公司名:Email:
联系人:MSN:
电& 话:Q Q:
已经是会员
登录询价可以保存您的[IAP15W4K61S4]询价记录
批量型号的询价可直接到会员首页3018人阅读
STC15W4K48S4 &的&PCA_PWM 只有两路 PWM0 和 PWM1 已经用来控制了两个风机,因为项目需要要控制3个风机所以又添加了一个PWM来控制风机,查看电路板发现只有一个 PWM7的引脚是空起来的,所以就用这个引脚进行第3路的PWM输出,
程序如下:红色部分是添加的 PWM7的程序,其他是STC芯片资料里的程序
void PWM7_Init(void) 函数里面有详细说明
// --------------------------------------------------------- PCA_PWM.h----------------------------------------------------------------------------
#ifndef __PCA_PWM_H_
#define __PCA_PWM_H_
#include &config.h&
#include &main.h&
/***********************************用户宏定义**********************************/
//#define MAIN_Fosc
#define & PWM_DUTY
255 // 定义PWM的周期,数值为PCA所选择的时钟脉冲个数
#define PWM_HIGH_MIN
1 // 限制PWM输出的最小占空比,避免中断里重装参数时间不够
#define PWM_HIGH_MAX
255//(PWM_DUTY - PWM_HIGH_MIN) // 限制PWM输出最大占空比
/*********************************************************************************/
#define PCA0 0
#define PCA1 1
#define PWM7 2
//-------------------------------------------------------------------------
// & & & Add & B7 & &B6 & & B5 & &B4 & & B3 & & &B2 & B1 &B0 &
// AUXR1 A2H &S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 &- &DSP
// CCP_S1 CCP_S0
// & 0 & & &0 & & & PCA_P12_P11_P10_P37
// & 0 & & &1 & & & PCA_P34_P35_P36_P37
// & 1 & & &0 & & & PCA_P24_P25_P26_P27
//#define PCA_P12_P11_P10_P37 (0&&4)
#define PCA_P34_P35_P36_P37 (1&&4)
#define PCA_P24_P25_P26_P27 (2&&4)
//------------------------------------------------------------------------
// & & & & &Address &B7 & B6 & &B5 & & B4 & &B3 & &B2 & &B1 & &B0
// CCAPM0 & & DAH & &- & ECOM0 CAPP0 &CAPN0 MAT0 &TOG0 &PWM0 &ECCF0
// ECOM0: 当 ECOM0 = 1,允许比较功能
// CAPP0: 当 CAPP0 = 1,允许上升沿捕获
// CAPN0: 当 CAPN0 = 1,允许下降沿捕获
// MAT0: &当 MAT0 = 1 时,PCA计数值与模块的比较/捕获寄存器的值的匹配价格置位CCON寄存器中的中断标志位 CCF0
// TOG0: &当 TOG0 = 1 时,工作在PCA高速脉冲输出模式,PCA计数值与模块的比较/捕获寄存器的值的匹配将使CCP0脚翻转
// & & & &(CCP0/PCA0/PWM0/P1.1 或 CCP0_2/PCA0/PWM0/P3.5 或 CCP0_3/PCA0/PWM0/P2.5)
// PWM0: &当PWM0 = 1时,允许CCP0脚输出PWM波
// ECCF0: 使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0,用来产生中断
// CCAPM1 和 CCAPM2 和 CCAPM0 一样
#define PCA_Mode_PWM 0x42 &// &ECOM0 = 1 &PWM0 = 1
//#define PCA_Mode_Capture 0
//#define PCA_Mode_SoftTimwe 0x48 &// &ECOM0 = 1 &MAT0 = 1
//#define PCA_Mode_HighPluseOutput 0x4C &// &ECOM0 = 1 &MAT0 = 1 TOG0 = 1
//#define PCA_Rise_Active (1&&5) &// 上升沿捕获 CAPP0 = 1
//#define PCA_Fall_Active (1&&4) &// 上升沿捕获 CAPN0 = 1
//---------------------------------------------------------------------------
// & & & Address & B7 & & B6 & B5 &B4 & B3 & &B2 & &B1 & &B0
// CMOD &D9H & & & CIDL & - & &- & &- & CPS2 &CPS1 &CPS0 &ECF
// CIDL: CIDL = 0, 空闲模式下PCA计数器继续工作
// CIDL = 1, 空闲模式下PCA计数器停止工作
// CPS2 &CPS1 &CPS0 & 选择CCP/PCA/PWM时钟源输入
// & 0 & & 0 & & 0 & & (0,系统时钟,SYSclk/12
// & 0 & & 0 & & 1 & & &(1, 系统时钟,SYSclk/2
// & 0 & & 1 & &0 & & &(2, 定时器0溢出脉冲。由于定时器0可以工作在1T模式,所以
// 可以达到一个时钟就溢出,从而达到最高频率CPU工作时钟SYSclk
// 通过改变T0的溢出率,可以实现可调频率的PWM输出
// & 0 & & 1 & & 1 & & &(3, ECI/P1.2(或P3.4或P2.4)引脚输入外部时钟,(最大速率= SYSclk/2)
// & 1 & & 0 & & 0 & & &(4, 系统时钟,SYSclk
// & 1 & & 0 & & 1 & & &(5, 系统时钟/4, SYSclk/4
// & 1 & & 1 & & 0 & & &(6, 系统时钟/6, SYSclk/6
// & 1 & & 1 & & 1 & & &(6, 系统时钟/8, SYSclk/8
例如,CPS2/CPS1/CPS0 = 1/0/0 时,CCP/PCA/PWM时钟源是SYSclk,不用定时器0,PWM的频率为
SYSclk/256
如果要用系统时钟/3来作为PCA的时钟源,应选择T0的溢出作为CCP/PCA/PWM时钟源,此时
应让T0工作在1T模式,计数3个脉冲即将产生溢出。用T0的溢出可对系统进行1~65536级分频,
(T0工作在16位重装载模式)
// ECF: PCA计数溢出中断使能位
// & & & ECF = 0 ,禁止CCON中的CF位中断
// & & & ECF = 1, &允许CCON中的CF位中断
#define PCA_Clock_1T (4&&1)
//#define PCA_Clock_2T (1&&1)
#define PCA_Clock_4T (5&&1)
//#define PCA_Clock_6T (6&&1)
//#define PCA_Clock_8T (8&&1)
#define PCA_Clock_12T (0&&1)
//#define PCA_Clock_Timer0_OF (2&&1)
//#define PCA_Clock_ECI (3&&1)
//----------------------------------------------------------------------------
// PCA 模块PWM寄存器PCA_PWM0、PCA_PWM1、PCA_PWM2
// & & & & & Address & B7 & & &B6 & & &B5 &B4 &B3 &B2 &B1 & & B0
// PCA_PWM0 & F2H & & &EBS0_1 &EBS0_0 &- & - & - & - & EPC0H &EPC0L
// &EBS0_1 EBS0_0 当PCA模块0工作于PWM模式时的功能选择位
// & &0 & & &0 & &: PCA 模块0,工作于8位PWM功能
// & &0 & & &1 & &: PCA 模块0,工作于7位PWM功能
// & &1 & & &0 & &: PCA 模块0,工作于6位PWM功能
// & &1 & & &1 & &: 无效 PCA 模块0,工作于8位PWM功能
// &EPC0H 在PWM模式下,与CCAP0H组成9位数
// &EPC0L 在PWM模式下,与CCAP0L组成9位数
// PCA_PWM1 PCA_PWM2 一样
//#define PCA_PWM_8bit & (0&&6)
//#define PCA_PWM_7bit & (1&&6)
//#define PCA_PWM_6bit & (2&&6)
//sbit PPCA = IP^7;
// PCA 中断优先级设定位
//==============================================================
#define PwmClk_1T 0
// --------------------------------------------------------------
#define EAXSFR() P_SW2 |= (1 && 7)
// 指令操作对象为扩展SFR (XSFR)
#define EAXRAM() P_SW2 &= ~(1 && 7)
// 指令操作对象为扩展SFR (XSFR)
// --------------------------------------------------------------
//sfr P_SW2 = 0xBA;
// --------------------------------------------------------------
// #define PWM2_INIT_OUT_LOW (0 && 0)
// #define PWM2_INIT_OUT_HIGH (1 && 0)
// #define PWM3_INIT_OUT_LOW (0 && 1)
// #define PWM3_INIT_OUT_HIGH (1 && 1)
// #define PWM4_INIT_OUT_LOW (0 && 2)
// #define PWM4_INIT_OUT_HIGH (1 && 2)
// #define PWM5_INIT_OUT_LOW (0 && 3)
// #define PWM5_INIT_OUT_HIGH (1 && 3)
// #define PWM6_INIT_OUT_LOW (0 && 4)
// #define PWM6_INIT_OUT_HIGH (1 && 4)
#define PWM7_INIT_OUT_LOW (0 && 5)
#define PWM7_INIT_OUT_HIGH (1 && 5)
sfr PWMCFG = 0xF1;
// --------------------------------------------------------------
// --------------------------------------------------------------
#define ENHANCE_PWM_ENABLE (1 && 7)
// 使能增强型PWM波形发送器
#define ZERO_INT_DISABLE (0 && 6)
// 关闭PWM计时器归零使能中断
#define ZERO_INT_ENABLE (1 && 6)
// 关闭PWM计时器归零使能中断
// #define PWM2_OUT_ENABLE (1 && 0)
// PWM2 输出使能
// #define PWM3_OUT_ENABLE (1 && 1)
// PWM3 输出使能
// #define PWM4_OUT_ENABLE (1 && 2)
// PWM4 输出使能
// #define PWM5_OUT_ENABLE (1 && 3)
// PWM5 输出使能
// #define PWM6_OUT_ENABLE (1 && 4)
// PWM6 输出使能
#define PWM7_OUT_ENABLE (1 && 5)
// PWM7 输出使能
sfr PWMCR = 0xF5;
// --------------------------------------------------------------
PWM计数器为一个15位的寄存器,可设置1~32767之间的任意值作为PWM的周期。
#define PWMCH & *((u8 volatile xdata *)0xFFF0)
// PWM计时器高字节,PWMCH高7位
#define PWMCL & *((u8 volatile xdata *)0xFFF1)
// PWM计时器低字节,PWMCH低8位
PWM时钟选择寄存器
#define PWM_CLK_SOURCE_SYS_CLK (0 && 4)
// PWM时钟源使用系统时钟经分频后的时钟
#define PWM_CLK_SOURCE_TIM2 (1 && 4)
// PWM时钟源使用定时器2溢出脉冲
// n = 1,2,3,4,5,6,7,...15 ;n = 1 表示1分频 n = 2 表示2分频
#define PWM_CLK_DEV(n) (((n) & 0x0F)-1)
// PWM时钟源使用定时器2溢出脉冲
#define PWMCKS &*((u8 volatile xdata *)0xFFF2)
// PWM2翻转计数器
#define PWM2T1H *((u8 volatile xdata *)0xFF00)
// PWM7的第一次翻转计时器的高字节
#define PWM2T1L *((u8 volatile xdata *)0xFF01)
// PWM7的第一次翻转计时器的低字节
#define PWM2T2H *((u8 volatile xdata *)0xFF02)
// PWM7的第二次翻转计时器的高字节
#define PWM2T2L *((u8 volatile xdata *)0xFF03)
// PWM7的第二次翻转计时器的低字节
// --------------- PWM2CR -------------------------------
#define PWM2_T1_INT_INVERT_DISENABLE (0 && 0)
// PWM7 T1 关闭T1翻转时中断
#define PWM2_T1_INT_INVERT_ENABLE (1 && 0)
// PWM7 T1 使能T1翻转时中断
#define PWM2_T2_INT_INVERT_DISENABLE (0 && 1)
// PWM7 T2 关闭T2翻转时中断
#define PWM2_T2_INT_INVERT_ENABLE (1 && 1)
// PWM7 T2 使能T2翻转时中断
#define PWM2_INT_DISABLE (0 && 2)
#define PWM2_INT_ENABLE (1 && 2)
#define PWM2_P3_7 (0 && 3)
#define PWM2_P2_6 (1 && 3)
#define PWM2CR &*((u8 volatile xdata *)0xFF04)
// --------------------------------------------------------------
#define PWM7T1H *((u8 volatile xdata *)0xFF50)
// PWM7的第一次翻转计时器的高字节
#define PWM7T1L *((u8 volatile xdata *)0xFF51)
// PWM7的第一次翻转计时器的低字节
#define PWM7T2H *((u8 volatile xdata *)0xFF52)
// PWM7的第二次翻转计时器的高字节
#define PWM7T2L *((u8 volatile xdata *)0xFF53)
// PWM7的第二次翻转计时器的低字节
// --------------- PWM7CR -------------------------------
#define PWM7_T1_INT_INVERT_DISENABLE (0 && 0)
// PWM7 T1 关闭T1翻转时中断
#define PWM7_T1_INT_INVERT_ENABLE (1 && 0)
// PWM7 T1 使能T1翻转时中断
#define PWM7_T2_INT_INVERT_DISENABLE (0 && 1)
// PWM7 T2 关闭T2翻转时中断
#define PWM7_T2_INT_INVERT_ENABLE (1 && 1)
// PWM7 T2 使能T2翻转时中断
#define PWM7_INT_DISABLE (0 && 2)
#define PWM7_INT_ENABLE (1 && 2)
#define PWM7_P1_7 (0 && 3)
#define PWM7_P0_6 (1 && 3)
#define PWM7CR &*((u8 volatile xdata *)0xFF54)
// --------------------------------------------------------------
//sbit CCP0 = P2^5;
//sbit CCP1 = P2^6;
extern int xdata pwm0,pwm1,pwm2;
//extern char wind_in_size_
//extern char wind_out_size_
// extern u8 idata WinSize_In[6];
// extern u8 idata WinSize_Out[6];
void PWMn_Updata(u8 PCA_id, int pwm);
void PCA_PWM_Init(void);
void delay_ms_pwm(u8 ms);
void PWM7_Init(void);
// ---------------------------------------PCA_PWM.c---------------------------------------------------------&
#include &PCA_PWM.h&
#include &GPIO.h&
int xdata pwm0,pwm1,pwm2;
//========================================================================
// 函数: void &delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
//========================================================================
void delay_ms_pwm(u8 ms)
i = MAIN_Fosc / 13000;
while(--i);
}while(--ms);
//========================================================================
// 函数: void PWMn_Updata(u8 PCA_id, u8 pwm)
// 描述: 更新占空比数据。
// 参数: PCA_id: 那个通道的PWM,pwm 即PWM输出高电平的PCA时钟脉冲个数。
// 返回: 无
// 版本: VER1.0
//========================================================================
void PWMn_Updata(u8 PCA_id, int pwm)
u8 SW2_tmp = 0;
if (pwm & PWM_HIGH_MAX) pwm = PWM_HIGH_MAX;
//如果写入大于最大占空比数据,强制为最大占空比。
if (pwm & PWM_HIGH_MIN) pwm = PWM_HIGH_MIN;
//如果写入小于最小占空比数据,强制为最小占空比。
if (PCA_id == PCA0)
CCAP0L = (u8)
// 将映射寄存器写入不好寄存器,先写CCAP0L
CCAP0H = CCAP0L;
& &// 后写CCAP0H // 启动PCA
else if (PCA_id == PCA1)
// 停止PCA一会,一般不会影响PWM
CCAP1L = (u8)
// 将映射寄存器写入不好寄存器,先写CCAP1L
CCAP1H = CCAP1L;
& &// 后写CCAP1H // 启动PCA
// 启动PCA
else if (PCA_id == PWM7)
SW2_tmp = P_SW2;
// 保存SW2设置
// 访问 XFR&
PWM7T1L = 0xFF - (u8)
// PWM7 第一个翻转计数器的低字节
P_SW2 = SW2_
// EAXRAM(); 恢复访问 XRAM
PWMCR |= ENHANCE_PWM_ENABLE;
// 使能PWM波形发生器, PWM计时器开始
//========================================================================
// 函数: void PCA_PWM_Init(void)
// 描述: PCA初始化程序.
// 参数: none
// 返回: none.
// 版本: V1.0,
//========================================================================
void PCA_PWM_Init(void)
GPIO_InitTypeDef
GPIO_InitS //结构定义
// P3.5、 P3.6设置 推挽输出 PWM输出
GPIO_InitStructure.Pin &= GPIO_Pin_5 | GPIO_Pin_6;
//指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_PullUp;
//推挽输出
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
// P1.7设置 推挽输出 PWM输出
GPIO_InitStructure.Pin &= GPIO_Pin_7;
//指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_OUT_PP;
//推挽输出
GPIO_Inilize(GPIO_P1 ,&GPIO_InitStructure);
PWM7_Init();
AUXR1 = (AUXR1 & ~(3&&4)) | PCA_P34_P35_P36_P37;
// 引脚配置
CCAPM0 = (PCA_Mode_PWM | DISABLE);
&// CCAPM0 PWM模式 不中断
CCAPM1 = (PCA_Mode_PWM | DISABLE);
&// CCAPM1 PWM模式 不中断
CMOD = (CMOD & ~(7&&1)) | PCA_Clock_4T;
// 选择时钟 &SYSclk/12
// pwm0 = (PWM_DUTY / 4 * 1);
// 给PWM一个初始值
// pwm1 = (PWM_DUTY / 4 * 2);
pwm0 = PWM_HIGH_MAX;
// 给PWM一个初始值 关闭
pwm1 = PWM_HIGH_MAX;
pwm2 = PWM_HIGH_MAX;
PWMn_Updata(PCA0, pwm0);
PWMn_Updata(PCA1, pwm1);
PWMn_Updata(PWM7, pwm2);
// 运行PCA定时器
//========================================================================
// 函数: void PWM7_Init(void)
// 描述: PWM7 初始化函数.
// 参数: none
// 返回: none.
// STC15W4K48S4 的 PWM7 是这个芯片新增的功能,它有6通道高精度PWM发生器,带死区控制的
// 增强型波形发生器,从PWM2 到 PWM8, 而 PCA_PWM 只有两路 PWM0 和 PWM1&
// 因为本程序要控制3个风机所以又添加了一个PWM7来控制风机
//========================================================================
void PWM7_Init(void)
// 访问 XFR&
PWMCFG |= PWM7_INIT_OUT_LOW;
// PWM7 输出端口初始化为低电平
// PMW7 的时钟为 系统时钟的4分频和 PCA_PWM 即PWM0 和 PWM2 的时钟一样
PWMCKS |= PWM_CLK_SOURCE_SYS_CLK | PWM_CLK_DEV(4);
PWMCH = 0x00;
PWMCL = 0xFF;
// PWM周期255
// ------------------ PWM7 ---------------------
// 这里设置PWM7的初始电平为低电平 ,
// 因为本程序用的是 PWM脉冲周期为255,所以 这里只用了 PWM7T1L 这个变量,PWM7T1H 永远为 0x00;
// PWM7 的驱动和 PWM0 和 PWM1 不同,它在一个周期内要设置两次翻转,这两次翻转的寄存器为&
// 第一次翻转寄存器 [PWM7T1H PWM7T1L]
// PWM计数器和 [PWM7T1H PWM7T1L] 进行比较,
// 如果 PWM计数器值 & [PWM7T1H PWM7T1L] &
PWM7输出低电平 初始化设置为低电平,
// 如果 PWM计数器值 &= [PWM7T2H PWM7T2L] &PWM7输出高电平 ,
// 第二次翻转寄存器 [PWM7T1H PWM7T1L]
// &当 PWM7T1L 赋值为 0xFF时(在本程序里 0xFF 表示风机风量为关,这个值越小表示风量越大),
// 如果PWM 在来一个 CLK PWM跳变为高电平, 这时从 PWM计数器和 [PWM7T2H PWM7T2L]&
// &进行比较,
如果 PWM计数器值 & [PWM7T2H PWM7T2L] & 则为高电平 ,
// & &如果 PWM计数器值 &= [PWM7T2H PWM7T2L] &则为低电平 ,
// 因为 PWM7T2H = 0x00 , PWM7T2L = 0x01, 所以这个高电平持续时间只有一个CLK的时间&
// 所以达到输出高脉冲时间最短的设置,表示风量为关
// 在 PWM更新函数 PWMn_Updata(PWM7, pwm2); 里只改变 PWM7T1L 的值,其他值不变,则 就得到了&
// 通过 PWM7T1L 来控制 PWM的占空比. 当 PWM7T1L 越大 高电平持续的时间越短,PWM7T1L 越小 ,
// 高电平持续的时间越长,和 PCA_PWM 产生的效果一样
PWM7T1H = 0x00;
PWM7T1L = 0x00;
PWM7T2H = 0x00;
PWM7T2L = 0x01;
// PWM7 输出为默认值,关闭中断
PWM7CR = 0x00;
// --------------------------------------------------
// 恢复访问 XRAM
PWMCR |= PWM7_OUT_ENABLE;
// PWM7 输出使能 &PWM计时器没有开始 ,在PWMn_Updata(PWM7, pwm2); 中配置好后开始
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3092次
排名:千里之外查看: 231|回复: 8
IAP15W4K61S4单片机EEPROM使用起始地址是0x0000h吗?
地址选择不当的话,会不会擦除EEPROM时把程序部分擦出了吗?
IAP型号的所有flash都在程序中可擦写,所以必须避开程序区。所以【地址选择不当的话,会擦除EE时把程序部分擦除了】!
是这样的吗?
但是如果我想用IAP15W61S4的EEPROM功能,存储大量的字符数据,那我的EEPROM的起始地址需要根据程序大小来确定吗?
(97.05 KB, 下载次数: 2)
13:41 上传
关于地址的说明
一般用后面的扇区做数据存储,在编译器中,设置程序区的大小,这样,如果程度超出范围,编译时就知道了。
一般用后面的扇区做数据存储,在编译器中,设置程序区的大小,这样,如果程度超出范围,编译时就知道了。 ...
这是个好办法。可是我不知道该如何实现。。大侠,帮忙帮到底吧
如何在编译器中,设置程序区的大小呢?
选择单片机型号,这种型号的就是固定的ROM大小,编译器就知道了。
如果是固定不变的数据,直接用CODE指定就好了。
IAP是统一编址的,用户要自己划分EEPROM区,不要跟程序重叠。建议从61K的后面往前来安排EEPROM。
本帖最后由 小10哦 于
09:02 编辑
这个芯片是需要用户根据使用的大小 自主划分
(128.71 KB, 下载次数: 0)
08:47 上传
在程序开头定义一下EEPROM的起始地址,跟STM32的使用方法类似!
好的 谢谢大家的回答&&
我知道该怎么做了
阿莫电子论坛, 原"中国电子开发网"}

我要回帖

更多关于 iap15w4k58s4引脚图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信