BASIC4MCU | 통신 | 485통신 | 1대2 통신 - 1문자 전송
페이지 정보
작성자 키트 작성일2017-08-31 17:50 조회1,840회 댓글0건본문
간단한 1대2 통신 예제를 만들어봤습니다.
//-------------------------------------------------------------------// 마스터 128// 슬레이브의 스위치를 읽어서 PORT B에 연결된 LED를 점등// PB0,PB1 - 슬레이브1 응답// PB2,PB3 - 슬레이브2 응답//-------------------------------------------------------------------#include <mega128.h>#include <delay.h>//#define Byte unsigned char#define TX_EN PORTE.2//Byte a;//void putch_USART1(char data){ TX_EN=1; UDR1=data; while(!(UCSR1A&0x40)); UCSR1A|=0x40; TX_EN=0; }void putch_USART0(char data){ while(!(UCSR0A&(1<<UDRE0))); UDR0=data; }void puts_USART0(char *str){ while(*str)putch_USART0(*str++); }//interrupt [USART1_RXC] void usart1_rx_isr(void){a=UDR1;if ((a&0xF0)==0x10){ PORTB=(PORTB&0xFC)|(a&3); }// PB0,PB1 - 슬레이브1 응답else if((a&0xF0)==0x20){ PORTB=(PORTB&0xF3)|((a&3)<<2); }// PB2,PB3 - 슬레이브2 응답}//void main(void){DDRB=0xff; PORTB=0xff; // 슬레이브 응답 확인용 LED 포트DDRE.2=1; // TX_EN//UCSR0B=0x08; UBRR0L=103;UCSR1B=0x98; UBRR1L=103;SREG=0x80;while(1){putch_USART1(0x10); delay_ms(2); // 슬레이브 1 호출putch_USART1(0x20); delay_ms(2); // 슬레이브 2 호출}}////-------------------------------------------------------------------//슬레이브1//-------------------------------------------------------------------// 0x10 컴맨드면 스위치 값을 마스터로 전송함#include <mega8.h>#include <delay.h>//#define Byte unsigned char#define TX_EN PORTC.0//Byte a;//void putch_USART(char i){ TX_EN=1; UDR=i; while(!(UCSRA&0x40)); UCSRA|=0x40; TX_EN=0; }//interrupt [USART_RXC] void usart_rx_isr(void){a=UDR;if(a==0x10){ putch_USART( 0x10+(PINA&3) ); } // 0x10 슬레이브 1 호출}//void main(){DDRC.0=1; // TX_ENPORTA=3; // SW input 내부 풀업저항UCSRB=0x98; UBRRL=103;SREG=0x80;while(1){}}////-------------------------------------------------------------------//슬레이브2// 0x10 컴맨드면 스위치 값을 마스터로 전송함//-------------------------------------------------------------------#include <mega8.h>#include <delay.h>//#define Byte unsigned char#define TX_EN PORTC.0//Byte a;//void putch_USART(char i){ TX_EN=1; UDR=i; while(!(UCSRA&0x40)); UCSRA|=0x40; TX_EN=0; }//interrupt [USART_RXC] void usart_rx_isr(void){a=UDR;if(a==0x20){ putch_USART( 0x20+(PINA&3) ); }}//void main(){DDRC.0=1; // TX_ENPORTA=3; // SW input 내부 풀업저항UCSRB=0x98; UBRRL=103;SREG=0x80;while(1){}}
댓글 0
조회수 1,840등록된 댓글이 없습니다.