통신 > TWI - 단방향 통신 (구구단) - 수신 인터럽트

TODAY4,886 TOTAL7,121,092
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 통신 | I2C-IIC,TWI | TWI - 단방향 통신 (구구단) - 수신 인터럽트

페이지 정보

작성자 키트 작성일2017-09-01 10:54 조회2,669회 댓글0건

본문

마스터 송신부는 앞장의 예제를 사용합니다. 

 

 

//----------------------------------------------------------------------

// TWI 슬레이브 수신

//----------------------------------------------------------------------

#include <mega128.h>
#include <delay.h>
#include <stdio.h>
//
#define  WP_hi  PORTD.2=1
#define  WP_lo  PORTD.2=0
//
#define TWINT 0x80
#define TWEA  0x40
#define TWSTA 0x20
#define TWSTO 0x10
#define TWWC  0x08
#define TWEN  0x04
#define TWIE  0x01
//
// TW_MT_xxx - master transmitter 
// TW_MR_xxx - master receiver 
// TW_ST_xxx - slave transmitter 
// TW_SR_xxx - slave receiver 
//
#define  TW_START                 0x08 
#define  TW_REP_START             0x10 
#define  TW_MT_SLA_ACK            0x18 
#define  TW_MT_SLA_NACK           0x20 
#define  TW_MT_DATA_ACK           0x28 
#define  TW_MT_DATA_NACK          0x30 
#define  TW_MT_ARB_LOST           0x38 
#define  TW_MR_ARB_LOST           0x38 
#define  TW_MR_SLA_ACK            0x40 
#define  TW_MR_SLA_NACK           0x48 
#define  TW_MR_DATA_ACK           0x50 
#define  TW_MR_DATA_NACK          0x58 
#define  TW_ST_SLA_ACK            0xA8 
#define  TW_ST_ARB_LOST_SLA_ACK   0xB0 
#define  TW_ST_DATA_ACK           0xB8 
#define  TW_ST_DATA_NACK          0xC0 
#define  TW_ST_LAST_DATA          0xC8 
#define  TW_SR_SLA_ACK            0x60 
#define  TW_SR_ARB_LOST_SLA_ACK   0x68 
#define  TW_SR_GCALL_ACK          0x70 
#define  TW_SR_ARB_LOST_GCALL_ACK 0x78 
#define  TW_SR_DATA_ACK           0x80 
#define  TW_SR_DATA_NACK          0x88 
#define  TW_SR_GCALL_DATA_ACK     0x90 
#define  TW_SR_GCALL_DATA_NACK    0x98 
#define  TW_SR_STOP               0xA0 
#define  TW_NO_INFO               0xF8 
#define  TW_BUS_ERROR             0x00 
//
interrupt [TWI] void TWI_isr(void){
    unsigned char status;
    status=TWSR&0xF8;
    switch(status){
        // Slave Receiver status codes
        case TW_SR_SLA_ACK:                 // 0x60: own SLA+W has been received, ACK has been returned
        case TW_SR_ARB_LOST_SLA_ACK:        // 0x68: own SLA+W has  been eceived, ACK has been returned
        case TW_SR_GCALL_ACK:               // 0x70:     GCA+W has been received, ACK has been returned
        case TW_SR_ARB_LOST_GCALL_ACK:      // 0x78:     GCA+W has been received, ACK has been returned
            // we are  being addressed as  slave for writing  (data will be  received from master)
            TWCR|=TWINT;
            break;
        case TW_SR_DATA_ACK:                // 0x80: data byte has been  received, ACK has been returned
        case TW_SR_GCALL_DATA_ACK:          // 0x90: data byte has been received, ACK has been returned
            UDR0=TWDR;
            TWCR|=TWINT;
            break;
        case TW_SR_DATA_NACK:               // 0x88: data byte has been received, NACK has been returned
        case TW_SR_GCALL_DATA_NACK:         // 0x98: data byte has been received, NACK has been returned
            TWCR|=TWINT;
            break;
        case TW_SR_STOP:      // 0xA0: STOP or REPEATED START has been received while addressed as slave
            // switch to SR mode with SLA ACK
            TWCR|=TWINT;
            break;
    }
}
//
void main(void){
    UCSR0B=8; UBRR0L=8; // 115200 @16MHz 송신
    TWSR=0; TWAR=0x56; TWCR=TWEA|TWEN|TWIE;
    SREG=0x80; 
    while(1){}
}

 

웹검색해서 찾은 소스를 조금 수정해서 만들었습니다.

댓글 0

조회수 2,669

등록된 댓글이 없습니다.

통신HOME > 통신 > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기