找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 761|回复: 1
打印 上一主题 下一主题
收起左侧

求助51单片机舵机驱动汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:259813 发表于 2024-12-13 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
让舵机左转动90度,输出1ms脉冲,然后右转动90度,输出1.5MS脉冲,只使用延时可以吗?我这样编写的,但有时候不能用。麻烦给姐说一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:940483 发表于 2024-12-26 09:23 | 只看该作者
假设左转90度和右转90度对应的脉冲宽度1ms、PWM信号的周期为20ms,步骤:设置PWM信号的周期;根据所需的角度,设置PWM信号的高电平时间。

  1. ORG 0000H       ; 程序起始地址
  2. LJMP START      ; 跳转到程序开始处
  3. ORG 000BH       ; 定时器0中断向量地址
  4. LJMP TIMER0_ISR ; 跳转到定时器0中断服务程序
  5. START:
  6.     MOV TMOD, #01H       ; 设置定时器0为模式1(16位定时器)
  7.     MOV TH0, #0FCH       ; 定时器0高8位初值(假设周期为20ms)
  8.     MOV TL0, #66H        ; 定时器0低8位初值
  9.     SETB ET0             ; 使能定时器0中断
  10.     SETB TR0             ; 启动定时器0
  11.     CLR P1.0             ; 假设P1.0连接舵机控制信号; 左转90度,输出1ms脉冲
  12.     MOV R0, #1000        ; 假设1ms需要1000个机器周期(具体根据单片机时钟频率算)
  13.     LCALL DELAY_MS
  14.     SETB P1.0            ; 设置P1.0为高电平
  15.     MOV R0, #9999        ; 20ms - 1ms = 19ms,假设需要9999个机器周期
  16.     LCALL DELAY_MS
  17.     CLR P1.0             ; 清除P1.0为高电平; 右转90度,输出1.5ms脉冲
  18.     MOV R0, #1500        ; 假设1.5ms需要1500个机器周期
  19.     LCALL DELAY_MS
  20.     SETB P1.0            ; 设置P1.0为高电平
  21.     MOV R0, #9400        ; 20ms - 1.5ms = 18.5ms,假设需要9400个机器周期
  22.     LCALL DELAY_MS
  23.     CLR P1.0             ; 清除P1.0为高电平
  24.     SJMP $                   ; 无限循环
  25.     DELAY_MS:
  26.     MOV R1, R0           ; 将延时计数值存入R1
  27.     DJNZ R1, $           ; 延时循环
  28.     RET
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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