📄 tim_com2.asm
字号:
.include "c:\appnotes\2333def.inc"
.org $000
rjmp main
.org $007
rjmp SPI_TXC
.org $00d
MAIN:;********************************************************
;
; initialize MCU system
;
ser r16
out DDRC,r16 ;portc is output mode and turn off all LEDS
ldi r17,$df
out SPL,r17
ldi r25,$00
out SREG,r25 ;Disnable globle interrupt
ldi r25,0b00001100
out MCUCR,r25; set INT! low level trigger
ldi r20,$00
out ADCSR,r20 ;Disnable ADC
ldi r17,$08
out WDTCR,r17;enable wacthdog
wdr ;reset wachdog
sbi DDRB,3 ;set MOSI(PB.5) output mode whwn SPI is master.
sbi DDRB,5 ;set SCK (PB.7) output mode when SPI is master
sbi DDRB,2 ;set SS output mode so that this byte cann't
;influence SPI master work mode .
ldi r17,0b11111100
out SPCR,r17 ;set SPIE,SPE,MSTR,CPOL,CPHA ,reset the others
ldi r25,$80
out GIMSK,r25 ;enable INT!
;
;-----------------------------------------------------------------------
md: clr r26 ;r26 is used to record time value
clr r27 ;r27 is used to record magnetic field trength
t_wait_k1: rcall t_leddisp
sbic PIND,4
rjmp t_k2_press
rcall delay
sbic PIND,4
rjmp t_wait_k1
t_compare: inc r26
cpi r26,13
brpl taddset_r26 ;k1 press down 4 times display "90" and cann't increase again
rcall t_leddisp
rcall delay1
sbic PIND,7
rjmp t_wait_k1
rcall delay
sbic PIND,7
rjmp t_wait_k1
rcall change_disp
taddset_r26: ldi r26,12
t_k2_press:sbic PIND,5
rjmp t_k4_press
rcall delay
sbic PIND,5
rjmp t_k2_press
tmin_comp: nop
dec r26
cpi r26,-3
brmi tminset_r26 ; k2 press down 4 times display "10" and cann't decrease again
rcall t_leddisp
rcall delay1
sbic PIND,7
rjmp t_k2_press
rcall delay
sbic PIND,7
rjmp t_k2_press
rcall change_disp
tminset_r26: ldi r26,-3
t_k4_press: sbic PIND,7
rjmp k3_again
rcall delay
sbic PIND,7
rjmp t_k4_press
rcall change_disp
; rjmp cd
k3_again: ;sbic PIND,6
rjmp t_wait_k1
SPI_TXC:sbi SPCR,4
reti
delay:ldi r21,$01
d2:ldi r22,$01
d1:ldi r23,$0ff
d0:dec r23
wdr
brne d0
dec r22
brne d1
dec r21
brne d2
ret
delay1:ldi r21,$08
d21:ldi r22,$0ff
d11:ldi r23,$0ff
d01:dec r23
wdr
brne d01
dec r22
brne d11
dec r21
brne d21
ret
;------------------------------------------------------
t_leddisp: cpi r26,-3
brne time_60
time_30 : nop
;----------------------
ldi r20,$00 ; r20 is content of display word
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$4f
out SPDR , r20
ldi r17,0b00001000 ; display byte PC.3
out PORTC,r17 ;PC.3 output 1 ,
rcall delay
rcall turn_off
;-------------------display PC.3 second byte of time value
rcall b4_d0
ret
;-------------------- ; PC.4 display "0"
time_60: cpi r26,-2
brne time_90
;----------------------
ldi r20,$00
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$7d
out SPDR , r20
ldi r17,0b00001000 ; display byte PC.3
out PORTC,r17
rcall delay
rcall turn_off
;-------------------display PC.3 second byte of time value
rcall b4_d0
ret
;-------------------- ; PC.4 display "0"
time_90: cpi r26,-1
brne time_120
;----------------------
ldi r20,$00
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$6f
out SPDR , r20
ldi r17,0b00001000 ; display byte PC.3
out PORTC,r17
rcall delay
rcall turn_off
;-------------------display PC.3 second byte of time value
rcall b4_d0
ret
;-------------------- ; PC.4 display "0"
time_120: cpi r26,0
brne time_150
;----------------------
ldi r20,$06
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$5b
out SPDR , r20
ldi r17,0b00001000 ; display byte PC.3
out PORTC,r17
rcall delay
rcall turn_off
;-------------------display PC.3 second byte of time value
rcall b4_d0
ret
;-------------------- ; PC.4 display "0"
time_150: cpi r26,1
brne time_180
;----------------------
ldi r20,$06
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$6d
out SPDR , r20
ldi r17,0b00001000 ; display byte PC.3
out PORTC,r17
rcall delay
rcall turn_off
;-------------------display PC.3 second byte of time value
rcall b4_d0
ret
;-------------------- ; PC.4 display "0"
time_180: cpi r26,2
brne time_210
;----------------------
ldi r20,$06
out SPDR , r20
ldi r17,0b0000100 ; display byte PC.2
out PORTC,r17
rcall delay
rcall turn_off
; ---------------------display PC.2 first byte of time value
ldi r20 ,$7f
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -