📄 k3_one.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!
;
;**********************************************************
;
;LED display "50"
;set T=0 k3 first press down . T=1 k3 press down twice.
; clr r27 ;r27 is used to record k1 press down number
;accord to r27 value, m_min subroutine dispaly magnetic field trength
; clr r28 ;r28 is used to record k2 press down number
; tihis is useless
disp_350: rcall disp_50
m_wait_k1: sbic PIND,4
rjmp m_k2_press
rcall delay
sbic PIND,4
rjmp m_wait_k1
compare: nop
inc r27
cpi r27,4
brne d20_90 ; k1 press down 4 times display "90" and cann't increase again
rjmp m_k2_press
d20_90: rjmp display20_90
m_k2_press:sbic PIND,5
rjmp m_k4_press
rcall delay
sbic PIND,5
rjmp m_k2_press
min_comp: nop
dec r27
cpi r27,-4
brne disp10_80 ; k1 press down 4 times display "90" and cann't increase again
rjmp m_k4_press
disp10_80: rjmp min10_80
m_k4_press: sbic PIND,7
rjmp k3_again
rcall delay
sbic PIND,7
rjmp m_k4_press
rcall change_disp
k3_again: sbic PIND,6
rjmp k1_k2_press
rcall delay
sbic PIND,6
rjmp k3_again
rjmp disp_120
k1_k2_press:rjmp kn10_90 ; make a adjument if k1 or k2 is pressed down
display20_90:cpi r27,-3
brne disp_30_90
rcall disp_20
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
disp_30_90: cpi r27,-2
brne disp_40_90
rcall disp_30
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
disp_40_90: cpi r27,-1
brne disp_50_50
rcall disp_40
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
disp_50_50: cpi r27,0
brne disp_50_90
rcall disp_50
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
disp_50_90: cpi r27,1
brne disp_60_90
rcall disp_60
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_wait_k1
rcall change_disp
disp_60_90: cpi r27,2
brne disp_70_90
rcall disp_70
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_wait_k1
rcall change_disp
disp_70_90: cpi r27,3
brne disp_80_90
rcall disp_80
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_wait_k1
rcall change_disp
disp_80_90: rcall disp_90
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_wait_k1
rjmp m_wait_k1
rcall change_disp
rjmp m_wait_k1
min10_80: cpi r27,3
brne min10_70
rcall disp_80
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_70: cpi r27,2
brne min10_60
rcall disp_70
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_60: cpi r27,1
brne min10_50
rcall disp_60
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_50: cpi r27,0
brne min10_40
rcall disp_50
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_40: cpi r27,-1
brne min10_30
rcall disp_40
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_30: cpi r27,-2
brne min10_20
rcall disp_30
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_20: cpi r27,-3
brne min10_10
rcall disp_20
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
min10_10: rcall disp_10
rcall delay1
sbic PIND,7 ;ask k4 press down ?
rjmp m_k2_press
rcall change_disp
disp_120: rcall display120
t_wait_k1: sbic PIND,4
rjmp t_k2_press
rcall delay
sbic PIND,4
rjmp t_wait_k1
rcall t_add
rjmp t_wait_k1
t_k2_press:sbic PIND,5
rjmp k4_press
rcall delay
sbic PIND,5
rcall t_min
rjmp t_k2_press
k4_press: sbic PIND,7
rjmp disp_120
rjmp change_disp
; ret
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,$05
d21:ldi r22,$0ff
d11:ldi r23,$0ff
d01:dec r23
wdr
brne d01
dec r22
brne d11
dec r21
brne d21
ret
;******************************************************************************
;
; These subroutines are used to increase magnetic filed tength "20--90"
;----------------------------------------------
kn10_90: cpi r27,-4
brne kn20_90
rcall disp_10
rcall delay
rjmp m_wait_k1
kn20_90: cpi r27,-3
brne kn30_90
rcall disp_20
rcall delay
rjmp m_wait_k1
kn30_90: cpi r27,-2
brne kn40_90
rcall disp_30
rcall delay
rjmp m_wait_k1
kn40_90: cpi r27,-1
brne kn50_90
rcall disp_40
rcall delay
rjmp m_wait_k1
kn50_90: cpi r27,0
brne kn60_90
rcall disp_50
rcall delay
rjmp m_wait_k1
kn60_90: cpi r27,1
brne kn70_90
rcall disp_60
rcall delay
rjmp m_wait_k1
kn70_90: cpi r27,2
brne kn80_90
rcall disp_70
rcall delay
rjmp m_wait_k1
kn80_90: cpi r27,3
brne kn90_90
rcall disp_80
rcall delay
rjmp m_wait_k1
kn90_90: rcall disp_90
rcall delay
rjmp m_wait_k1
;-----------------------------------------------
display120:ser r16
out DDRC,r16 ;portc is output mode and turn off all LEDS
ldi r21,$00
out PORTC,r21 ;turn off "50" display
ldi r21,$06
out SPDR , r21
ldi r17,0b0000100
out PORTC,r17 ;PC.2 display "1"
; wait0:sbis SPSR,7
; rjmp wait0
rcall delay
ldi r17,0b0000000
out PORTC,r17
ldi r21,$5b
out SPDR , r21
ldi r17,0b0001000
out PORTC,r17
out PORTC,r17 ;PC.3 display "2"
; wait0:sbis SPSR,7
; rjmp wait0
rcall delay
ldi r17,0b0000000
out PORTC,r17
ldi r21,$3f
out SPDR , r21
ldi r17,0b0010000
out PORTC,r17 ;PC.4 display "0"
; wait0:sbis SPSR,7
; rjmp wait0
rcall delay
ldi r17,0b0000000
out PORTC,r17
ret
;-----------------------------------------------
;-----------------------------
b1_d0: rcall turn_off
rcall display_0
rcall dispbyte_1
; rcall trans_wait
rcall delay
rcall turn_off
ret
;-----------------------------
disp_10: rcall display_1
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
rcall delay
rcall turn_off
ldi r27,-4
ret
;-----------------------------
disp_20: rcall display_2
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
rcall delay
rcall turn_off
ldi r27,-3
ret
;-----------------------------
disp_30: rcall display_3
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
rcall delay
rcall turn_off
ldi r27,-2
ret
;-----------------------------
disp_40: rcall display_4
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
rcall delay
rcall turn_off
ldi r27,-1
ret
;-----------------------------
disp_50: rcall display_5
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
ldi r27,0
ret
;-----------------------------
disp_60: rcall turn_off
rcall display_6
rcall dispbyte_0
; rcall trans_wait
rcall delay
rcall b1_d0
ldi r27,1
ret
;------------------------------
disp_70:rcall turn_off
rcall display_7
rcall dispbyte_0
;rcall trans_wait
rcall delay
rcall b1_d0
ldi r27,2
ret
;-----------------------------
disp_80:rcall turn_off
rcall display_8
rcall dispbyte_0
;rcall trans_wait
rcall delay
rcall b1_d0
ldi r27,3
ret
;-------------------------------
disp_90: rcall turn_off
rcall display_9
rcall dispbyte_0
;rcall trans_wait
rcall delay
rcall b1_d0
ldi r27,4
ret
;************************************************
seg_code:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07
.db $7f,$6f,$77,$7c,$39,$5e,$79,$71
display_0:ldi r21,$3f
out SPDR , r21
ret
display_1:ldi r21,$06
out SPDR , r21
ret
display_2:ldi r21,$5b
out SPDR , r21
ret
display_3:ldi r21,$4f
out SPDR , r21
ret
display_4:ldi r21,$66
out SPDR , r21
ret
display_5:ldi r21,$6d
out SPDR , r21
ret
display_6:ldi r21,$7d
out SPDR , r21
ret
display_7:ldi r21,$07
out SPDR , r21
ret
display_8:ldi r21,$7f
out SPDR , r21
ret
display_9:ldi r21,$6f
out SPDR , r21
ret
turn_off: ser r16
out DDRC,r16
ldi r17,0b0000000
out PORTC,r17
ret
dispbyte_0:ldi r17,0b00000001
out PORTC,r17
ret
dispbyte_1:ldi r17,0b00000010
out PORTC,r17
ret
dispbyte_2:ldi r17,0b00000100
out PORTC,r17
ret
dispbyte_3:ldi r17,0b00001000
out PORTC,r17
ret
dispbyte_4:ldi r17,0b00010000
out PORTC,r17
ret
trans_wait:sbis SPSR,7
rjmp trans_wait
ret
m_min: ret
t_add: ret
t_min: ret
change_disp: ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -