单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数字PWM功能--Proteus 仿真

[复制链接]
跳转到指定楼层
楼主
taotie 发表于 2019-11-10 13:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
rem 《AVR单片机basIc语言编程及开发》数字PWM功能------Proteus 仿真
rem Created:   周六 11月 2 2019   taotie

rem Processor: ATmega8
rem Compiler:  BASCOM-AVR
rem Write your code here

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
dim e as Word, f as Word     '比较值变量
config TIMER1=PWM,PWM=10, compare a PWM = clear up,  compare b PWM=   clear down, prescale=8
   '配置t/c1作pwm。pwm分辨率为10 位长度 。pwm1a和pwm1b分别作正向清零和反向清零。计数器预分频8
   DDRB=&B00000110                                              'PB1,PB2为输出
   CONFIG  INT0=rising                                      ' 配置外部中断INT0,INT1中断时分别对比较值作加减计算
   CONFIG  INT1=rising                                      'Low Level低   rising 上   falling下
   ON  INT0  ISR0                                                     '中断发生时子程序标号
   ON  INT1  ISR1
   ENABLE  INT0                                                      '开放中断
   ENABLE  INT1
   ENABLE   INTERRUPTS                                     '开放全局中断
EERO:
   INPUT "输入大于0,小于1023的PWM1A值E : ",E                            '键盘输入比较值E
   if e>1022 THEN  GOTO  EERO
   FERO:
    INPUT "输入大于0,小于1023的PWM1B值F : " ,F                           '键盘输入比较值F
   if f>1022 THEN  GOTO  FERO
   PWM1A=E                                                         'PWM比较寄存器置入初值E,F
   PWM1B=F
   START  TIMER1                                                 '启动TIMER1
   DO
   IDLE                                                                  '     空闲方式睡眠状态
   LOOP
   END
ISR0:                                                               '  int0中断发生时子程序
   IF E<1023 THEN  E=E+20                              '    E,F加一,更改比较寄存器值
   IF E>1022 THEN  E=1022
   IF F<1023 THEN  F=F+20
   IF F >1022 THEN  F =1022
    PWM1A=E
    PWM1B=F
   PRINT   "向上输出E值";E
   PRINT   "向上输出F值";F
    RETURN
ISR1:                                                                        '  int1中断发生时子程序
    IF E>20 THEN  E=E-20                                           'E,F减一,更改比较寄存器值
    IF E< 0 THEN  E=1
    IF F>20 THEN  F=F-20
    IF F< 0 THEN  F=1
    PWM1A=E
    PWM1B=F
    PRINT   "向下输出E值";E
    PRINT   "向下输出F值";F
    RETURN






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

使用道具 举报

沙发
51hei团团 发表于 2019-11-10 23:13 | 只看该作者
好东东啊 能分享下工程文件学习下吗?
回复

使用道具 举报

板凳
 楼主| taotie 发表于 2019-11-11 13:24 | 只看该作者
如果没有安装Proteus 8 .8给你工程文件也没用。现在有源代码和仿真图不是很好吗!
回复

使用道具 举报

地板
 楼主| taotie 发表于 2019-11-11 14:13 | 只看该作者
扩展一下,PWM驱动大功率IGBT管点亮36V100W灯泡并控制亮度。


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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