|
'/////////////////////////////////////////////////////////
'///工程:FastAVR Basic 使用定时器0的流水灯试验
'///芯片:mega8515
'///简介:LED从PORTB.0流动到PORTB.7然后流回来
'///编译:通过,131 words
'///实践:实物测试通过
'///作者:agui2008
'///时间:2005/8/11
'/////////////////////////////////////////////////////////
$Device =
m8515
'声明AVR型号
$Stack = 32
'堆栈大小
$Clock = 1
'时钟频率1M
$Timer0 =
Timer, Prescale
= 1024
'timer0为定时器,预分频1024
Declare Interrupt
Ovf0()
'声明使用timer0溢出中断
Dim n As Byte
'定义循环变量n
Dim m As Byte
'定义计数方向变量m
n=0
m=0
'm=0,n=n+1;m=1,n=n-1
DDRB=255
'定义PORTB为输出口
Enable Interrupts
'允许全局中断
Timer0=&h3d
'timer0中断溢出时间=200ms
Enable Ovf0
'允许timer0中断
Start Timer0
'启动timer0
Do
Select Case n
Case 0
PORTB=&b00000001
Case 1
PORTB=&b00000010
Case 2
PORTB=&b00000100
Case 3
PORTB=&b00001000
Case 4
PORTB=&b00010000
Case 5
PORTB=&b00100000
Case 6
PORTB=&b01000000
Case 7
PORTB=&b10000000
End Select
Loop
End
'//////////////定时器0中断服务程序///////////////
Interrupt Ovf0()
'timer0中断服务
Timer0=&h3d
'重装初值,其实可以用比较模式实现自动重装
If n=7 Then
'控制计数方向
m=1
ElseIf n=0 Then
m=0
End If
If m=0 Then
Incr n
'n=n+1
ElseIf m=1 Then
'根据m决定对n进行加减1
Decr n
'n=n-1
End If
Enable Interrupts
'AVR在进入中断之后会关闭全局中断,所以在这里要重新打开全局中断
End Interrupt
'中断服务程序结束 |