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

📄 sg1.lst

📁 the practice of proteus and avr
💻 LST
字号:

AVRASM ver. 1.30  sg1.ASM Thu Apr 19 10:38:07 2007


          .device AT90S8535
          .equ	PORTB	=$18 		
          .equ	DDRB	=$17 		
          .equ    PINB    =$16
          .equ    SPH     =$3E
          .equ    SPL     =$3D
          .equ    EECR	=$1C
          .equ    EEDR	=$1D
          .equ    EEARH	=$1F
          .equ    EEARL	=$1E
          .def 	ZH     	=r31
          .def 	ZL     	=r30
         
000000 c024      	rjmp	RESET			;处理复位
          EEWrite:				;写EEPROM子程序,r18、r17放写入地址,r16放要写入的数据
000001 99e1      	sbic	EECR,01			;如果EEWE不清除
000002 cffe      	rjmp	EEWrite			;等待
000003 bb2f      	out	EEARH,r18		;输出地址
000004 bb1e      	out	EEARL,r17
000005 bb0d      	out	EEDR,r16		;输出数据
000006 9ae2      	sbi	EECR,02		 	;设置EEPROM写选通
000007 9ae1      	sbi	EECR,01			;该指令需4个时钟周期,由于它暂停CPU2个时钟周期
000008 9508      	ret
          EERead:					;读EEPROM子程序,r18、r17放读出地址,r16放读到的数据
000009 99e1      	sbic	EECR,01			;如果EEWE不清除
00000a cffe      	rjmp	EERead			;等待
00000b bb2f      	out	EEARH,r18		;输出地址
00000c bb1e      	out	EEARL,r17
00000d 9ae0      	sbi	EECR,00			;设置EEPROM读选通
00000e b30d      	in	r16,EEDR		;读入数据
00000f 9508      	ret
          EEWrite_seq:				;连续写EEPROM子程序,写入地址(r25、r24)+1,写入的数据放r16
000010 99e1      	sbic	EECR,01			;如果EEWE不清除
000011 cffe      	rjmp	EEWrite_seq		;等待
000012 b38e      	in	r24,EEARL		;得到地址
000013 b39f      	in	r25,EEARH
000014 9601      	adiw	r24,0x01		;地址加1
000015 bb8e      	out	EEARL,r24		;输出地址
000016 bb9f      	out	EEARH,r25
000017 bb0d      	out	EEDR,r16		;输出数据
000018 9ae2      	sbi	EECR,02			;设置EEPROM写选通
000019 9ae1      	sbi	EECR,01
00001a 9508      	ret
          EERead_seq:				;连续读EEPROM子程序,读出地址(r25、r24)+1,读到的数据放r16
00001b 99e1      	sbic	EECR,01			;如果EEWE不清除
00001c cffe      	rjmp	EERead_seq		;等待
00001d b38e      	in	r24,EEARL		;得到地址
00001e b39f      	in	r25,EEARH
00001f 9601      	adiw	r24,0x01		;地址加1
000020 bb8e      	out	EEARL,r24		;输出地址
000021 bb9f      	out	EEARH,r25
000022 9ae0      	sbi	EECR,00			;设置EEPROM读选通
000023 b30d      	in	r16,EEDR		;读入数据
000024 9508      	ret
         	
          RESET:					;测试程序
000025 e002      	ldi	r16,$02			;栈指针置初值
000026 bf0e      	out	SPH,r16
000027 e50f      	ldi	r16,$5f
000028 bf0d      	out	SPL,r16
         ;*****将aa写入EEPROM的$40地址,再读出来送B口输出*****
000029 ef0f      	ldi	r16,$ff			;定义B口为输出
00002a bb07      	out	DDRB,r16
00002b ea0a      	ldi	r16,$aa
00002c e020      	ldi	r18,$00
00002d e410      	ldi	r17,$40
00002e dfd2      	rcall	EEWrite			;存储$aa到EEPROM的$40地址
00002f e020      	ldi	r18,$00
000030 e410      	ldi	r17,$40
000031 dfd7      	rcall	EERead			;读$40地址
000032 bb08      	out	PORTB,r16
         ;*****以$55、$aa、$55、$aa、...模式填充EEPROM*****
000033 e130      	ldi	r19,16			;初始化循环计数器
000034 ef4f      	ser	r20			;r20←$FF
000035 bb4f      	out	EEARH,r20		;EEAR←$FF
000036 ef4f      	ser	r20			;r20←$FF
000037 bb4e      	out	EEARL,r20		;EEAR←$FF(start address-1)
000038 e505      loop1:	ldi	r16,$55
000039 dfd6      	rcall	EEWrite_seq		;写$55到EEPROM
00003a ea0a      	ldi	r16,$aa
00003b dfd4      	rcall	EEWrite_seq		;写$aa到EEPROM
00003c 953a      	dec	r19			;计数器减1
00003d f7d1      	brne	loop1			;未完成循环
         ;*****拷贝EEPROM最前10个字节到r2~r11*****
00003e ef4f      	ser	r20
00003f bb4f      	out	EEARH,r20		;EEARH←$FF
000040 ef4f      	ser	r20			;r20←$FF
000041 bb4e      	out	EEARL,r20		;EEAR←$FF(start address-1)
000042 27ff      	clr	ZH
000043 e0e1      	ldi	ZL,1			;Z指针指向r1
000044 dfd6      loop2:	rcall	EERead_seq		;得到EEPROM数据
000045 8300      	st	Z,r16			;存储到SRAM
000046 95e3      	inc	ZL
000047 30ec      	cpi	ZL,12			;到结尾?
000048 f7d9      	brne	loop2			;未完成循环
          forever:
000049 cfff      	rjmp	forever			;无限循环
Assembly complete with no errors.

⌨️ 快捷键说明

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