欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3253|回復(fù): 5
收起左側(cè)

STC8H單片機PWM捕獲問題

[復(fù)制鏈接]
回帖獎勵 4 黑幣 回復(fù)本帖可獲得 4 黑幣獎勵! 每人限 1 次
ID:773929 發(fā)表于 2023-8-7 12:41 | 顯示全部樓層 |閱讀模式
請教各位大佬,使用STC8H8K64單片機的PWM捕獲功能捕獲紅外接收頭的脈沖,也可以說是任意脈沖,但是遇到了一些問題,根據(jù)stc isp軟件商的例程,我將捕獲高電平脈沖寬度和捕獲低電平寬度結(jié)合起來,這樣就可以測出高低電平脈沖寬度了,但是測試的時候發(fā)現(xiàn)單獨測高電平正常,測到了23個,低電平也正常,但是結(jié)合起來后,高低電平一共才測到二十幾個,而且數(shù)值還不正確,求大佬解答!
程序:

#include "stc8H.h"
#include "intrins.h"
#include <stdio.h>
#include "uart.h"

#define VAL 300
unsigned int captures[VAL];
unsigned int num = 0;
unsigned int Overflow = 0; //溢出次數(shù)

void IR()
{
    P1M0 = 0x00;
    P1M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    P_SW2 = 0x80;

    PWM1_PS = 0x05;

    //(CC1捕獲TI1上升沿,CC2捕獲TI1下降沿)
    PWMA_CCER1 = 0x00;
    PWMA_CCMR1 = 0x01;                          //CC1為輸入模式,且映射到TI1FP1上
    PWMA_CCMR2 = 0x02;                          //CC2為輸入模式,且映射到TI1FP2上
    PWMA_CCER1 = 0x11;                          //使能CC1/CC2上的捕獲功能
    PWMA_CCER1 |= 0x00;                         //設(shè)置捕獲極性為CC1的上升沿
    PWMA_CCER1 |= 0x20;                         //設(shè)置捕獲極性為CC2的下降沿
    PWMA_CR1 = 0x01;

    PWMA_IER = 0x04;                            //使能CC2捕獲中斷
                PWMA_IER |= 0x02;                            //使能CC1捕獲中斷
    EA = 1;
}




void PWMA_ISR() interrupt 26
{
    unsigned int cnt_l;
                unsigned int cnt_h;
        

    if (PWMA_SR1 & 0x02)
    {
        PWMA_SR1 &= ~0x02;

        cnt_l = (PWMA_CCR1 - PWMA_CCR2)/6;            //差值即為低電平寬度  cnt/時鐘頻率 = 脈寬(us)
                                
                                
                                UartSendUint((unsigned int)cnt_l);
                                UartSendString("-low\r\n");
                        
    }
               
                 

    if (PWMA_SR1 & 0x04)
    {
        PWMA_SR1 &= ~0x04;

        cnt_h = (PWMA_CCR2 - PWMA_CCR1)/6;            //差值即為高電平寬度
        UartSendUint((unsigned int)cnt_h);
                                UartSendString("-high\r\n");
    }
}


void main()
{
        IR();
  UartInit();
  //UartSendString("Starting\r\n");
        //UartSendUint(1211);
        while(1)
        {
               
        }
}

1.png
2.png
3.png
回復(fù)

使用道具 舉報

ID:773929 發(fā)表于 2023-8-7 15:52 | 顯示全部樓層
找到問題了,串口發(fā)送數(shù)據(jù)的時間影響了測量
回復(fù)

使用道具 舉報

ID:126987 發(fā)表于 2023-8-7 16:34 | 顯示全部樓層
串口發(fā)送數(shù)據(jù)會影響PWM測量,需要把PWM的中斷優(yōu)先級提高到0。
回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2023-8-7 20:47 | 顯示全部樓層
范莉萍 發(fā)表于 2023-8-7 15:52
找到問題了,串口發(fā)送數(shù)據(jù)的時間影響了測量

不明白,串口發(fā)送數(shù)據(jù)怎么影響了測量?都用的中斷,各自不影響的。對MCU來說,這兩個任務(wù)都是很簡單的任務(wù),不需要消耗多少CPU時間的。
回復(fù)

使用道具 舉報

ID:773929 發(fā)表于 2023-8-9 11:26 | 顯示全部樓層
coody_sz 發(fā)表于 2023-8-7 20:47
不明白,串口發(fā)送數(shù)據(jù)怎么影響了測量?都用的中斷,各自不影響的。對MCU來說,這兩個任務(wù)都是很簡單的任 ...

串口發(fā)送用的不是中斷,接收用了中斷,算了一下,發(fā)送這些字符得1ms左右
回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2023-8-9 14:35 | 顯示全部樓層
范莉萍 發(fā)表于 2023-8-9 11:26
串口發(fā)送用的不是中斷,接收用了中斷,算了一下,發(fā)送這些字符得1ms左右

有中斷不用,中斷發(fā)送效率高,一個字節(jié)只需要2us左右就可以裝載完。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表