컨트롤러"코드를

C

choi_new

Guest
친애하는 친구,

죄송 해요, 나를 다시입니다.
내가 AT24C512 데이터에 액세스하는 8051 코드를 작성했습니다.
BTW, 난 단지 EPROM 에뮤했을 때 보드를 사용하여 읽을 수있습니다 FFH 내 프로그램을 찾았지만, 난 이미 EEPROM이에 bmp 파일 레코딩.

그래서, 난 내 프로그램에 버그가 있다고 생각.

아래에있는 내 코드입니다.
누군가 날 프로그램을 찾아 도와 드릴까요??

고마워 만!!피터
;;==== 코드SDA는 비트 P2.2
SCL 비트 P2.3
; SDA는 비트 P2.3
; SCL 비트 P2.2

ADD0 비트 P2.0
Add1 비트 P2.1

FADDR EQU 0A0H

ADDR_HI1 EQU 30H
ADDR_LO1 EQU 31H
ADDR_HI2 EQU 32H
ADDR_LO2 EQU 33H
RAM_DATA EQU 34H
ORG를 00h

MOV ADDR_HI1, # 00h
MOV ADDR_LO1, # 00h
MOV ADDR_HI2, # 00h
MOV ADDR_LO2, # 00h
MOV RAM_DATA, # 00h

가능한 I2C :
INC DPTR
MOV ADDR_HI2, DPH
MOV ADDR_LO2, DPL

LCALL READ_RANDOM
NOP
MOV, RAM_DATA
MOV, RAM_DATA
MOV, RAM_DATA
MOV, RAM_DATA
SJMP 가능한 I2C
READ_CURRENT :
; AT24Cxx 현재 주소 읽기 기능입니다.
; A에서 대답을 반환 데이터 프로그래밍 주소 호출
; 반환 버스를 사용할 수없는 설정을 나타냅니다 CY 자료
; 또는 해결 장치를 인정하지 못했습니다.

LCALL 스타트
제이 X_45; 취소 버스를 사용할 수없는 경우
; RL; 비트 3시 1분에 프로그램의 주소
; ORL, # FADDR; 주소 고정에 추가
; SETB ACC.0; 읽기 지정 운영

MOV, # 0A0H
LCALL 샤우트; 장치의 주소를 보내
제이 X_44; 중단없는 경우 인정

LCALL 신; 바이트의 데이터를 수신
MOV RAM_DATA,
LCALL NAK; 바이트를 인정하지 않아
CLR은 C; 분명 오류 플래그
X_44 :
LCALL 정지
RET
X_45 :
RETREAD_RANDOM :
; AT24Cxx 임의의 읽기 기능입니다.
;에서 호출 프로그램의 주소와 2 바이트의 주소
; 쌍 ADDR_HI 등록 : ADDR_LO.A에서 반환 데이터를
; 반환 버스를 사용할 수없는 설정을 나타냅니다 CY 자료
; 또는 해결 장치를 인정하지 못했습니다.
밀어 B 조
MOV B 조,; 프로그램의 주소를 복사하기

; 내부 주소를 설정하는 명령을 쓸 보내기 바보야.

LCALL 스타트
제이 X_47; 취소 버스를 사용할 수없는 경우
; RL; 비트 3시 1분에 프로그램의 주소
; ORL, # FADDR; 주소 고정에 추가

; CLR을 ACC.0, 쓰기 작업을 지정
MOV, # 0A0H
LCALL 샤우트; 장치의 주소를 보내
제이 X_46; 중단없는 경우 인정

MOV, ADDR_HI1;; 주소의 높은 바이트를 보내
LCALL 샤우트;
제이 X_46; 중단없는 경우 인정

MOV, ADDR_LO1; 주소가 낮은 바이트를 보내
LCALL 샤우트;
제이 X_46; 중단없는 경우 인정

MOV, ADDR_HI2;; 주소의 높은 바이트를 보내
LCALL 샤우트;
제이 X_46; 중단없는 경우 인정

MOV, ADDR_LO2; 주소가 낮은 바이트를 보내
LCALL 샤우트;
제이 X_46; 중단없는 경우 인정
; 통화 현재 주소 읽기 기능입니다.
MOV, B 조; 프로그램 주소
LCALL READ_CURRENT

LJMP X_47; 종료
X_46 :
LCALL 정지X_47 : POP를 B 조
RET시작 :
;, 높은 정의 스타트 보내기 높은가격순 - 낮은가격순 SDA는 SCL와 함께합니다.
; SCL, SDA는 낮게 돌아가기.
만약 버스를 사용할 수없습니다; 반환 설정의 CY.

SETB SDA는
SETB SCL

; 확인 버스가없습니다.
JNB SDA는, X_40; 경우에는 고등학교가 아니라 점프
JNB SCL, X_40; 경우에는 고등학교가 아니라 점프
NOP; 설치 지연 및 지연주기를 시행
CLR은 SDA는
nop; 잡아 지연 시행
nop;
nop;
nop;
nop;
CLR은 SCL

CLR은 C; 분명 오류 플래그
SJMP X_41
X_40 :
SETB C; 설정 오류 플래그
X_41 :
RET

정지 :
;, 낮은 정의된 전송 중지 높은 높이의 SDA는 SCL와 함께합니다.
; SCL 낮은 진입 예상.SCL, SDA는 고속 돌아가기.
CLR은 SDA는
nop; SCL 낮은 데이터를 설치 시행
nop
SETB SCL
nop; 설치 지연 시행
nop;
nop;
nop;
nop;
SETB SDA는
RET샤우트 :
; AT24Cxx에 바이트를 비트 쉬프트 가장 중요한 첫 번째.
; SCL, SDA는 낮은 진입 예상.SCL 낮게 돌아가기.
; 데이터와 호출 대답을 보내
; 반환 노예로 인정하고 실패를 표시하도록 설정의 CY.
; 대답을 망가뜨리고
밀어 B 조
MOV B 조, # 8; 비트 카운터
X_42 :
RLC; CY 자료로 이동할 비트
SDA는 MOV는 C; 출력 비트
nop; SCL 낮은 데이터를 설치 시행
SETB SCL; 시계 인상
nop; SCL 높은 집행
nop;
nop;
nop;
CLR은 SCL; 드롭 클럭
DJNZ B 조, X_42; 다음 비트

SETB SDA는; 릴리스 SDA는 ACK는에 대한
nop; SCL 낮은 원조 시행
nop;
SETB SCL; ACK는 시계가 인상
nop; SCL 높은 집행
nop;
nop;
nop;
MOV C를 SDA는; ACK는 약간 좀
CLR은 SCL; 드롭 ACK는 시계
; LCALL ACK는
POP를 B 조
RET

신 :
; AT24Cxx에서 바이트에서 가장 중요한 첫 번째 비트 쉬프트.
; SCL 낮은 진입 예상.SCL 낮게 돌아가기.
; 반환 데이터가 A에서 바이트를 받았습니다
; SETB SDA는; SDA는 입력 확인
; B 조 밀어
; MOV B 조, # 8; 비트 수를
; X_43 :
; nop; 시행 SCL 낮은 데이터를 설치
; nop;
; nop;
; SETB SCL; 시계 인상
; nop; 집행 높은 SCL
; nop;
; MOV C를 SDA는; 입력 비트
;로 RLC; 이동할 비트 바이트
; CLR은 SCL; 드롭 클럭
; DJNZ B 조, X_43; 다음 비트
; POP를 B 조
; RET
SETB SDA는;; SDA는 입력,使SDA는为高,准备读확인
B 조 밀어;
MOV B 조, # 08D ;;;;; 비트 카운트,设置位计数器
L2 : NOP;; 시행 SCL 및 데이터 설정을 낮은保持SCL为低且使数据稳定
NOP
SETB SCL;; 시계를 들어올리면,升高时钟
NOP;; SCL 높은 집행,保持SCL为高
NOP
MOV C를 SDA는;; 입력 비트,输入位
RLC;; 바이트로 이동할 비트,将位移入
CLR은 SCL;; 드롭 다운 시계,降低时钟

DJNZ B 조, L2;; 다음 비트,传送下一位
POP를 B 조
RET
NAK :
; 부정적인 시계를 비트 ()이 높은 것을 인정합니다.
; SCL 낮은 진입 예상.SDA는 SCL 낮은 높이와 돌아가기.

SETB SDA는; NAK 비트
nop; SCL 낮은 데이터를 설치 시행
nop;
SETB SCL; 시계 인상
nop; SCL 높은 집행
nop;
nop;
nop;
CLR은 SCL; 드롭 클럭
RET

ACK는 :

; 비트 ()이 낮은 것을 인정을 시계.
; SCL 낮은 진입 예상.SCL, SDA는 낮게 돌아가기.

CLR은 SDA는;는 ACK 비트
nop; SCL 낮은 데이터를 설치 시행
nop;
setb SCL; 시계 인상
nop; SCL 높은 집행
nop;
nop;추가 1 분 후 :그냥 기억,이 코드를 aurthor 아닙니다.
후에 그것을 읽고 난 그냥 내 응용 프로그램에 대한 코드를 변경할 수있습니다.

그래서, 지금 홀더 오전 복사할 수없습니다

 
가능한 잘못된 시간 지연 문제가 발생 무엇입니까??

 
먼저 귀하의 hardware.your EEPROM과 핀에 연결을 확인하려고합니다. (데이터, 다른 분들에게도 ond 버스). 그리고 만약 거기에 어떤 문제가 어쩌면 마이크로 당신을 it.and 읽으려고 시도를 위해 조정 기간에 회신하지 못할 eepron 귀하의 타이밍을 확인 밤은 AAAA와 그것의 매우 간단한 데이터 (테스트 5555를 사용하여 EEPROM이 ... 그리고 ... 그것에).

 
친애하는 친구,

나는이 문제를 해결했습니다!
감사합니다 귀하의 조언에 대한 수백만 달러를

최고 감사합니다,

피터

 

Welcome to EDABoard.com

Sponsor

Back
Top