📄 sl07.lst
字号:
;UCR
.equ RXCIE =7
.equ TXCIE =6
.equ UDRIE =5
.equ RXEN =4
.equ TXEN =3
.equ CHR9 =2
.equ RXB8 =1
.equ TXB8 =0
;ACSR
.equ ACD =7
.equ ACO =5
.equ ACI =4
.equ ACIE =3
.equ ACIC =2
.equ ACIS1 =1
.equ ACIS0 =0
.def XL =r26
.def XH =r27
.def YL =r28
.def YH =r29
.def ZL =r30
.def ZH =r31
.equ RAMEND =$25F ;Last On-Chip SRAM Location
.equ XRAMEND =$FFFF
.equ E2END =$1FF
.equ FLASHEND=$FFF
.equ INT0addr=$001 ;External Interrupt0 Vector Address
.equ INT1addr=$002 ;External Interrupt1 Vector Address
.equ ICP1addr=$003 ;Input Capture1 Interrupt Vector Address
.equ OC1Aaddr=$004 ;Output Compare1A Interrupt Vector Address
.equ OC1Baddr=$005 ;Output Compare1B Interrupt Vector Address
.equ OVF1addr=$006 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$007 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$008 ;SPI Interrupt Vector Address
.equ URXCaddr=$009 ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$00a ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$00b ;UART Transmit Complete Interrupt Vector Address
.equ ACIaddr =$00c ;Analog Comparator Interrupt Vector Address
.org $000
000000 c01f rjmp sl07
.org $020
sl07:
000020 e012 ldi r17,$02 ;栈指针置初值SP=0x025F
000021 e50f ldi r16,$5f
000022 bf1e out sph,r17
000023 bf0d out spl,r16
000024 e01f ldi r17,$0f ;PC口接4*4的十六键键盘
000025 bb14 out ddrc,r17
000026 ef0f ldi r16,$ff
000027 bb07 out ddrb,r16 ;PB口接数码管,作字线
000028 bb05 out portc,r16
000029 bb08 out portb,r16 ;PD口作位线
00002a bb01 out ddrd,r16
00002b bb02 out portd,r16
00002c e75f ldi r21,$7f ;选种一位数码管
00002d bb52 out portd,r21
00002e 2744 clr r20
jiance:
00002f ef1e ldi r17,$fe ;让PC0输出为0
000030 bb15 out portc,r17
000031 c00a rjmp jiance0 ;检测是否有键按下
jiance11:
000032 ef1d ldi r17,$fd ;让PC1输出为0
000033 bb15 out portc,r17
000034 c011 rjmp jiance1 ;检测是否有键按下
jiance22:
000035 ef1b ldi r17,$fb ;让PC2输出为0
000036 bb15 out portc,r17
000037 c018 rjmp jiance2 ;检测是否有键按下
jiance33:
000038 ef17 ldi r17,$f7 ;让PC3输出为0
000039 bb15 out portc,r17
00003a c01f rjmp jiance3 ;检测是否有键按下
00003b cff3 rjmp jiance ;无键按下循环检测
jiance0:
00003c b303 in r16,pinc
00003d ff07 sbrs r16,7 ;检测键“F”是否按下
00003e d093 rcall jianf ;按下则执行“F”键的程序
00003f ff06 sbrs r16,6 ;检测键“E”是否按下
000040 d090 rcall jiane ;按下则执行“E”键的程序
000041 ff05 sbrs r16,5 ;检测键“D”是否按下
000042 d08d rcall jiand ;按下则执行“D”键的程序
000043 ff04 sbrs r16,4 ;检测键“C”是否按下
000044 d08a rcall jianc ;按下则执行“C”键的程序
000045 cfec rjmp jiance11
jiance1:
000046 b303 in r16,pinc
000047 ff07 sbrs r16,7 ;检测“B”键是否按下
000048 d085 rcall jianb ;按下则执行“B”键的程序
000049 ff06 sbrs r16,6 ;检测“A”键是否按下
00004a d082 rcall jiana ;按下则执行“A”键的程序
00004b ff05 sbrs r16,5 ;检测键“9”是否按下
00004c d076 rcall jian9
00004d ff04 sbrs r16,4
00004e d067 rcall jian8 ;检测键“8”是否按下
00004f cfe5 rjmp jiance22
jiance2:
000050 b303 in r16,pinc
000051 ff07 sbrs r16,7 ;检测键“7”是否按下
000052 d059 rcall jian7
000053 ff06 sbrs r16,6 ;检测键“6”是否按下
000054 d04d rcall jian6
000055 ff05 sbrs r16,5 ;检测键“5”是否按下
000056 d041 rcall jian5
000057 ff04 sbrs r16,4 ;检测键“4”是否按下
000058 d035 rcall jian4
000059 cfde rjmp jiance33
jiance3:
00005a b303 in r16,pinc
00005b ff07 sbrs r16,7 ;检测键“3”是否按下
00005c d027 rcall jian3
00005d ff06 sbrs r16,6 ;检测键“2”是否按下
00005e d01b rcall jian2
00005f ff05 sbrs r16,5 ;检测键“1”是否按下
000060 d00f rcall jian1
000061 ff04 sbrs r16,4 ;检测键“0”是否按下
000062 d003 rcall jian0
000063 e062 ldi r22,2
000064 d076 rcall delay
000065 cfc9 rjmp jiance ;循环检测键盘
jian0:
000066 9bc0 sbis portb,0 ;翻转PB0的输出状态
000067 c002 rjmp jian00
000068 98c0 cbi portb,0
000069 c001 rjmp jian000
00006a 9ac0 jian00: sbi portb,0
jian000:
00006b b303 in r16,pinc
00006c ff04 sbrs r16,4
00006d cffd rjmp jian000
00006e 2744 clr r20
00006f 9508 ret
jian1:
000070 9bc1 sbis portb,1 ;翻转PB1的输出状态
000071 c002 rjmp jian11
000072 98c1 cbi portb,1
000073 c001 rjmp jian111
000074 9ac1 jian11: sbi portb,1
jian111:
000075 b303 in r16,pinc
000076 ff05 sbrs r16,5
000077 cffd rjmp jian111
000078 2744 clr r20
000079 9508 ret
jian2:
00007a 9bc2 sbis portb,2 ;翻转PB2的输出状态
00007b c002 rjmp jian22
00007c 98c2 cbi portb,2
00007d c001 rjmp jian222
00007e 9ac2 jian22: sbi portb,2
jian222:
00007f b303 in r16,pinc
000080 ff06 sbrs r16,6
000081 cffd rjmp jian222
000082 2744 clr r20
000083 9508 ret
jian3:
000084 9bc3 sbis portb,3 ;翻转PB3的输出状态
000085 c002 rjmp jian33
000086 98c3 cbi portb,3
000087 c001 rjmp jian333
000088 9ac3 jian33: sbi portb,3
jian333:
000089 b303 in r16,pinc
00008a ff07 sbrs r16,7
00008b cffd rjmp jian333
00008c 2744 clr r20
00008d 9508 ret
jian4:
00008e 9bc4 sbis portb,4 ;翻转PB4的输出状态
00008f c002 rjmp jian44
000090 98c4 cbi portb,4
000091 c001 rjmp jian444
000092 9ac4 jian44: sbi portb,4
jian444:
000093 b303 in r16,pinc
000094 ff04 sbrs r16,4
000095 cffd rjmp jian444
000096 2744 clr r20
000097 9508 ret
jian5:
000098 9bc5 sbis portb,5 ;翻转PB5的输出状态
000099 c002 rjmp jian55
00009a 98c5 cbi portb,5
00009b c001 rjmp jian555
00009c 9ac5 jian55: sbi portb,5
jian555:
00009d b303 in r16,pinc
00009e ff05 sbrs r16,5
00009f cffd rjmp jian555
0000a0 2744 clr r20
0000a1 9508 ret
jian6:
0000a2 9bc6 sbis portb,6 ;翻转PB6的输出状态
0000a3 c002 rjmp jian66
0000a4 98c6 cbi portb,6
0000a5 c001 rjmp jian666
0000a6 9ac6 jian66: sbi portb,6
jian666:
0000a7 b303 in r16,pinc
0000a8 ff06 sbrs r16,6
0000a9 cffd rjmp jian666
0000aa 2744 clr r20
0000ab 9508 ret
jian7:
0000ac 9bc7 sbis portb,7 ;翻转PB7的输出状态
0000ad c002 rjmp jian77
0000ae 98c7 cbi portb,7
0000af c001 rjmp jian777
0000b0 9ac7 jian77: sbi portb,7
jian777:
0000b1 b303 in r16,pinc
0000b2 ff07 sbrs r16,7
0000b3 cffd rjmp jian777
0000b4 2744 clr r20
0000b5 9508 ret
jian8: ;让数码管显示特定的字符
0000b6 e0f1 ldi zh,high(tab*2)
0000b7 eae6 ldi zl,low(tab*2)
0000b8 0fe4 add zl,r20
0000b9 95c8 lpm
0000ba ba08 out portb,r0
0000bb 9543 inc r20
0000bc 3140 cpi r20,$10
0000bd f008 brlo jian888
0000be 2744 clr r20
jian888:
0000bf b303 in r16,pinc
0000c0 ff04 sbrs r16,4
0000c1 cffd rjmp jian888
0000c2 9508 ret
jian9: ;改变数码管的位线
0000c3 9408 sec
0000c4 9557 ror r21
0000c5 3f57 cpi r21,$f7
0000c6 f409 brne jian99
0000c7 e75f ldi r21,$7f
0000c8 bb52 jian99: out portd,r21
jian999:
0000c9 b303 in r16,pinc
0000ca ff05 sbrs r16,5
0000cb cffd rjmp jian999
0000cc 9508 ret
jiana: ;无效键
0000cd 9508 ret
jianb:
0000ce 9508 ret
jianc:
0000cf 9508 ret
jiand:
0000d0 9508 ret
jiane:
0000d1 9508 ret
jianf:
0000d2 9508 ret
0000d3 tab: .db $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90
0000d3 f9c0
0000d4 b0a4
0000d5 9299
0000d6 f882
0000d7 9080
.db $88,$83,$c6,$a1,$86,$8e
0000d8 8388
0000d9 a1c6
0000da 8e86
delay: ;延时
0000db e070 t1: ldi r23,$200
0000dc e080 t2: ldi r24,$200
0000dd 958a t3: dec r24
0000de f7f1 brne t3
0000df 957a dec r23
0000e0 f7d9 brne t2
0000e1 956a dec r22
0000e2 f7c1 brne t1
0000e3 9508 ret
Assembly complete with no errors.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -