找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机l289 pwm电机调速 汇编程序+protues仿真电路图

[复制链接]
跳转到指定楼层
楼主
使用定时器中断做的简单的pwm电机调速仿真使用l289电机驱动实现
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. PWMH DATA  30H ;占空比
  2. PWM  DATA  31H ;周期长度(pwm*250us)
  3. COUNTER  EQU  R0 ;计数器计数
  4. TEMP DATA  33H ;暂存
  5. IN1 EQU P1.2
  6. IN2 EQU P1.3
  7. ORG 0000H
  8. LJMP MAIN
  9. ORG  000BH
  10. LJMP  INTT0
  11. ORG  0030H
  12. MAIN:
  13. MOV  SP,#60H  
  14. MOV  PWMH,#4  ;占空比初值
  15. MOV  COUNTER,#11;计数器初值
  16. MOV PWM,#11  ;周期初值
  17. MOV  TMOD,#02H  ;定时器0,工作模式2
  18. MOV  TL0,#06H ;定时250us
  19. MOV  TH0,#06H ;自动重装初值
  20. SETB  ET0 ;开定时器中断
  21. SETB  EA ;开总中断
  22. SETB  TR0 ;启动定时器
  23. CLR IN1
  24. CLR IN2
  25. KSCAN:
  26. JNB P2.0,K1CHECK  ;扫描加速键
  27. JNB P2.1,K2CHECK  ;扫描减速键
  28. JNB P2.2,K3CHECK  ;扫描启动键
  29. JNB P2.3,K4CHECK  ;扫描停止键
  30. SJMP  KSCAN

  31. K1CHECK:
  32. LCALL DELAY
  33. JB  P2.0,KSCAN ;延时去抖
  34. BACK1:
  35. JNB P2.0,BACK1;等待按键松开
  36. SJMP K1HANDLE;跳转处理子程序
  37. K1HANDLE:
  38. MOV  A,PWMH
  39. CJNE  A,PWM,K1H0 ;判断是否达到上边界
  40. SJMP  KSCAN ;达到最大,无法增加,不做处理
  41. K1H0:         
  42. MOV  A,PWMH ;未到最大
  43. INC A     
  44. MOV PWMH,A ;占空比未到最大
  45. SJMP KSCAN

  46. K2CHECK:
  47. LCALL DELAY
  48. JB  P2.1,KSCAN ;延时去抖
  49. BACK2:
  50. JNB P2.1,BACK2;等待按键松开
  51. SJMP K2HANDLE;跳转处理子程序
  52. K2HANDLE:
  53. MOV  A,PWMH
  54. CJNE  A,#02H,K2H0 ;判断是否达到下边界
  55. SJMP  KSCAN ;达到最小,无法减小,不做处理
  56. K2H0:         
  57. MOV  A,PWMH ;未到最小
  58. DEC A     
  59. MOV PWMH,A ;
  60. SJMP KSCAN

  61. K3CHECK:
  62. LCALL DELAY
  63. JB  P2.2,KSCAN ;延时去抖
  64. BACK3:
  65. JNB P2.2,BACK3;等待按键松开
  66. SJMP K3HANDLE;跳转处理子程序
  67. K3HANDLE:
  68. SETB IN1
  69. CLR IN2;电机正转
  70. SJMP KSCAN

  71. K4CHECK:
  72. LCALL DELAY
  73. JB  P2.3,KSCAN ;延时去抖
  74. BACK4:
  75. JNB P2.3,BACK4;等待按键松开
  76. SJMP K4HANDLE;跳转处理子程序
  77. K4HANDLE:
  78. CLR IN1
  79. CLR IN2;电机反转
  80. SJMP KSCAN

  81. DELAY:
  82. PUSH PSW;
  83. MOV R6,#09FH;
  84. D1: MOV R7,#0F9H;
  85. D2: DJNZ R7,D2;
  86. DJNZ R6,D1;
  87. POP PSW;
  88. RET



  89. INTT0:      ;定时器中断函数
  90. PUSH  PSW
  91. PUSH  ACC
  92. DJNZ COUNTER,INTT01 ;达到一个周期
  93. MOV COUNTER,#10
  94. INTT01:
  95. CLR C
  96. MOV A,COUNTER
  97. CJNE  A,PWMH,INTT02 ;判断pwm条件,counter<pwmh,c=1
  98. INTT02:
  99. JC HLEVEL ;counter<pwmh
  100. CLR P1.0
  101. SJMP OUT
  102. HLEVEL:
  103. SETB P1.0
  104. OUT:
  105. POP ACC
  106. POP PSW
  107. RETI
  108. END;
复制代码

.dsn文件是Proteus7.5版本的仿真图,大家要用7.5才能打开哦,,asm是汇编代码,大家自行创建Keil工程然后添加进去
上图资料51hei附件下载:
PWM.rar (10.74 KB, 下载次数: 45)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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