📄 sg10.asm
字号:
.device AT90S8535
.equ sph =$3E
.equ spl =$3D
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.equ TIMSK =$39
.equ OCR1AH =$2B
.equ OCR1AL =$2A
.equ TCCR1A =$2F
.equ TCCR1B =$2E
.equ TIFR =$38
.equ SREG =$3F
.equ TCNT1H =$2D
.equ TCNT1L =$2C
.org $0000
rjmp main
.org $006
rjmp t1_cp
main: ldi r16,$02 ;栈指针置初值
out sph,r16
ldi r16,$5f
out spl,r16
ldi r16,$c0 ;达比较匹配值时,OC1A变高
out TCCR1A,r16
ldi r16,$0c ;256分频,CTC=1,匹配时清定时器1
out TCCR1B,r16
ldi r16,$20 ;PD5作输出
out DDRD,r16
clr r16 ;使TCNT1初值为0
out TCNT1H,r16
out TCNT1L,r16
ldi r18,$01 ;送比较匹配值312
out OCR1AH,r18
ldi r18,$38
out OCR1AL,r18
ldi r16,$10 ;允许定时器1比较匹配中断
out TIMSK,r16
clr r16 ;清中断标志
out TIFR,r16
sei
here: rjmp here
t1_cp: in r1,sreg ;保护标志
in r18,TCCR1A ;读TCCR1A
sbrs r18,6 ;判COM1A0是否为1
rjmp aa
ldi r18,$00 ;若为1,送下次比较匹配值156
out OCR1AH,r18
ldi r18,156
out OCR1AL,r18
ldi r18,$80 ;下次达到比较匹配值156时,OC1A引脚变低
out TCCR1A,r18
bc: out sreg,r1 ;恢复标志
reti
aa: ldi r18,$c0 ;若COM1A0为0,下次达到比较匹配值时,OC1A引脚变高
out TCCR1A,r18
ldi r18,$01 ;送下次比较匹配值321
out OCR1AH,r18
ldi r18,$38
out OCR1AL,r18
rjmp bc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -