找回密码
 立即注册
查看: 520|回复: 1

STC8G1K08A输入捕获测不出脉冲宽度

[复制链接]

该用户从未签到

1

主题

0

回帖

17

积分

新手上路

积分
17
发表于 2023-7-4 10:56:40 | 显示全部楼层 |阅读模式
本帖最后由 大量出1nm光刻机 于 2023-7-4 11:00 编辑


length无法测出1KHz的一个周期的
STC8G1K08A输入捕获测不出脉冲宽度-1.png

STC8G1K08A输入捕获测不出脉冲宽度-2.png

#include "STC8xxxx.h"
#include "intrins.h"


#define ZERO P31
#define PWMIN P32
#define PWMOUT P33


       

int flag;
unsigned short count;
unsigned short count0;
unsigned short count1;
unsigned short pwmDutyCycle;
unsigned short pwm;
unsigned short length;


void INT0_Isr() interrupt 0//将高电平的计数值存入count0
{
        ((unsigned short*)&count0)[1] = TL0;
        ((unsigned short*)&count0)[0] = TH0;
}

void TM1_Isr() interrupt 3//输出PWM的低电平
{
  TR1 = 0;       
        PWMOUT = 0;       
        flag = 1;
}


void PCA_Isr() interrupt 7//上升沿捕获一个PWM周期的宽度的计数值
{

        if(CCF0)//PCA捕获中断标志位
        {
                CCF0 = 0;
               
                count = count1;
               
                ((unsigned char*)&count1)[1] = CCAP0L;
                ((unsigned char*)&count1)[0] = CCAP0H;
               
                length = count1 - count;
        }
}


void main()
{
        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;
       
flag = 1;
count0 = 0;
count1 = 0;
pwmDutyCycle = 0;
pwm = 0;
AUXR = 0x00;//12T模式
TMOD = 0x09;//定时器0,GATE置1,不自动重装载
CCON = 0x00;
CMOD = 0x00;//PCA,12分频
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x21;//上升沿捕获
CCAP0L = 0x00;
CCAP0H = 0x00;
TL0 = 0x00;
TH0 = 0x00;
TL1 = 0x00;
TH1 = 0x00;
TR0 = 0;//开启定时器0
IT0 = 1;//使能INT0下降沿
EX0 = 1;//使能INT0中断
CR = 1;//开启PCA计数器
ET0 = 1;//使能定时器0中断
ET1 = 1;//使能定时器1中断
EA = 1;//开启总中断
P54 = 1;
P55 = 1;

while(1)
{
        //输入捕获1kHz的PWM,并输出相同占空比的50Hz的PWM
        pwmDutyCycle = count0 / length;//占空比
        pwm = 65536 - 65536 * pwmDutyCycle;//50Hz的PWM的高电平的装载值
       
        if(ZERO == 0&&flag == 1)
        {
                TL1 = ((unsigned char*)&pwm)[1];
                TH1 = ((unsigned char*)&pwm)[0];
                TR1 = 1;//开启定时器1
                PWMOUT = 1;
                flag = 0;
        }       

}
}



回复 送花

使用道具 举报

该用户从未签到

46

主题

3053

回帖

6883

积分

超级版主

积分
6883
发表于 2023-7-13 17:10:54 | 显示全部楼层
PCA测周期很方便的,捕捉同一个边沿即可。
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-21 05:09 , Processed in 0.054931 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表