목차
1. 실험 목적
2. 실험도구
3. 실험 이론
TWI 란?
TWI의 동작
4. 실행 코드 분석
2. 실험도구
3. 실험 이론
TWI 란?
TWI의 동작
4. 실행 코드 분석
본문내용
ondition
STSTWCR,AL
RET
;------------------------------------------------
;AT24C16 Write (BH:BL=address, DL=data)
;------------------------------------------------
WRITE:LDIAL,0b10100100; START condition
STSTWCR,AL// TWINT, TWSTA, TWEN을 활성화 한다.
// TWINT : TWI가 현재의 동작을 완료하고 응용 소프트웨어를 사용한 적절한 조치가 필요한 경우에 1로 셋트 되면서 인터럽트를 요청한다.
// TWSTA : 1로 설정하면 TWI가 마스터로서 동작하여 TWI는 버스가 사용 가능한 상태인지를 체크하여 START 조건을 출력하며, 만약 버스가 비지 상태라면 STOP 조건이 검출될 때까지 기다렸다가 START 조건이 출력되고 나면 이 비트는 응용 소프트웨어에 의하여 클리어 되어야한다.
// TWEN : TWI가 동작하는 것을 가능하게 하며, SDA 및 SCL 핀을 유효하게 한다.
WRITE1:LDSAL,TWCR; START complete ?
SBRSAL,TWINT
RJMPWRITE1
WRITE2:LDSAL,TWSR// START 전송이 완료되면 TWINT이 1로 셋트 되면서, TWSR의 상태코드가 0x08로 된다.
ANDIAL,0b11111000
CPIAL,0x08 // AL이 0x08이 아니면 분기한다.
BRNEWRITE2
MOVAL,BH; SLA+W
LSLAL//DEVICE Address+W를 출력한다. TWDR 레지스터에 SLA+W를 저장한다. 만약 SLA+W의 전송이 완료되고 슬레이브로 부터 확인비트가 수신되면 TWINT가 1로 셋트되며 , TWSR 상태코드가 0x18 되고, 수신이 안 되면 0x20으로 된다.
ANDIAL,0b00001110 // 선택적으로 리셋한다.
ORIAL,0b10100000// 선택적으로 반전시킨다.
STSTWDR,AL// AL을 TWDR에 저장한다.
LDIAL,0b10000100
STSTWCR,AL// TWINT, TWEN을 활성화 한다.
WRITE3:LDSAL,TWCR; SLA+W complete ?
SBRSAL,TWINT
RJMPWRITE3
WRITE4:LDSAL,TWSR// WORD Address를 보낸다. 확인비트가 수신되면 TWINT가 1로 셋트되며, TWSR 상태코드가 0x28 되고, 수신 안 되면 0x30으로 된다.
ANDIAL,0b11111000
CPIAL,0x18 //AL이 0x18이 아니면 분기한다.
BRNEWRITE4
STSTWDR,BL; word address
LDIAL,0b10000100
STSTWCR,AL
WRITE5:LDSAL,TWCR; address complete ?
SBRSAL,TWINT
RJMPWRITE5
WRITE6:LDSAL,TWSR // Write DataSLA+W의 전송이 완료되면 TWDR 레지스터에 전송할 데이터 바이트를 쓰고 전송 데이터 전송이 완료되어 확인비트가 수신되면 TWINT가 1로 셋팅되며 , TWSR 상태코드가 0x28되고 수신이 되지 않으면 0x30으로 된다.
ANDIAL,0b11111000
CPIAL,0x28// AL이 0x28이 아닌 경우 분기한다.
BRNEWRITE6
STSTWDR,DL; write data
LDIAL,0b10000100
STSTWCR,AL
WRITE7:LDSAL,TWCR; data complete ?
SBRSAL,TWINT
RJMPWRITE7
WRITE8:LDSAL,TWSR// 상태코드가 0x28 = 0b0010 1000이 되면 STOP 조건을 출력하고 write를 마친다.
ANDIAL,0b11111000// AL = 0b0000 0000
CPIAL,0x28
BRNEWRITE8// AL이 0x28dl 되면 분기한다.
LDIAL,0b10010100; STOP condition
STSTWCR,AL
CALLD5MS; delay 5 ms for twr time
RET
;====================================================================
;Include User Subroutine File
;====================================================================
.include "OK128SUB.INC"; include OK-128 subroutine file
STSTWCR,AL
RET
;------------------------------------------------
;AT24C16 Write (BH:BL=address, DL=data)
;------------------------------------------------
WRITE:LDIAL,0b10100100; START condition
STSTWCR,AL// TWINT, TWSTA, TWEN을 활성화 한다.
// TWINT : TWI가 현재의 동작을 완료하고 응용 소프트웨어를 사용한 적절한 조치가 필요한 경우에 1로 셋트 되면서 인터럽트를 요청한다.
// TWSTA : 1로 설정하면 TWI가 마스터로서 동작하여 TWI는 버스가 사용 가능한 상태인지를 체크하여 START 조건을 출력하며, 만약 버스가 비지 상태라면 STOP 조건이 검출될 때까지 기다렸다가 START 조건이 출력되고 나면 이 비트는 응용 소프트웨어에 의하여 클리어 되어야한다.
// TWEN : TWI가 동작하는 것을 가능하게 하며, SDA 및 SCL 핀을 유효하게 한다.
WRITE1:LDSAL,TWCR; START complete ?
SBRSAL,TWINT
RJMPWRITE1
WRITE2:LDSAL,TWSR// START 전송이 완료되면 TWINT이 1로 셋트 되면서, TWSR의 상태코드가 0x08로 된다.
ANDIAL,0b11111000
CPIAL,0x08 // AL이 0x08이 아니면 분기한다.
BRNEWRITE2
MOVAL,BH; SLA+W
LSLAL//DEVICE Address+W를 출력한다. TWDR 레지스터에 SLA+W를 저장한다. 만약 SLA+W의 전송이 완료되고 슬레이브로 부터 확인비트가 수신되면 TWINT가 1로 셋트되며 , TWSR 상태코드가 0x18 되고, 수신이 안 되면 0x20으로 된다.
ANDIAL,0b00001110 // 선택적으로 리셋한다.
ORIAL,0b10100000// 선택적으로 반전시킨다.
STSTWDR,AL// AL을 TWDR에 저장한다.
LDIAL,0b10000100
STSTWCR,AL// TWINT, TWEN을 활성화 한다.
WRITE3:LDSAL,TWCR; SLA+W complete ?
SBRSAL,TWINT
RJMPWRITE3
WRITE4:LDSAL,TWSR// WORD Address를 보낸다. 확인비트가 수신되면 TWINT가 1로 셋트되며, TWSR 상태코드가 0x28 되고, 수신 안 되면 0x30으로 된다.
ANDIAL,0b11111000
CPIAL,0x18 //AL이 0x18이 아니면 분기한다.
BRNEWRITE4
STSTWDR,BL; word address
LDIAL,0b10000100
STSTWCR,AL
WRITE5:LDSAL,TWCR; address complete ?
SBRSAL,TWINT
RJMPWRITE5
WRITE6:LDSAL,TWSR // Write DataSLA+W의 전송이 완료되면 TWDR 레지스터에 전송할 데이터 바이트를 쓰고 전송 데이터 전송이 완료되어 확인비트가 수신되면 TWINT가 1로 셋팅되며 , TWSR 상태코드가 0x28되고 수신이 되지 않으면 0x30으로 된다.
ANDIAL,0b11111000
CPIAL,0x28// AL이 0x28이 아닌 경우 분기한다.
BRNEWRITE6
STSTWDR,DL; write data
LDIAL,0b10000100
STSTWCR,AL
WRITE7:LDSAL,TWCR; data complete ?
SBRSAL,TWINT
RJMPWRITE7
WRITE8:LDSAL,TWSR// 상태코드가 0x28 = 0b0010 1000이 되면 STOP 조건을 출력하고 write를 마친다.
ANDIAL,0b11111000// AL = 0b0000 0000
CPIAL,0x28
BRNEWRITE8// AL이 0x28dl 되면 분기한다.
LDIAL,0b10010100; STOP condition
STSTWCR,AL
CALLD5MS; delay 5 ms for twr time
RET
;====================================================================
;Include User Subroutine File
;====================================================================
.include "OK128SUB.INC"; include OK-128 subroutine file
추천자료
- 컴퓨터의 내부장치와 구조
- 컴퓨터를 통한 수학 학습과 수학적 오류의 진단·처방 문장제 학습에의 적용
- 컴퓨터 활용능력 요약
- 빌게이츠 기업가 사례보고서
- 병렬처리 컴퓨터
- 제 2.3.4세대 컴퓨터
- 컴퓨터의 이해 문제풀이 레포트
- 20세기에 영향을 끼친 인물 - 빌게이츠
- MS사의 독점 (마이크로 소프트)
- [레지스트리의 의미][레지스트리의 구조][레지스트리의 백업][레지스트리의 복구][레지스트리...
- 컴퓨터 공학과의 진보적 입장
- 전공 컴퓨터와 기초 - 7~80만우너 조립컴퓨터 구성, 인터넷 사기
- [Bill-Gates부터Steven-Ballmer까지]Microsoft의 성장과 Leadership의 변화
- 마이크로소프트 (MS : Microsoft) - 마이크로소프트 기업분석, 마이크로-소프트 창업, MS 운...