能否帮忙看一下,电压用的是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;
}
<p>先在main函数的最后加个while(1);再试一试<img alt="xiaojiujie" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/xiaojiujie.gif" title="xiaojiujie" /></p>
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一直不变化;也没有找到什么原因? 用示波器也打过,P0.0发出方波,但是PWMB无法捕获,P13一直无变化 硬件连接是P0.0直接连接到P3.3 你的主程序没有大循环。
请参考我的例程:
谢谢梁工提供材料,问题已经找到了,PWMB的IC5针脚实际是P0.1,之前一直按P3.3来测试,所以测不到边沿信号
看错了哈!!
页:
[1]