BASIC4MCU | 질문게시판 | 답변 : ATMEGA128 TWI통신관련 질문
페이지 정보
작성자 master 작성일2019-04-14 00:19 조회5,573회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8224
작성일
본문
if((PIND&0b00000000)==0b00000000){
어떤수와 0을 AND하면 결과는 항상 0 입니다.
if((PIND&1)==0){
PD0를 체크하기 위한 코드라면 이렇게 변경해야겠죠
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-04-14 오전 12:24:41// by Ok-Hyun Park//#define F_CPU 16000000UL // CPU 클록 값=16 Mhz#define F_SCK 40000UL // SCK 클록 값=40 Khz#include <avr/io.h>#include <util/delay.h>//int main(){DDRA=0xff;DDRB=0xff;DDRC=0xff;PORTD=0x03; // For Internal pull-up for SCL&SDATWBR=(F_CPU/F_SCK-16)/2; // 공식 참조,bit trans rate 설정TWSR=TWSR&0xfc; // Prescaler 값=00(1배)TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // START 전송_delay_ms(500);TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN); // STOP 전송while(1){if(PIND&1){if(TWCR&0x80)PORTC=0xff;PORTA=0xff; _delay_ms(1000);PORTA=0x00; _delay_ms(1000);}if((PIND&1)==0){if(TWCR&0x80)PORTC=0;PORTB=0xff; _delay_ms(1000);PORTB=0x00; _delay_ms(1000);}}}
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // START 전송_delay_ms(500);TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN); // STOP 전송START 와 STOP 사이에는 데이터를 출력하지 않나요?
댓글 2
조회수 5,573wiopf1님의 댓글
wiopf1 작성일
예 거기서 스타트조건 한 번 출력하고
stop 전송하는 문장을 실행하지 않으면
twint가 1이되어 클락이 발생하지 않습니다.
================================
선생님이 짜준 소스도 제 것과 똑같이 동작합니다.
그런데 pd0를 led에 연결하면 그 led가 불이 안들어오는 부분이 이해가 안갑니다.
내부풀업저항과 연결되어 있는 점과 관련이 있는 것 같지만.. 정확하게 이해하고 싶습니다
master님의 댓글
master
TWDR 데이터를 출력하면 클럭은 자동으로 발생할텐데요?
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo12&wr_id=245