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

📄 6.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
rjmp	RESET                  ;处理复位
EEWrite:                       ;写EEPROM子程,r18:r17放写入地址,r16放要写入的数据
	sbic	EECR,EEWE      ;如果EEWE不清除
	rjmp	EEWrite        ;等待
	out 	EEARH,r18      ;输出地址
	out	EEARL,r17	
	out	EEDR,r16       ;输出数据
	sbi 	EECR,EEMWE     ;设置EEPROM写选通	
	sbi	EECR,EEWE      ;该指令需4个时钟周期,由于它暂停CPU 2个时钟周期
	ret
EERead:                        ;读EEPROM子程,r18:r17放读出地址,r16放读到的数据
	sbic	EECR,EEWE      ;如果EEWE不清除
	rjmp	EERead         ;等待
	out 	EEARH,r18      ;输出地址
	out	EEARL,r17	
	sbi     EECR,EERE      ;设置EEPROM读选通
	in      r16,EEDR       ;读入数据
	ret
EEWrite_seq:                   ;连续写EEPROM子程,写入地址(r25:r24)+1,写入的数据放r16
	sbic	EECR,EEWE      ;如果EEWE不清除
	rjmp	EEWrite_seq    ;等待
	in      r24,EEARL      ;得到地址
	in	r25,EEARH		
 	adiw    r24,0x01       ;地址加1
	out	EEARL,r24      ;输出地址
	out	EEARH,r25	
	out	EEDR,r16       ;输出数据
	sbi 	EECR,EEMWE     ;设置EEPROM写选通
	sbi	EECR,EEWE	
	ret
EERead_seq:                    ;连续读EEPROM子程,读出地址(r25:r24)+1,读到的数据放r16
	sbic	EECR,EEWE      ;如果EEWE不清除
	rjmp	EERead_seq     ;等待
	in      r24,EEARL      ;得到地址
	in	r25,EEARH		
	adiw	r24,0x01       ;地址加1
	out	EEARL,r24      ;输出地址
	out	EEARH,r25	
	sbi	EECR,EERE      ;设置EEPROM读选通
	in      r16,EEDR       ;读入数据
	ret
;测试程序
RESET:
	ldi	r16,$02        ;栈指针置初值
	out	SPH,r16	        
	ldi	r16,$5F	 
	out	SPL,r16
;*****将aa写入EEPROM的$40地址,再读出来送B口输出
        ldi     r16,$ff        ;定义B口为输出
        out     DDRB,r16
	ldi	r16,$aa   
	ldi	r18,$00
	ldi	r17,$40
	rcall   EEWrite        ;存储 $aa到EEPROM的$40地址
	ldi	r18,$00
	ldi	r17,$40
rcall	EERead                 ;读$40地址
out  PORTB,r16                 ;输出到PORT B口
;*****以 $55,$aa,$55,$aa,...模式填充EEPROM
	ldi	r19,16         ;初始化循环计数器
	ser 	r20            ;r20←$FF 
	out	EEARH,r20      ;EEARH←$FF
	ser	r20		
	out	EEARL,r20      ;EEAR←$FF (start address - 1)
loop1:	ldi	r16,$55	
	rcall   EEWrite_seq    ;写$55到EEPROM
	ldi	r16,$aa		
	rcall   EEWrite_seq    ;写$aa到EEPROM
	dec     r19            ;计数器减 1
	brne	loop1          ;未完成循环
;*****拷贝EEPROM最前10个字节到 r2-r11
	ser 	r20
	out	EEARH,r20      ;EEARH←$FF
	ser	r20	
	out	EEARL,r20      ;EEAR←$FF (start address - 1)
	clr 	ZH
	ldi	ZL,1	       ;Z-pointer points to r1
loop2:	
        rcall   EERead_seq     ;得到 EEPROM 数据
	st      Z,r16          ;存储到 SRAM
	inc	ZL
	cpi	ZL,12          ;到结尾?
	brne	loop2          ;未完成循环
forever: 
        rjmp	forever        ;无限循环,原地踏步

⌨️ 快捷键说明

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