我用了一个ATMEGA128的芯片,现无法操作EEPROM,我的程序如下,请大侠看看是那儿出了问题. ;**************read eeprom******************* readee: cli ;关中断 ldi r25,0x00 ldi r24,0x00 ldi xh,high(hddatehd);预置缓存地址 ldi xl,low(hddatehd) ldi temp1,0x0b ;置循环数 readee2: sbic eecr,eewe ;等待EEWE位变零 rjmp readee2 out eearh,r25 out eearl,r24 ;预置EEPROM地址 sbi eecr,eere ;置EERE位有效 in temp3,eedr ;读出数据 st x+,temp3 ;将数据存入缓冲 adiw r24,0x01 ;将EEPROM地址加1 dec temp1 ;将循环数减1 ; cpi temp1,0x00 brne readee2 ;读出所有的数据,共11个字节 sei ;开中断 ret ;**************write eeprom******************* writee: cli ;;关中断 ldi r25,0x00 ldi r24,0x00 ldi xh,high(hddatehd);预置缓存地址 ldi xl,low(hddatehd) ldi temp1,0x0b ;置循环数 writee1: ldi temp2,0x0f call yanshi ;调用延时程序,20ms writee2: sbic eecr,eewe ;等待EEWE位变零 rjmp writee2 out eearh,r25 out eearl,r24 ;预置EEPROM地址 ld temp3,x+ out eedr,temp3 ;准备写入的数据 ldi temp4,0b00000100;eemwe置1,并同时清eewe为0 ldi temp5,0b00000110;置位写允许位,将数据写入EEPROM out eecr,temp4; ;置位主机写入允许位 out eecr,temp5; ;置位写允许位,将数据写入EEPROM adiw r24,0x01 ;将EEPROM地址加1 dec temp1 ;将循环数减1 ; cpi temp1,0x00 brne readee1 ;写入所有的数据,共11个字节 sei ret
|