fenglingcj 发表于 2025-1-2 10:37:43

能否帮忙看一下,电压用的是3.3V,AI8051U为什么发送的PWM,无法测量?中断都无法进

//========================================================================
//函数: void Init_pwma()
//描述: 输出PWMA初始化,输出针脚P0.0
//参数: none.
//返回: none.
//版本: V1.0, 2024-12-27
//========================================================================
void Init_pwma()

{
cnt1=(PWMA_T1-1);
cnt2=(PWMA_T1-1)>>1;      
PWMA_PS=0x01;//      定义输出0.0
PWMA_PSCRH=(PSCRA-1)>>8;//      预分频24
PWMA_PSCRL=(PSCRA-1);
PWMA_CCER1=0x00;
PWMA_CCMR1=0x00;
PWMA_CCMR1=0x60;
PWMA_CCER1=0x01;
PWMA_ARRH=cnt1>>8;      
PWMA_ARRL=cnt1;
PWMA_CCR1H=cnt2>>8;
PWMA_CCR1L=cnt2;
PWMA_ENO=0x01;
PWMA_BKR=0x80;
PWMA_CR1=0x01;

//========================================================================
//函数: void capture_inst(void )
//描述: 捕获PWMA频率和占空比 输入脚P0.0
//参数:
//返回: none.
//版本: V1.0, 2024-12-27
//========================================================================
void capture_inst(void)
{
      PWMB_PS=0x00;//输入脚P3.3
      PWMB_CCER1=0x00;
      PWMB_CCMR1=0x01;//IC5映射在TI5FP5
      PWMB_CCMR2=0x02;//IC6映射在TI5FP6
      PWMB_SMCR=0x00;
      PWMB_SMCR=0x54;
      PWMB_CCER1=0x31;//IC5,IC6开启并IC5上升沿,IC6下降沿
      PWMB_CR1=0x01;
      PWMB_IER=0x06;

//      
//      PWMA_PS=0x00;//输入脚P3.3
//      PWMA_CCER1=0x00;
//      PWMA_CCMR1=0x01;//IC5映射在TI5FP5
//      PWMA_CCMR2=0x02;//IC6映射在TI5FP6
//      PWMA_SMCR=0x00;
//      PWMA_SMCR=0x54;
//      PWMA_CCER1=0x31;//IC5,IC6开启并IC5上升沿,IC6下降沿
//      PWMA_CR1=0x01;
//      PWMA_IER=0x06;

      
      
      
      
      
      
      
      
      
      
      
      }
//========================================================================
//函数: void PWMB_ISR() interrupt 27
//描述: 中断捕获,cnt3为周期,cnt4为占空比
//参数:
//返回: none.
//版本: V1.0, 2024-12-27
//========================================================================
      
void PWMB_ISR() interrupt 27
{
      P13=~P13;
      
      if(PWMB_SR1&0x02)
                {      
                        PWMB_SR1&=~0x02;
                        
                cnt3=(PWMB_CCR5H<<8)+PWMB_CCR5L;   
                        
                        
                        }
      if(PWMB_SR1&0x04)
                {      
                        PWMB_SR1&=~0x04;
                        cnt4=(PWMB_CCR6H<<8)+PWMB_CCR6L;;

                        }               
                        
                        

      }




void main()
{


      
P_SW2=0x80;
CKCON=0x00;
WTST=0x00;
P0M0=0x01;
P0M1=0x00;
P1M0 =0x00; P1M1 = 0x00;
P2M0=0x00;   P2M1=0x00;
P3M0=0x00;   P3M1=0x00;
P5M0 = 0x00; P5M1 = 0x00;
P3NCS |= 0x08;
P0=0x00;P1=0x00;P2=0x00;P5=0x00;      

P33=0;      
capture_inst( );      
Delay10ms();                        
Init_pwma();

Delay10ms();      

EA=1;

ES = 1;

}      

_奶咖君_ 发表于 2025-1-2 10:54:21

<p>先在main函数的最后加个while(1);再试一试<img alt="xiaojiujie" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/xiaojiujie.gif" title="xiaojiujie" /></p>

fenglingcj 发表于 2025-1-2 11:06:21

        while(1)
        {
        if(!P36)        IAP_CONTR = 0x60;
//        TX1_write2buff(0x55);
//        TX1_write2buff(0xAA);       
//       
////        TX1_write2buff(cnt3>>8);
////        TX1_write2buff(cnt3);
////   TX1_write2buff(cnt4>>8);
////        TX1_write2buff(cnt4);
//        }
程序是带了while(1);但是中断一直无法进入,P13一直不变化;也没有找到什么原因?

fenglingcj 发表于 2025-1-2 11:09:04

用示波器也打过,P0.0发出方波,但是PWMB无法捕获,P13一直无变化

fenglingcj 发表于 2025-1-2 11:12:17

硬件连接是P0.0直接连接到P3.3

梁工 发表于 2025-1-2 15:24:03

你的主程序没有大循环。

请参考我的例程:


fenglingcj 发表于 2025-1-2 16:58:44

谢谢梁工提供材料,问题已经找到了,PWMB的IC5针脚实际是P0.1,之前一直按P3.3来测试,所以测不到边沿信号

fenglingcj 发表于 2025-1-2 17:01:01


fenglingcj 发表于 2025-1-2 17:01:55

看错了哈!!
页: [1]
查看完整版本: 能否帮忙看一下,电压用的是3.3V,AI8051U为什么发送的PWM,无法测量?中断都无法进