找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2494|回复: 4
收起左侧

求助!想请教大家单片机外部中断怎么控制定时器?

[复制链接]
ID:630579 发表于 2019-12-14 19:17 | 显示全部楼层 |阅读模式
300黑币
大家好,需要在舵机角度旋转代码里加key0,key1控制启动和停止,不知道有什么简便的方法。
#include<reg52.h>
#include"lcd.h"

sbit pwm=P0^0;//输出PWM信号
unsigned int pwm_value=1500;//初值为1.5ms
unsigned int ms[]={00,90,00,45,00,45,00,90,00};
unsigned int value[]={1500,500,1500,1000,1500,2000,1500,2300,1500};//

void InitTimer(void)
{
        TMOD=0x11;//开定时器0,1
        TH0=-20000/256;//定时20MS,20MS为一个周期
        TL0=-20000%256;
        TH1=-1500/256;//定时1.5MS,这时舵机处于0度
        TL1=-1500%256;
        EA=1;//开总断
        TR0=1;//开定时器0
        ET0=1;
        TR1=1;//开定时器1
        ET1=1;
}
void timer0(void) interrupt 1//定时器0中断函数
{
        pwm=1;
        TH0=-20000/256;
        TL0=-20000%256;
        TR1=1;
}

void timer1(void) interrupt 3//定时器1中断函数
{
        pwm=0;
        TH1=-pwm_value/256;
        TL1=-pwm_value%256;
        TR1=0;
}
void main(void)//主函数
{
        unsigned char i;        
               
                LcdInit();
        InitTimer();
        pwm_value=1500;
        while(1)
        {
                for(i=0;i<9;i++)
                {
                        pwm_value=value;//通过数组就可以改变舵机的转角度
                        Delayms(1000);
                                                LcdWriteCom(0xc0);
                                                LcdWriteData(ms/10+'0');
                                LcdWriteData(ms%10+'0');
                }
        }
}

这个是main.c,只需要加几句话就好了。

回复

使用道具 举报

ID:282850 发表于 2019-12-14 22:57 | 显示全部楼层
舵机启动和停止,与舵机的原理相悖。但你的问题并不错误,是个好题。
舵机也叫伺服机,也叫servo。你送给它的脉冲宽度就是要让它处于需要的角度。
但是因为舵机的功耗是非常高,近400mA,里面有一定扭力的电机、电阻啊。所以停止舵机还是有必要的,我就这样做了。因为舵机内有齿轮变速,当它停在某一位置时,外力要反向改变角度,是需要一定力的,所以关闭舵机是有意义的。
你的程序我并不想看,我的做法:
1、加一个NMOS管,供舵机电源,一个IO口控制NMOS是否给舵机供电;
2、当有角度变化需要时,先产生脉冲,再给舵机供电,几mS舵机到位后,停止NMOS,不再给舵机供电。
这是自动化的操作。

评分

参与人数 2黑币 +30 收起 理由
郑汉松 + 10 赞一个!
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:627214 发表于 2019-12-16 11:44 | 显示全部楼层
51单片机按键控制舵机旋转 - OverWatcher的博客 https://blog.csdn.net/OverWatcher/article/details/80215520
这是一位前辈写的,希望对你 有用!
回复

使用道具 举报

ID:584814 发表于 2019-12-16 12:41 | 显示全部楼层
又见高分的神答
1、舵机启动和停止,与舵机的原理相悖 ?那么舵机的原理又是什么、怎么相悖呢 ?
2、“因为舵机内有齿轮变速,当它停在某一位置时,外力要反向改变角度,是需要一定力的,所以关闭舵机是有意义的。”有什么意义能明说么 ?
3、实操中只用一个IO口控制舵机,并不需要什么外控MOS管,更不说指定N型的MOS管了;
4、“当有角度变化需要时,先产生脉冲,再给舵机供电,几mS舵机到位后,停止NMOS,不再给舵机供电。这是自动化的操作。”这两段更是如周星星台词。
5、舵机内有相关电路(多数用集成电路),那些需要实现的功能在设计时都考虑全了,外部只需接3根钱,除需接电源2根外只接1个控制线。
6、外部中断的写法看器件手册的程例就好,这东东设计时就没打算需要安启停开关,不是这个设计有多复杂或高大上亦或提高故障率好多卖而是根本没必要。
7、总开关控制总电源,舵机控制线控制舵机就好。
回复

使用道具 举报

ID:630579 发表于 2019-12-17 10:25 | 显示全部楼层
无敌小杰杰 发表于 2019-12-16 11:44
51单片机按键控制舵机旋转 - OverWatcher的博客 https://blog.csdn.net/OverWatcher/article/details/80215 ...

已经做好了,谢谢你,做的方法和他讲的差不多,没有用到外部中断,只是按键设置
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表