⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sl08.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
          .equ	DDD3	=3
          .equ	DDD2	=2
          .equ	DDD1	=1
          .equ	DDD0	=0
         
         ;PIND
          .equ	PIND7	=7
          .equ	PIND6	=6
          .equ	PIND5	=5
          .equ	PIND4	=4
          .equ	PIND3	=3
          .equ	PIND2	=2
          .equ	PIND1	=1
          .equ	PIND0	=0
         
         ;SPCR
          .equ	SPIE	=7
          .equ	SPE		=6
          .equ	DORD	=5
          .equ	MSTR	=4
          .equ	CPOL	=3
          .equ	CPHA	=2
          .equ	SPR1	=1
          .equ	SPR0	=0
         
         ;SPSR
          .equ	SPIF	=7
          .equ	WCOL	=6
         
         ;USR
          .equ	RXC		=7
          .equ	TXC		=6
          .equ	UDRE	=5
          .equ	FE		=4
          .equ	OR		=3
         
         ;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	sl08
          .org	$020
          sl08:
000020 e012      	ldi r17,$02	;栈指针置初值SP=0x025F
000021 e50f      	ldi r16,$5f
000022 bf1e      	out sph,r17
000023 bf0d      	out spl,r16
000024 ef1f      	ldi r17,$ff
000025 ef00      	ldi r16,$f0
000026 bb17      	out ddrb,r17	;PB口作字线
000027 bb18      	out portb,r17
000028 bb01      	out ddrd,r16	;PD7~PD4作位线
000029 bb12      	out portd,r17
00002a e00f      	ldi r16,$0f
00002b bb04      	out ddrc,r16	;PC口用于键盘检测
00002c bb15      	out portc,r17
00002d e028      	ldi r18,8	;欲显示的字符8
00002e e75f      	ldi r21,$7f	;数码管位线初值
          loop0:
00002f d01b      	rcall	jiance	;调用键盘检测程序
000030 e0f1      	ldi zh,high(tab*2)
000031 e4e0      	ldi zl,low(tab*2)
000032 0fe2      	add zl,r18
000033 95c8      	lpm		;查出七段码
000034 2d30      	mov r19,r0
000035 bb38      	out portb,r19	;字线输出
000036 bb52      	out portd,r21	;位线输出
000037 9408      	sec		;进位位置 1 
000038 9557      	ror r21		;循环位线
000039 3f57      	cpi r21,$f7	;控制位线的范围
00003a f409      	brne	loop1
00003b e75f      	ldi r21,$7f	;重置位线初值
00003c e062      loop1:	ldi r22,$02
00003d d001      	rcall delay
00003e cff0      	rjmp	loop0
         	
          delay:
00003f e174      t1:	ldi r23,20
000040 ec88      t2:	ldi r24,200
000041 ec98      t3:	ldi r25,200
000042 959a      t4:	dec r25
000043 f7f1      	brne	t4
000044 958a      	dec r24
000045 f7d9      	brne	t3
000046 957a      	dec r23
000047 f7c1      	brne	t2
000048 956a      	dec r22
000049 f7a9      	brne	t1
00004a 9508      	ret
         	
          jiance:	
00004b ef1e      	ldi r17,$fe		;让PC0输出为0
00004c bb15      	out portc,r17
00004d c00a      	rjmp	jiance0		;检测是否有键按下
          jiance11:
00004e ef1d      	ldi r17,$fd		;让PC1输出为0
00004f bb15      	out portc,r17
000050 c011      	rjmp	jiance1
          jiance22:
000051 ef1b      	ldi r17,$fb		;让PC1输出为0
000052 bb15      	out portc,r17
000053 c018      	rjmp	jiance2
          jiance33:
000054 ef17      	ldi r17,$f7		;让PC1输出为0
000055 bb15      	out portc,r17
000056 c01f      	rjmp	jiance3
000057 9508      	ret			;无键按下
          jiance0:
000058 b303      	in r16,pinc
000059 ff07      	sbrs r16,7		;检测键“F”是否按下
00005a d043      	rcall	jianf		;按下则执行“F”键的程序
00005b ff06      	sbrs r16,6		;检测键“E”是否按下
00005c d03f      	rcall	jiane		;按下则执行“E”键的程序
00005d ff05      	sbrs r16,5		;检测键“D”是否按下
00005e d03b      	rcall	jiand		;按下则执行“D”键的程序
00005f ff04      	sbrs r16,4		;检测键“C”是否按下
000060 d037      	rcall	jianc		;按下则执行“C”键的程序
000061 cfec      	rjmp	jiance11
          jiance1:
000062 b303      	in r16,pinc
000063 ff07      	sbrs r16,7		;检测“B”键是否按下
000064 d031      	rcall	jianb		;按下则执行“B”键的程序
000065 ff06      	sbrs r16,6		;检测“A”键是否按下
000066 d02d      	rcall	jiana		;按下则执行“A”键的程序
000067 ff05      	sbrs r16,5		;检测键“9”是否按下    
000068 d029      	rcall	jian9
000069 ff04      	sbrs r16,4
00006a d025      	rcall	jian8		;检测键“8”是否按下
00006b cfe5      	rjmp	jiance22
          jiance2:
00006c b303      	in r16,pinc
00006d ff07      	sbrs r16,7		;检测键“7”是否按下
00006e d01f      	rcall	jian7
00006f ff06      	sbrs r16,6		;检测键“6”是否按下
000070 d01b      	rcall	jian6
000071 ff05      	sbrs r16,5		;检测键“5”是否按下
000072 d017      	rcall	jian5
000073 ff04      	sbrs r16,4		;检测键“4”是否按下
000074 d013      	rcall	jian4
000075 cfde      	rjmp	jiance33
          jiance3:
000076 b303      	in r16,pinc
000077 ff07      	sbrs r16,7		;检测键“3”是否按下
000078 d00d      	rcall	jian3
000079 ff06      	sbrs r16,6		;检测键“2”是否按下
00007a d009      	rcall	jian2
00007b ff05      	sbrs r16,5		;检测键“1”是否按下
00007c d005      	rcall	jian1
00007d ff04      	sbrs r16,4		;检测键“0”是否按下
00007e d001      	rcall	jian0
00007f 9508      	ret		;循环检测键盘
         
          jian0:	
000080 e020      	ldi r18,0	;欲显示的数为0
000081 9508      	ret
         
          jian1:	
000082 e021      	ldi r18,1	;欲显示的数为1
000083 9508      	ret
         
          jian2:	
000084 e022      	ldi r18,2	;欲显示的数为2
000085 9508      	ret
         
          jian3:	
000086 e023      	ldi r18,3	;欲显示的数为3
000087 9508      	ret
         
          jian4:	
000088 e024      	ldi r18,4	;欲显示的数为4
000089 9508      	ret
         
          jian5:	
00008a e025      	ldi r18,5	;欲显示的数为5
00008b 9508      	ret
         
          jian6:	
00008c e026      	ldi r18,6	;欲显示的数为6
00008d 9508      	ret
         
          jian7:	
00008e e027      	ldi r18,7	;欲显示的数为7
00008f 9508      	ret
         
          jian8:	
000090 e028      	ldi r18,8	;欲显示的数为8
000091 9508      	ret
         
          jian9:	
000092 e029      	ldi r18,9	;欲显示的数为9
000093 9508      	ret
         
          jiana:	
000094 e02a      	ldi r18,10	;欲显示的数为10 "A"
000095 9508      	ret
         
          jianb:	
000096 e02b      	ldi r18,11	;欲显示的数为11 "B"
000097 9508      	ret
         
          jianc:	
000098 e02c      	ldi r18,12	;欲显示的数为12 "C"
000099 9508      	ret
         
          jiand:	
00009a e02d      	ldi r18,13	;欲显示的数为13 "D"
00009b 9508      	ret
         
          jiane:	
00009c e02e      	ldi r18,14	;欲显示的数为14 "E"
00009d 9508      	ret
         
          jianf:	
00009e e02f      	ldi r18,15	;欲显示的数为15 "F"
00009f 9508      	ret
         		
          tab: 
          	.db $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90
0000a0 f9c0
0000a1 b0a4
0000a2 9299
0000a3 f882
0000a4 9080
          	.db $88,$83,$c6,$a1,$86,$8e
0000a5 8388
0000a6 a1c6
0000a7 8e86

Assembly complete with no errors.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -