大量出1nm光刻机 发表于 2023-7-4 10:56:40

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

本帖最后由 大量出1nm光刻机 于 2023-7-4 11:00 编辑


length无法测出1KHz的一个周期的




#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) = TL0;
        ((unsigned short*)&count0) = 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) = CCAP0L;
                ((unsigned char*)&count1) = 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);
                TH1 = ((unsigned char*)&pwm);
                TR1 = 1;//开启定时器1
                PWMOUT = 1;
                flag = 0;
        }       

}
}



梁工 发表于 2023-7-13 17:10:54

PCA测周期很方便的,捕捉同一个边沿即可。
页: [1]
查看完整版本: STC8G1K08A输入捕获测不出脉冲宽度