#include <msp430f5529.h>\n#define CPU_F (((double)1000000)) // 定义CPU频率为1MHz\n#define delay_us(x) __delay_cycles(((long)(CPU_F*(double)x/1000000.0))) // 定义延时函数,单位为微秒\n#define delay_ms(x) __delay_cycles(((long)(CPU_F*(double)x/1000.0))) // 定义延时函数,单位为毫秒\n\nunsigned int DC_motor=100; // 定义直流电机的占空比\nunsigned int i=100; // 定义计数器变量\n\nvoid Duoji_init()\n{\n\tP2DIR |= BIT0; // 将P2.0引脚设为输出模式\n\tP2SEL |= BIT0; // 将P2.0引脚设为TA1.1模式\n\tTA1CCR0 = 20000; // 设置TA1定时器计数器的上限值\n\tTA1CCTL1 = OUTMOD_7; // 设置TA1.1引脚输出模式为PWM模式\n\tTA1CCR1 = 1500; // 设置TA1.1引脚的占空比初始值\n\tTA1CTL = TASSEL_2 + MC_1 + TACLR ; // 设置TA1定时器的时钟源为SMCLK,计数模式为增计数,清除计数器\n}\n\nvoid DC_Motor_init()\n{\n\tP2DIR |= BIT4 + BIT5; // 将P2.4和P2.5引脚设为输出模式\n\tP2SEL |= BIT4 + BIT5; // 将P2.4和P2.5引脚设为TA2.1和TA2.2模式\n\tTA2CCR0 = 200; // 设置TA2定时器计数器的上限值\n\tTA2CCTL1 = OUTMOD_7; // 设置TA2.1引脚输出模式为PWM模式\n\tTA2CCR1 = 0; // 设置TA2.1引脚的占空比初始值\n\tTA2CCTL2 = OUTMOD_7; // 设置TA2.2引脚输出模式为PWM模式\n\tTA2CCR2 = 0; // 设置TA2.2引脚的占空比初始值\n\tTA2CTL = TASSEL_2 + MC_1 + TACLR ; // 设置TA2定时器的时钟源为SMCLK,计数模式为增计数,清除计数器\n}\n\nvoid main(void)\n{\n\tWDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器\n\tdelay_ms(1000); // 延时1秒\n\tDuoji_init(); // 初始化舵机\n\tDC_Motor_init(); // 初始化直流电机\n\n\tTA0CCTL0 = CCIE; // 开启TA0定时器的中断\n\tTA0CCR0 = 5000; // 设置TA0定时器计数器的上限值\n\tTA0CTL = TASSEL_2 + MC_1 + TACLR; // 设置TA0定时器的时钟源为SMCLK,计数模式为增计数,清除计数器\n\n\tTA2CCR1 = DC_motor; // 设置TA2.1引脚的占空比为100\n\tTA2CCR2 = DC_motor; // 设置TA2.2引脚的占空比为100\n\n\t__bis_SR_register(LPM0_bits + GIE); // 进入低功耗模式0并开启全局中断\n\t__no_operation(); // 空操作,用于防止编译器优化\n}\n\n#pragma vector=TIMER0_A0_VECTOR // 定义TA0定时器中断向量\n__interrupt void TIMER0_A0_ISR(void)\n{\n\tswitch(P6IN&0x1f) // 读取P6.0-P6.4引脚的状态\n\t{\n\t\tcase 0x0f: // 如果P6.0-P6.4引脚的状态为00001111\n\t\t\tTA1CCR1 = 1500+4i; // 设置TA1.1引脚的占空比为1500+4i\n\t\t\tbreak;\n\t\tcase 0x17: // 如果P6.0-P6.4引脚的状态为00010111\n\t\t\tTA1CCR1 = 1500+2i; // 设置TA1.1引脚的占空比为1500+2i\n\t\t\tbreak;\n\t\tcase 0x1b: // 如果P6.0-P6.4引脚的状态为00011011\n\t\t\tTA1CCR1 = 1500; // 设置TA1.1引脚的占空比为1500\n\t\t\tbreak;\n\t\tcase 0x1d: // 如果P6.0-P6.4引脚的状态为00011101\n\t\t\tTA1CCR1 = 1500-2i; // 设置TA1.1引脚的占空比为1500-2i\n\t\t\tbreak;\n\t\tcase 0x1e: // 如果P6.0-P6.4引脚的状态为00011110\n\t\t\tTA1CCR1 = 1500-4i; // 设置TA1.1引脚的占空比为1500-4i\n\t\t\tbreak;\n\t\tdefault: // 其他状态\n\t\t\tbreak;\n\t}\n}

MSP430F5529 舵机和直流电机控制程序 - 使用PWM和中断

原文地址: https://www.cveoy.top/t/topic/pwCT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录