当前位置:首页 > 单片机 > 单片机
[导读]MPC82G516为台湾笙泉公司生产的8位MCU,兼容8051。内建PCA功能6个模块,模块0—5对应P1.2—P1.7, P1.1为输入脉冲源ECI。本文记录了测试PCA的代码和过程,重点分析各寄存器的设置,还通过逻辑分析仪记录相关波形。ST

MPC82G516为台湾笙泉公司生产的8位MCU,兼容8051。内建PCA功能6个模块,模块0—5对应P1.2—P1.7, P1.1为输入脉冲源ECI。本文记录了测试PCA的代码和过程,重点分析各寄存器的设置,还通过逻辑分析仪记录相关波形。STC15F60S2等芯片也内建PCA功能,不过仅3模块,但功能更为丰富,设置编程过程大同小异,可参考。

1、相关寄存器:

寄存器

功能

地址

7

6

5

4

3

2

1

0

描述

CCON

控制

D8

CF

CR

CCF5

CCF4

CCF3

CCF2

CCF1

CCF0

CR:启停PCA总计数器

CF:PCA总计数器溢出标志

CCF0-5:各模块中断标志

CMOD

模式

D9

CIDL

CPS1

CPS0

ECF

CIDL:空闲模式是否计数

CPS1、CPS0:时钟源:12分.2分.T0.ECI.四选一

ECF:PCA计数溢出中断

AUXIE

中断

AD

EKB

ES2

EBD

EPCA

EADC

ESPI

EPCA:PCA中断开关

CCAPM

0-5

模块模式

DA-

DF

ECOM

0-5

CAPP

0-5

CAPN

0-5

MAT

0-5

TOG

0-5

PWM

0-5

ECCF

0-5

ECOMn 允许比较

CAPPn 上升CAPNn 下降

MATn 匹配CCFn位

TOGn 匹配翻转引脚电平

PWM脉宽调制输出

ECCFn 使能中断信号CCFn

CCAPnL

捕获

寄存器

EA-EF









比较:先设初值,与PCA比较

捕获:捕获PCA值到寄存器

CCAPnH

FA-FF









PCAP

WM0-5

PWM

模式

F2-

F7

ECA

PnH

0-5

ECA

PnL

0-5

PWM时作为第9位

用于设定占空比

CL、CH

PCA










PCA总计数器

AUXR1

引脚

8E

P4KB

P4PCA

P4SPI

P4S2

GF2

DPS

P4PCA:引脚切换到P4口

2、比较、捕获模式设置寄存器CCAPM0-5:

CCAPMn

16进值

有/无中断

功能

备注

-000 0000


无操作


-x10 000x

20/21

16位CEXn引脚上升沿触发捕获模式

捕获值不处理仅进中断,相当于增加了外部中断功能

-x01 000x

10/11

16位CEXn引脚下降沿触发捕获模式

-x11 000x

30/31

16位CEXn引脚有跳变沿触发捕获模式

-100 100x

48/49

16位软件定时器

均需进中断重设比较值,并清0中断标志,因此最小定时值>=5us。差别是定时器仅利用中断信号,高速输出则利用对应引脚电平的翻转

-100 110x

4C/4D

16位高速输出

-100 0010

42/

8位PWM

占空比=1-[ECAPnH,CCAPnL]/256






3、PCA功能使用步骤:

  1) 确定CCON=0x00;一般先清0

  2)确定CMOD=0x00;00不开PCA中断,01开;脉冲源为FSOC/12

  3)AUXIE = 0x04;打开PCA总中断开关,捕获及定时均要打开,PWM时可关闭

  4)设置各模块工作模式寄存器CCAPMn,见表2

  5)设置PCA计数器初值:CL=0;CH=0

  6)定时或高速输出时,需设置CCAPnL及CCAPnH值

  7)PWM功能时,需设置CCAPnH(及ECAPnH在PCAPWM寄存器中)

  8)启动PCA计数:CR=1;如有必要打开总中断:EA=1

  9)写中断处理函数,MPC82G516的PCA中断向量为10(53H),STC15F60S2为7


4、PCA功能逻辑图:


5、PCA中断逻辑示意图:

6、PCA中断向量

MPC82G516的PCA中断编号为10。STC15F60S2的中断矢量为7。


测试1:PCA总计数器溢出中断

思路:不使用任何模块,仅启动PCA总计数器,为方便观察,开通中断并在中断处理程序中设置观察变量(P2.1)作电平翻转,再用逻辑分析仪观察其变化。

步骤:

1、CCON清0,各中断标志清0,关闭PCA计数

2、CMOD:设置脉冲源,置位ECF(允许总PCA计数溢出中断)

3、打开各级中断:AUXIE中设EPCA,开总中断EA

4、启动PCA:CR=1

在p2.1可观察到65.536宽度电平翻转。程序如下:

程序:

#include "REG_MPC82G516.H"

#include "intrins.h"

sbit LED =P2^1;//测试LED

void PCA_isr() interrupt 10 //注意中断向量号为10,STC15F为7

{

CF=0;//清中断

LED=!LED;//LED取反

}

void main()

{

CCON=0;

CL=0;

CH=0;

CMOD=0x01;//12分频。使用0x03则为系统时钟2分频

AUXIE=0x04;

EA=1;

CR=1;

while(1);

}

FOSC/12:PCA计数每65.531ms溢出一次(理论值应为65.536ms)

如果改脉冲源为FOSC/2:PCA计数每10.922ms溢出一次


测试2:PCA模块0用作捕获模式,CEX0引发中断

思路:

模块0设置为捕获模式,捕获信号由模块0对应的引脚P1.2输出,可上升、下降或边缘触发,具体通过设置CCAPM0来实现,见表2。

下降沿触发捕获:CCAPM0=0x11 (00010001),即CAPN0=1、ECCF0=1可直接短接CEX0/P1.2与地来获得下降沿;

上升沿触发捕获:CCAPM0=0x21 (00100001) 需先短接CEX0/P1.2与地、再释放来获得上升沿;

注意MCU的四个端口复位后均为“准双向口”,开路时内部有弱上拉。

当CEX0触发捕获时,捕获到的数据并不作处理(如带仿真,可仿真时查看到该捕获值),因此本程序相当于为单片机增加了一个外部中断功能。

程序:

#include "REG_MPC82G516.H"

#include "intrins.h"

sbit LED =P2^1;//测试LED

sbit LED2=P2^2;//接LED观察

void PCA_isr() interrupt 10

{

unsigned charTmpL;//临时变量,暂存捕获值

unsigned charTmpH;

//CF=0; //清中断(PCA计数溢出,这里不必使用)

LED=!LED;//LED取反

if (CCF0)//当CEX0(P1.2)触发捕获时,引发中断CCF0

{

TmpL=CCAP0L;

TmpH=CCAP0H;

CCF0=0;//软件清中断

//P12=1;//拉高测试引脚,用于下次下降沿触发

LED2=!LED2;//可接发光二极管观察中断产生情况

}

}

void main()

{

CCON=0;

CL=0;

CH=0;

CMOD=0x00;//模式:FSOC/12、ECF禁止PCA中断(以免产生无效中断)

AUXIE=0x04;//打开PCA总中断

CCAPM0 =0x11;//模块0设置为外部引脚上升沿触发捕获模式,并产生模块0的中断信息CCF0

EA=1;

CR=1;

//P12=1;

while(1);

}


测试3:PCA模块0、1用作16位定时模式

思路:

PCA各模块如用作定时器,因16位PCA计数器启动后,总是从0000—FFFF循环计数,比较寄存器[CCAPnH + CCAPnL]如装载固定值的话,每个PCA计数周期(65535个脉冲)只能产生一次比较相同输出,为了实现自定义的计数值,必须在每次计数中断后给[CCAPnH + CCAPnL]加一个固定值,这样PCA计数到新值后又能产生中断输出,达到定时器的目的;

编程步骤:

  1) CCON清0,各中断标志清0,关闭PCA计数

  2)CMOD:设置脉冲源,置位ECF(允许总PCA计数溢出中断)

  3)PCA计数器CH+CL=0000,比较寄存器[CCAPnH + CCAPnL]+=T(T为定时值)

  4)设置本模块工作方式为16位定时器:CCAPM0 =0x49

  5)打开各级中断:AUXIE=0x04 开总中断EA

  6) 启动PCA:CR=1

  7) 中断处理程序:添加代码 [CCAPnH + CCAPnL]+=T,作为下次比较值

  观察办法:

在中断程序中设置变量LED/P2.1(模块1用LED2),每次中断反转以输出方波(接逻辑仪分析)

  代码:(模块0定时1ms,模块1定时3ms)

#include "REG_MPC82G516.H"

#include "intrins.h"

sbit LED =P2^1;//测试LED

sbit LED2=P2^2;//接LED观察

unsigned int t0=1000;//定义16位变量t,定时1ms

unsigned int t1=3000;//定义16位变量t,定时3ms

unsigned int value0;

unsigned int value1;

void PCA_isr() interrupt 10

{

if(CCF0)

{

CCF0=0;//清中断,因PCA计数溢出中断已禁止,所以这里不必再清CF

CCAP0L = value0; //更新比较值

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

PLC(可编程逻辑控制器)和单片机是两种不同的控制设备,它们之间存在明显的区别:

关键字: 单片机 plc 控制器

Holtek隆重推出全新一代32-bit Arm® Cortex®-M0+ 5V CAN MCU - HT32F53231/HT32F53241/HT32F53242/HT32F53252。这一系列单片机带有来自Bosc...

关键字: MCU 工业自动化 单片机

Holtek精益求精,宣布推出全新5V宽电压Arm® Cortex®-M0+ 32-bit MCU系列HT32F50431/HT32F50441/HT32F50442/HT32F50452。此系列MCU经多方位升级能满...

关键字: 单片机 智能家居 工业控制
关闭
关闭