首页 > 应用 > 单片机应用
[导读]
/*==============================================================at12c2052所带的PWM功能演示,内部公用了一个定时器,当启动PWM时PCA定时器只工作在8位模式,匹配比较器也是按8位的。本程序演示了P

/*==============================================================
at12c2052所带的PWM功能演示,内部公用了一个定时器,当启动PWM时PCA
定时器只工作在8位模式,匹配比较器也是按8位的。本程序演示了PWM启动
的设置和调节。
改用在tasking c51下面编译,并尝试了tasking 方便的在线汇编方式
===============================================================*/
#include "STC12C2052AD.h"
/*#include*/
#define uintunsigned int
#define ucharunsigned char

uint i;
uchar upordn;/* 升降标志,1=上升 */
void initall(void);
_interrupt(1) void timers0(void);
_interrupt (6) void PCA_LVD(void);
void initall(void)
{
TMOD= 0x11;/* 0000 0001 T0作为16位计数器*/
TH0 = 0xc0;/* 定时器0初始值装入*/
TL0 = 0x00;
ET0 = 1;//开中断
IE |= 0x40;/* 使能PCA定时功能*/
EA= 1;
AUXR = 0x80;
/* 1000 0000
|||| ||++-保留
|||| |+---低电压中断允许:0=禁止,1=允许,5V..3.7V,3V..2.4V以下
|||| +----SPI中断允许位:0=禁止,1=允许
|||+------ADC中断允许位:0=禁止,1=允许
||+-------串口模式0时时钟设定:0=传统1/12, 1=1/2 2分频;
"+--------定时器ct1时钟源设定:0=传统1/12,1=1:1不分频;
+---------定时器ct0时钟源设定:0=传统1/12,1=1:1不分频;
*/
P1 = 0xff;
P1M0 = 0x00;/* P1口用传统51准双向口模式 */
P1M1 = 0x00;
CMOD = 0x03;/* 内部时钟,Fosc/2, PCA计数溢出中断使能*/
/* 0000 0011 PCA 模式寄存器
|||| |||+--ECF...PCA计数溢出中断使能:ECF=1时,使能寄存器CCON CF位的
|||| |||中断。ECF=0时,禁止该功能。
|||| |++---CPS1,CPS0 选择PCA 时钟源输入(PCA计数脉冲选择)
|||| |000,内部时钟,Fosc/12
|||| |011,内部时钟,Fosc/2
|||| |102,定时器0溢出,由于定时器0可以工作在1T方式,
|||| |所以可以达到计一个时钟就溢出,频率反而
|||| |是最高的,可达到Fosc
|||| |113,ECI/P3.4脚的外部时钟输入(最大速率=Fosc/2)
|+++-+-----保留
+----------CIDL...计数器阵列空闲控制:CIDL=0时,空闲模式下PCA计数器
继续工作。CIDL=1时,空闲模式下PCA计数器停止工作。
*/

CH = 0x00;/* PCA计数器初始值高8位 */
CL = 0x00;/* PCA计数器初始值低8位 */
CCAP0H = 0x00;/* 当出现捕获或比较时,它们用来保存16 位的计数值。
当PCA 模块用在PWM 模式中时,它们用来控制输出的
占空比。CCAP0H.CCAP0L分别为高低8位,组合使用
*/
CCAP0L = 0x00;

CCAP1H = 0x00;/* 当出现捕获或比较时,它们用来保存16 位的计数值。
当PCA 模块用在PWM 模式中时,它们用来控制输出的
占空比。CCAP1H.CCAP1L分别为高低8位,组合使用
*/
CCAP1L = 0x00;

CCAPM1 = 0x4c;/* PCA 比较/捕获模块寄存器1作为16位软件定时器。使能
比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将
置位CCON寄存器的中断标志位CCF1,使能CCF1中断 */
/*
0100 1100功能说明
|||| |||+---ECCF1.. 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,
|||| |||用来产生中断。
|||| ||+----PWM1... 脉宽调节模式。当PWMn=1时,使能CEXn脚用作脉宽调节输出。
|||| |+-----TOG1... 翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄存
|||| |器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)
|||| +------MAT1... 匹配。当=1时, PCA计数值与模块的比较/捕获寄存器的值
||||的匹配将置位CCON寄存器的中断标志位CCF1。
|||+--------CAPN1.. 负捕获。CAPN1= 1时使能下降沿捕获。
||+---------CAPP1.. 正捕获。CAPP1= 1时使能上升沿捕获。
|+----------ECOM1.. 使能比较器。ECOM1= 1时使能比较器功能。
+-----------CCAPM1^7保留

使用的机种基本模式组合:
ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1模块功能
0000000无此操作
X10000X16位捕获模式,由CEX1的上升沿触发
X01000X16位捕获模式,由CEX1的下降沿触发
X11000X16位捕获模式,由CEX1的跳变触发
100100X16位软件定时器
100110X16位高速输出
10000108位PWM
*/

CCAPM0 = 0x42;/* PCA 比较/捕获模块寄存器0作为16位软件定时器。使能
比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将
置位CCON寄存器的中断标志位CCF0,使能CCF0中断 寄存器
位功能同上*/
CR = 1;//Start PCA Timer.
TR0 = 1;//启动计时
i = 0;
upordn = 1;
}

/* ------------- 定时器0用来定时调节PWM的输出占空比 ------------- */
_interrupt(1) void timers0(void)
{
TL0 = 0x00;
TH0 = 0xc0;

CCAP0H = i>>8;/* CCAP0L不用赋值,他不参与工作 */
if(upordn)/* 逐步加宽PWM、加快脉冲输出*/
{
if(++i==65535)/* 到头 */
{
upordn=0;/* 调头 */
}
}
else/* 逐步减窄PWM、减慢脉冲输出*/
{
if(--i==0)/* 到头 */
{
upordn=1;/* 调头 */
}
}

P1 = ~(i>>8);/* 高8位输出LED指示,作监视用*/
}

/* ------------ PCA 定时中断,负责清除溢出标志并赋初值 ------------- */
/* 摇晃编程板可以看到P3.5连接的led闪亮频率的缓慢变化,虚线在变长变短 */
_interrupt (6) void PCA_LVD(void)
{
CH = i>>8;
CL = i&0xff;
CF = 0;
CCF0 = 0;
//LedPCA ^= 1;/* 频率要求不高的时候这里可以插入用户代码 */
}

void main(void)
{
initall();

// 测试tasking c51的在线汇编功能
#pragma asm
mov r0,#0f0h
v1:nop
nop
djnz r0,v1
nop
#pragma endasm
// 编译很顺利通过,不用作任何附加的设定
while(1){};
}

本文引用地址: http://www.21ic.com/app/mcu/201807/765047.htm

换一批

延伸阅读

[单片机应用] 单片机通信时序解析

单片机通信时序解析

随着我们对通信技术的深入学习,大家要逐渐在头脑中建立起时序这种概念。所谓“时序”从字面意义上来理解,一是“时间问题”,二是“顺序问题”。先说“顺序问题”,这个相对简单一些。我们在学 UART 串口通信的时候......

关键字:单片机 通信时序

[单片机应用] 51单片机学习笔记,操作1602液晶

51单片机学习笔记,操作1602液晶

TX-1C板操作并行模式的1602液晶液晶第1,2脚是gnd和vcc第3脚是对比度调节第4脚是数据/指令选择端RS第5脚是读写选择端R/W,我们这次只写不读,故直接接地第6脚是读写使能EN第7到14脚是数据口,我们接STC89C52RC的P......

关键字:51单片机 1602液晶

[单片机应用] STM32F103RCT6的脉冲宽度调制(PWM)的输出设定

STM32F103RCT6的脉冲宽度调制(PWM)的输出设定

关键词:重映射连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。连接在APB2(高速外设)上的设备有:UAR......

关键字:STM32F103RCT6 脉冲宽度 PWM 输出设定

[单片机应用] ARM7单片机(学习ing)—(一)、输入/输出端口GPIO编程—02

ARM7单片机(学习ing)—(一)、输入/输出端口GPIO编程—02

一、输入/输出端口GPIO编程一—(02)、控制LCD1602显示~~废话不多说了~~直接上图~~然后是程序~~MDK1_2.c//------------------------------------------------------......

关键字:ARM7 单片机 GPIO编程

[单片机应用] 固态继电器在PIC单片机控制的多回路温度检测系统的应用

固态继电器在PIC单片机控制的多回路温度检测系统的应用

1.引言 对于塑料制瓶工艺, 塑料加热处于溶融状态, 经高压注射成为管胚, 短时间冷却以后, 经过高压空气的吹胀, 在制瓶模具中成型。其工艺特点之一是: 溶融状态下的塑料定时流动; 成为管胚之后, 将与外部空气接触 2......

关键字:固态继电器 PIC 单片机控制 温度检测系统

[单片机应用] 单片机程序有多大 怎么看

单片机程序有多大 怎么看

这个问题,在我接触的单片机初学者当中,很多人都遇到过,是什么问题呢?给大家举个栗子:先介绍一下常识:hex文件,就是我们要下载到单片机中的程序文件,而每一种单片机,都有一定的程序存储空间,一般就是多少K的......

关键字:单片机 程序

[行业观察] CITE2018:海尔智慧家庭展厅,带给我们全新的生活方式

CITE2018:海尔智慧家庭展厅,带给我们全新的生活方式

最近坊间流传着这么一个冷笑话: 都说小孩子能看见一些别人看不到的东西,你还真别不信,朋友家的孩子说能看见自己家空调上有两个小孩,这下给大人们吓着了,请法师做法,来来回回用尽了各种办法,最后小孩说还是能......

关键字:CITE2018 海尔 智慧家庭

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客