速求用MSP430的P4.0口控制舵机转动90°的程序,最好不用定时器。

速求用MSP430的P4.0口控制舵机转动90°的程序,最好不用定时器。,第1张

不用定时器,那就只好用延时函数,简单点,下面是我临时写的,不知道能否通过编译,就是用P40端口产生方波,延时函数采用系统自带

主频设置为1MHz

占空比需要根据延时数值多少而定,我这里给的是50%

周期为2s

430型号为F2274

程序如下:

#include <stdinth>

#include <MSP430x22x4h>

#define WaveOutput BIT0

#define CPU_F ((double)1000000) //1Mhz

#define delay_us(x) __delay_cycles((long)(CPU_F(double)x/10000000))

#define delay_ms(x) __delay_cycles((long)(CPU_F(double)x/10000))

void main(void)

{

WDTCTL=WDTPW+WDTHOLD; // Stop WDT

DCOCTL=CALDCO_1MHZ; // Load 1MHz constants

BCSCTL1=CALBC1_1MHZ; //Select DCO is 1MHz

_DINT();

P4DIR|=WaveOutput; //set OUTPUT

P4OUT&=~WaveOutput; //default low

while(1)

{

WDTCTL=WDTPW+WDTHOLD; // Stop WDT

P4OUT|=WaveOutput; //default high

delay_ms(1000) //1s

P4OUT&=~WaveOutput; //default low

delay_ms(1000) //1s

}

}

#include <reg52h> //12M晶振

sbit PWM=P1^0; //定义P1^0为输出端口

unsigned int pwm_h=2430,pwm; //定义pwm信号中的高电平时间

范围 535< pwm_h <2430

bit fa;

void Init_Timer0() //定时器初始化子程序

{

TMOD = 0x01;

TH0 = 0x0FF;

TL0 = 0x0F6;

EA = 1;

ET0 = 1;

TR0 = 1; //定时器开关打开

}

void main() //主函数

{

Init_Timer0(); //定时器初始化

PWM=0;

while(1)

{

if(fa)

{

fa=0;

pwm_h=20000-pwm_h;

}

}

}

void Timer0() interrupt 1 using 1

{

TH0 =(-pwm_h)/256;

// (65535-200) /256=0xff;

TL0 =(-pwm_h)%256; //01ms一个记时器周期

236 % 256 = 236

fa=1;

PWM=~PWM;

}

给段伪代码吧

int main()

{

    初始化 src_angle_A, dst_angle_A;

    初始化 src_angle_B, dst_angle_B;

    初始化 src_angle_C, dst_angle_C;

    初始化 src_angle_D, dst_angle_D;

    int A_flag = 0;

    int B_flag = 0;

    int CD_flag = 0;

    

    while (1)

    {

        if (key1_down())

        {

            if  (A_flag == 0)

            {

                set_angle_A(dst_angle_A);

            }

            else

            {

                set_angle_A(src_angle_A);

            }

            A_flag = 1-A_flag;

        }

        

        if (key2_down())

        {

            if  (B_flag == 0)

            {

                set_angle_B(dst_angle_B);

            }

            else

            {

                set_angle_B(src_angle_B);

            }

            B_flag = 1-B_flag;

        }

        

        if (key3_down())

        {

            if (CD_flag == 0)

            {

                set_angle_C(dst_angle_C);

                set_angle_D(dst_angle_D);

            }

            else

            {

                set_angle_C(src_angle_C);

                set_angle_D(src_angle_D);

            }

            CD_flag = 1-CD_flag;

        }

        delay_ms(10);

    }

    return 0;

}

拔下仿真器不会清除程序。 但是这个问题其实以前我也遇到过,但是具体我也不清楚怎么回事,我是多折腾几下才好的。

这些问题推荐你到CSDN去问,那里的专业的人比这里多,回答的比较快

以上就是关于速求用MSP430的P4.0口控制舵机转动90°的程序,最好不用定时器。全部的内容,包括:速求用MSP430的P4.0口控制舵机转动90°的程序,最好不用定时器。、怎么利用Stc15F2K60S2单片机 仿真系列,控制舵机旋转在线求简单的实例程序、求一段c语言舵机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9447586.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存