E
engr.waqas
Guest
내가 I2C 인터페이스를 사용하여 인터페이스 18f452 원하는 그림 DS1307 함께.
나는 제대로 데이터를 읽을 수 있어요뿐만 아니라 "??"LCD에 표시됩니다.
MPLAB C18에서 내의 코딩은 아래에 제공됩니다
참고 : 이것은 코딩)입니다 채널 enabeling에 대해서만 "잠시 중단"(제 2의 레지스터에 비트 DS1307
#은 <p18f452.h> 포함
#은 <i2c.h> 포함
#은 PORTBbits.RB0 R을 정의
#은 PORTBbits.RB1 정의 RW를
#은 PORTBbits.RB2을 정의 ko 페이지
itime 무효 MSDelay을 (서명 int의)
(
서명되지 않은 int 나, j를;
0은 (i =; 전 <itime; 난 )
(에 대한 일본 = 0; 일본 <135; j를 );
)
) 값을 무효 lcdcmd (서명 번째 문자
(
PORTD = 값;
rs = 0;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
)무효의 BCDtoASCIIandSEND (서명 번째 문자 myvalue)
(
서명되지 않은 번째 문자 tmp를 = myvalue;
/ / 액정 initilization
TRISD = 0;
TRISB = 0;
ko를 = 0;
MSDelay (15);
) lcdcmd (0x38;
MSDelay (15);
) lcdcmd (0x0C;
MSDelay (15);
) lcdcmd (나타내고 0x01;
MSDelay (15);
) lcdcmd (0x06;
MSDelay (15);
) lcdcmd (0x86;
MSDelay (15);tmp를 = tmp를 &0xF0; / / 마스크 낮은 한입
tmp를 = tmp 디렉토리>> 4; / / 그것을 교환
tmp를 = tmp를 아스키 | 0x30는, / 그것을 /가
PORTD = tmp를;
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
에 대한 tmp를 = myvalue; / / 다른 자리
tmp를 = tmp를 &0x0F; / / 마스크 상단 한입
tmp를 = tmp를 아스키 | 0x30는, / 그것을 /가
PORTD = tmp를;
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
PORTD =':';
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
)) 무효 SDELAY을 (int 석사
(
서명되지 않은 int 나, j를;
0은 (i =; 전 <미시시피; 난 )
(에 대한 일본 = 0; 일본 <135; j를 );
)
무효의 초기화 (무효)
(
TRISCbits.TRISC3 = 1; / / RC3 SCL으로 입력 ()
TRISCbits.TRISC4 = 1; / / RC4 SDA로 입력 ()
/ / MSSP 구성
SSPCON1 = 0x28; / / 사용 MSSP 마스터 모드
SSPCON2 = 0;
SSPSTATbits.SMP = 1; / / 비활성화 슬루율 제어
SSPSTATbits.CKE = 0; / / I2C 호환
SSPADD = 0x09은; / / Fscl = 100kHz가 4MHz 잔 Fosc =
/ / Fscl = Fosc / (4 *는 ( 1을 SSPADD))
TRISD = 0;
TRISB = 0;
ko를 = 0;
MSDelay (15);
) lcdcmd (0x38;
MSDelay (15);
) lcdcmd (0x0C;
MSDelay (15);
) lcdcmd (나타내고 0x01;
MSDelay (15);
) lcdcmd (0x06;
MSDelay (15);
) lcdcmd (0x86;
MSDelay (15);
)
) 무효 메인 (무효
(
서명되지 않은 번째 문자 temp1 = 0, 난;
초기화 ();(동안 (1)
StartI2C ();
(만약! DataRdyI2C ())
WriteI2C은 (0x00); / / 주소
IdleI2C ();
(만약! DataRdyI2C ())
WriteI2C (0x80으로); / / 데이터
IdleI2C ();
StopI2C ();
IdleI2C ();(만약! DataRdyI2C ())
temp1 = ReadI2C ();
StopI2C ();
)하는 경우는 (i == 4
NotAckI2C (); / / NACK 전에 정지
다른 사람
AckI2C (); i2c_idle () 읽기 / / ACK는 다음에;
BCDtoASCIIandSEND (temp1);
)
StopI2C ();
)
나는 제대로 데이터를 읽을 수 있어요뿐만 아니라 "??"LCD에 표시됩니다.
MPLAB C18에서 내의 코딩은 아래에 제공됩니다
참고 : 이것은 코딩)입니다 채널 enabeling에 대해서만 "잠시 중단"(제 2의 레지스터에 비트 DS1307
#은 <p18f452.h> 포함
#은 <i2c.h> 포함
#은 PORTBbits.RB0 R을 정의
#은 PORTBbits.RB1 정의 RW를
#은 PORTBbits.RB2을 정의 ko 페이지
itime 무효 MSDelay을 (서명 int의)
(
서명되지 않은 int 나, j를;
0은 (i =; 전 <itime; 난 )
(에 대한 일본 = 0; 일본 <135; j를 );
)
) 값을 무효 lcdcmd (서명 번째 문자
(
PORTD = 값;
rs = 0;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
)무효의 BCDtoASCIIandSEND (서명 번째 문자 myvalue)
(
서명되지 않은 번째 문자 tmp를 = myvalue;
/ / 액정 initilization
TRISD = 0;
TRISB = 0;
ko를 = 0;
MSDelay (15);
) lcdcmd (0x38;
MSDelay (15);
) lcdcmd (0x0C;
MSDelay (15);
) lcdcmd (나타내고 0x01;
MSDelay (15);
) lcdcmd (0x06;
MSDelay (15);
) lcdcmd (0x86;
MSDelay (15);tmp를 = tmp를 &0xF0; / / 마스크 낮은 한입
tmp를 = tmp 디렉토리>> 4; / / 그것을 교환
tmp를 = tmp를 아스키 | 0x30는, / 그것을 /가
PORTD = tmp를;
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
에 대한 tmp를 = myvalue; / / 다른 자리
tmp를 = tmp를 &0x0F; / / 마스크 상단 한입
tmp를 = tmp를 아스키 | 0x30는, / 그것을 /가
PORTD = tmp를;
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
PORTD =':';
rs = 1;
RW는 = 0;
ko를 = 1;
MSDelay (1);
ko를 = 0;
MSDelay (1);
)) 무효 SDELAY을 (int 석사
(
서명되지 않은 int 나, j를;
0은 (i =; 전 <미시시피; 난 )
(에 대한 일본 = 0; 일본 <135; j를 );
)
무효의 초기화 (무효)
(
TRISCbits.TRISC3 = 1; / / RC3 SCL으로 입력 ()
TRISCbits.TRISC4 = 1; / / RC4 SDA로 입력 ()
/ / MSSP 구성
SSPCON1 = 0x28; / / 사용 MSSP 마스터 모드
SSPCON2 = 0;
SSPSTATbits.SMP = 1; / / 비활성화 슬루율 제어
SSPSTATbits.CKE = 0; / / I2C 호환
SSPADD = 0x09은; / / Fscl = 100kHz가 4MHz 잔 Fosc =
/ / Fscl = Fosc / (4 *는 ( 1을 SSPADD))
TRISD = 0;
TRISB = 0;
ko를 = 0;
MSDelay (15);
) lcdcmd (0x38;
MSDelay (15);
) lcdcmd (0x0C;
MSDelay (15);
) lcdcmd (나타내고 0x01;
MSDelay (15);
) lcdcmd (0x06;
MSDelay (15);
) lcdcmd (0x86;
MSDelay (15);
)
) 무효 메인 (무효
(
서명되지 않은 번째 문자 temp1 = 0, 난;
초기화 ();(동안 (1)
StartI2C ();
(만약! DataRdyI2C ())
WriteI2C은 (0x00); / / 주소
IdleI2C ();
(만약! DataRdyI2C ())
WriteI2C (0x80으로); / / 데이터
IdleI2C ();
StopI2C ();
IdleI2C ();(만약! DataRdyI2C ())
temp1 = ReadI2C ();
StopI2C ();
)하는 경우는 (i == 4
NotAckI2C (); / / NACK 전에 정지
다른 사람
AckI2C (); i2c_idle () 읽기 / / ACK는 다음에;
BCDtoASCIIandSEND (temp1);
)
StopI2C ();
)