微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > STC12C5A60S2内部PWM模块及其程序

STC12C5A60S2内部PWM模块及其程序

时间:07-08 来源: 点击:

  在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60K FLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。而且STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。

  PWM(2路)/PCA(可编程计数器阵列,2路):

  ——也可用来当2路D/A使用

  ——也可用来再实现2个定时器

  ——也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);

  

  STC12C5A60S2内部PWM模块程序:

  **********************************************

  说明: 单片机的PCA_PWM使用,60S2只有两个PWM输出,分别是1.3和1.4,也可以通过AUXR设置到P4口。

  /*********************************************/

  #include《reg51.h》

  #include《intrins.h》

  #define uchar unsigned char

  #define uint unsigned int

  //新一代 1T 8051系列 单片机PCA/PWM 特殊功能寄存器

  // 7 6 5 4 3 2 1 0 Reset Value

  sfr CCON = 0xD8; //PCA 控制寄存器。 CF CR - - - - CCF1 CCF0 00xx,xx00

  //-----------------------

  sbit CF = CCON^7; //PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。

  sbit CR = CCON^6; //1:允许 PCA 计数器计数, 必须由软件清0。

  //-

  //-

  sbit CCF1 = CCON^1; //PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。

  sbit CCF0 = CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。

  //-----------------------

  sfr CMOD = 0xD9; //PCA 工作模式寄存器。 CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,x000

  /*

  CIDL: idle 状态时 PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。

  CPS2: PCA 计数器脉冲源选择位 2。

  CPS1: PCA 计数器脉冲源选择位 1。

  CPS0: PCA 计数器脉冲源选择位 0。

  CPS2 CPS1 CPS0

  0 0 0 系统时钟频率 fosc/12。

  0 0 1 系统时钟频率 fosc/2。

  0 1 0 Timer0 溢出。

  0 1 1 由 ECI/P3.4 脚输入的外部时钟,最大 fosc/2。

  1 0 0 系统时钟频率, Fosc/1

  1 0 1 系统时钟频率/4,Fosc/4

  1 1 0 系统时钟频率/6,Fosc/6

  1 1 1 系统时钟频率/8,Fosc/8

  ECF: PCA计数器溢出中断允许位, 1--允许 CF(CCON.7) 产生中断。

  */

  //-----------------------

  sfr CL = 0xE9; //PCA 计数器低位 0000,0000

  sfr CH = 0xF9; //PCA 计数器高位 0000,0000

  //-----------------------

  // 7 6 5 4 3 2 1 0 Reset Value

  sfr CCAPM0 = 0xDA; //PCA 模块0 PWM 寄存器 - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000

  sfr CCAPM1 = 0xDB; //PCA 模块1 PWM 寄存器 - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000

  //ECOMn = 1:允许比较功能。

  //CAPPn = 1:允许上升沿触发捕捉功能。

  //CAPNn = 1:允许下降沿触发捕捉功能。

  //MATn = 1:当匹配情况发生时, 允许 CCON 中的 CCFn 置位。

  //TOGn = 1:当匹配情况发生时, CEXn 将翻转。

  //PWMn = 1:将 CEXn 设置为 PWM 输出。

  //ECCFn = 1:允许 CCON 中的 CCFn 触发中断。

  //ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn

  // 0 0 0 0 0 0 0 0x00 未启用任何功能。

  // x 1 0 0 0 0 x 0x21 16位CEXn上升沿触发捕捉功能。

  // x 0 1 0 0 0 x 0x11 16位CEXn下降沿触发捕捉功能。

  // x 1 1 0 0 0 x 0x31 16位CEXn边沿(上、下沿)触发捕捉功能。

  // 1 0 0 1 0 0 x 0x49 16位软件定时器。

  // 1 0 0 1 1 0 x 0x4d 16位高速脉冲输出。

  // 1 0 0 0 0 1 0 0x42 8位 PWM。

  //ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn

  // 0 0 0 0 0 0 0 0x00 无此操作

  // 1 0 0 0 0 1 0 0x42 普通8位PWM, 无中断

  // 1 1 0 0 0 1 1 0x63 PWM输出由低变高可产生中断

  // 1 0 1 0 0 1 1 0x53 PWM输出由高变低可产生中断

  // 1 1 1 0 0 1 1 0x73 PWM输出由低变高或由高变低都可产生中断

  //-----------------------

  sfr CCAP0L = 0xEA; //PCA 模块 0 的捕捉/比较寄存器低 8 位。 0000,0000

  sfr CCAP0H = 0xFA; //PCA 模块 0 的捕捉/比较寄存器高 8 位。 0000,0000

  sfr CCAP1L = 0xEB; //PCA 模块 1 的捕捉/比较寄存器低 8 位。 0000,0000

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top