?? slavr743.asm
字號:
; 測脈沖寬度,測周期,脈寬信號從AT90S8515的ICP引腳輸入,最大值為為999999μS
.include"8515def.inc"
rjmp reset
.def temp = r16 ;暫存器
.def cnt1d = r17
.def cnt2d = r18 ;cnt1、dcnt2d和cnt3d存放結果的十進制
.def cnt3d = r19
.def count = r20
.def res1 = r21
.def res2 = r22 ;res1、res2和res3存放結果的十六進制
.def res3 = r23
.def dt = r25
.def aa = r26
.def bb = r27
.def cc = r28
.org 0x003 ;icp觸發中斷向量
rjmp captr
.org 0x007 ;timer0觸發中斷向量
rjmp interru
captr: ;icp觸發中斷子程序
brts cap2
cap1:
ldi temp, 0b00000010
out tccr0, temp ;開timer0
ldi temp, 0b00001010
out timsk, temp
ldi temp, 0b11000000 ;致timer0中斷和捕捉中斷
out tccr1b,temp
set
reti
cap2:
ldi temp, 00
out tccr0, temp
in res1, tcnt0
rcall htd3
over:
rcall clrm1
rcall sys
reti
interru: ;timer0溢出中斷子程序
clc
inc res2
brne b
inc res3
cpi res3, 15 ;溢出處理
brlo b
rjmp over
b:
clc
ldi temp, 0b00001010
out timsk, temp
ldi temp, 0b11000000
out tccr1b,temp
reti
reset:
ldi temp, low(ramend)
out spl, temp
ldi temp, high(ramend) ;設置堆棧
out spl+1, temp
ldi temp, $ff ;初始化數碼管狀態
out ddrb, temp ;B口:數碼管數據輸出
out ddrd, temp ;D口:pd0-pd5為數碼管片選
ldi temp, $00
out portb, temp ;共陰極,數碼管全滅
out portd, temp
rcall clrm
sei
rcall sys
loop: ;在數碼管顯出十進制數
mov aa, cnt1d
andi aa, $0f ;顯示個位
rcall a
cbi portd, 00
nop
sbi portd, 00
mov aa, cnt1d
andi aa, $f0 ;顯示十位
swap aa
rcall a
cbi portd, 01
nop
sbi portd, 01
mov aa, cnt2d
andi aa, $0f ;顯示百位
rcall a
cbi portd, 02
nop
sbi portd, 02
mov aa, cnt2d
andi aa, $f0 ;顯示千位
swap aa
rcall a
cbi portd, 03
nop
sbi portd, 03
mov aa, cnt3d
andi aa, $0f ;顯示萬位
rcall a
cbi portd, 04
nop
sbi portd, 04
mov aa, cnt3d
andi aa, $f0 ;顯示十萬位
swap aa
rcall a
cbi portd, 05
nop
sbi portd, 05
sbrc dt, 0
ret
rjmp loop
sys: ;初始化
clt
clc
ldi bb, $0f
ldi dt, 00
ldi temp, 00
out tcnt0, temp
ldi temp, 0b00001000
out timsk, temp
ldi temp, 0b11000000
out tccr1b,temp
ret
htd3: ;16轉10子程序
sbr dt, 1
ldi count, 24
clr cnt1d
clr cnt2d
clr cnt3d
clc
loopd:
rol res1
rol res2
rol res3
rol cnt1d
rol cnt2d
rol cnt3d
dec count
brne c
rjmp loop
c: rcall adjn
rjmp loopd
a:
ldi zh, high(zk*2)
ldi zl, low(zk*2)
add zl, aa
lpm
out portb, r0
ret
adjn:
push count
mov count, cnt1d
rcall adjd1
mov cnt1d, count
mov count, cnt2d
rcall adjd1
mov cnt2d, count
mov count, cnt3d
rcall adjd1
mov cnt3d, count
pop count
ret
adjd1:
ldi temp, 3
add temp, count
sbrc temp, 3
mov count, temp
ldi temp, $30
add temp, count
sbrc temp, 7
mov count, temp
ret
clrm:
clr cnt1d
clr cnt2d
clr cnt3d
clrm1:
clr res1
clr res2
clr res3
ret
.equ zk=0x0200
.org zk ;字形表
.db 0x03f,0x006,0x05b,0x04f
.db 0x066,0x06d,0x07d,0x007
.db 0x07f,0x06f,0x077,0x07c
.db 0x039,0x05e,0x071,0x0ff
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -