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
|