STC12C5A60S2 P1.3口输出40%占空比PWM,当P3.0口电平跳变时输出60%的PWM波1秒的程序怎么写

2019-07-15 14:20发布

具体问题是这样的。一开始给STC12C5A60S2 P3.0口一个高电平。然后STC12C5A60S2 P1.3口自动输出一个占空比40%的PWM波。再然后给P1.3口一个低电平,此时要求STC12C5A60S2 的P1.3口自动输出1s的60%占空比的PWM波,1s时间到了之后拉低P1.3口电平,我尝试写了下程序,总是不能成功实现。求哪位大神帮忙看看啊


#include  <reg52.h>
#include "delay.h"
#define FOSC  18432000L
//Declare SFR associated with the PCA 声明与PCA相关联的SFR
sfr CCON = 0xD8; //PCA control register PCA控制寄存器
sbit CCF0 = CCON^0; //PCA module-0 interrupt flag PCA模块0中断标志
sbit CCF1 = CCON^1; //PCA module-1 interrupt flag PCA模块1中断标志
sbit CR = CCON^6; //PCA timer run control bit PCA定时器运行控制位
sbit CF = CCON^7; //PCA timer overflow flag PCA定时器溢出标志
sfr CMOD = 0xD9; //PCA mode register PCA模式寄存器
sfr CL = 0xE9; //PCA base timer LOW PCA基定时器低
sfr CH = 0xF9; //PCA base timer HIGH PCA基定时器高
sfr CCAPM0 = 0xDA; //PCA module-0 mode register PCA模块0模式寄存器
sfr CCAP0L = 0xEA; //PCA module-0 capture register LOW PCA模块0捕捉寄存器低
sfr CCAP0H = 0xFA; //PCA module-0 capture register HIGH PCA模块0捕捉寄存器高
sfr CCAPM1 = 0xDB; //PCA module-1 mode register PCA模块1模式寄存器
sfr CCAP1L = 0xEB; //PCA module-1 capture register LOW PCA模块1捕捉寄存器低
sfr CCAP1H = 0xFB; //PCA module-1 capture register HIGH PCA模块1捕捉寄存器高
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
sbit  P30 = P3^0;
void main()
{
        CCON=0;
        CL=0;
        CH=0;
        CMOD=0x02;
        CCAP0H=CCAP0L=0x60;
        CCAPM0=0X42;
        CR=1;
loop:if (P30==1)
        {
         goto loop;
        }
        else
        {
          CCON=0;
          CL=0;
      CH=0;
      CMOD=0x02;
      CCAP0H=CCAP0L=0xA0;
      CCAPM0=0X42;
            CCAP1H=CCAP1L=0xff;
      PCAPWM1=0x03;
      CCAPM1=0X42;
      CR=1;  
        }
    delay(1000);
    CCON=0;
        CL=0;
        CH=0;
        CMOD=0x02;
        CCAP0H=CCAP0L=0x80;
        CCAPM0=0X42;
        CR=1;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
陈凤林
1楼-- · 2019-07-15 15:53
哦,程序的最后我写的是输出50%的占空比的pwm波,拉低的没写,总之是运行不出来的。期望大神帮我调试一下程序
逸興遄飛
2楼-- · 2019-07-15 21:13
陈凤林 发表于 2016-4-19 22:59
哦,程序的最后我写的是输出50%的占空比的pwm波,拉低的没写,总之是运行不出来的。期望大神帮我调试一下程序

描述的不够清楚哦
langzitianya
3楼-- · 2019-07-16 01:37
 精彩回答 2  元偷偷看……
陈凤林
4楼-- · 2019-07-16 02:30
langzitianya 发表于 2016-4-20 07:05
一开始给STC12C5A60S2 P3.0口一个高电平。然后STC12C5A60S2 P1.3口自动输出一个占空比40%的PWM波。????P1.3是输入还是输出?

P1.3口是输出PWM波形
陈凤林
5楼-- · 2019-07-16 05:02
逸興遄飛 发表于 2016-4-19 23:33
描述的不够清楚哦

首先让STC12C5A60S2的p1.3口输出一个占空为40%的PWM波,然后单片机实时监测P3.0口电平(一开始P3.0口是高电平),当P3.0口电平由高变低后,STC12C5A60S2的P1.3口输出占空比为60%的PWM波,而且只输出1s的时间,1秒时间到了之后就停止输出PWM波(或者让P1.3口输出低电平也可以)。我现在编写的程序可以实现一开始的40%的pwm输出,当检测到p3.0口低电平后也可以输出1s的60%pwm波,但是1s过后怎么也实现不了P1.3口的pwm关闭或者拉低。求大神帮我看下程序到底错在哪里了。我回去后又用汇编编写了一遍,也贴在这里吧
逸興遄飛
6楼-- · 2019-07-16 10:56
陈凤林 发表于 2016-4-20 18:29
首先让STC12C5A60S2的p1.3口输出一个占空为40%的PWM波,然后单片机实时监测P3.0口电平(一开始P3.0口是高电平),当P3.0口电平由高变低后,STC12C5A60S2的P1.3口输出占空比为60%的PWM波,而且只输出1s的时间,1秒时间到了之后就停止输出PWM波(或者让P1.3口输出低电平也可以)。我现在编写的程序可以实现一开始的40%的pwm ...

不好意思 彙編早忘了 但是按你說的情況的話  1秒时间到了之后就停止输出PWM波應該不難做到,關鍵就是1S定時 時間到了關掉P1.3口輸出即可 你指的:当检测到p3.0口低电平后也可以输出1s的60%pwm波,但是1s过后怎么也实现不了P1.3口的pwm关闭或者拉低 ,意思是1s过后 60%pwm波還在輸出?

一周热门 更多>