USART 통신, ATmega128, AVR - 0315
USART 통신, ATmega128, AVR
[ 간략 설명 ]
◈ USART 통신, ATmega128, AVR
◈
USART 통신
내용 넣기~~~~
◆◆ ATmega128 : USART 통신, MCU - PC 문자 송수신 P.437 ◆◆
/*
USART 통신 P.437
key 입력된 문자를 MCU로 전송
MCU는 수신받은 문자의 다음 문자를
PC로 전송
0315A_USART_MCUPC_p437.c
*/
#include <mega128.h>
void Putch(char); // 1바이트 송신
char Getch(void); // 1바이트 수신
void main(void)
{
// USART 초기화
UCSR0A = 0x00;
UCSR0B = 0b00011000; // 송수신 인에이블 TXEN = 1, RXEN = 1
UCSR0C = 0b10000110; // 비동기식 데이터 8비트 모드
UBRR0H = 0; // X-TAL = 16Mhz, BAUD = 9600
UBRR0L = 103;
while(1){
Putch(Getch() + 1 ); // 수신 받은 문자의 다음 문자 전송
}//endwhile
}//end main
// 한 바이트 송신
void Putch(char data){
while( !( UCSR0A & 0x20 ) ); // UDRE0 = 1 ?
UDR0 = data; // USART0 I/O 레지스터에 데이터 전송
}//endPutch
// 한 바이트 수신
char Getch(void){
while( !( UCSR0A & 0x80 ) ); // RXC = 1 ?
return UDR0; // USART I/O 레지스터 리턴
}//endGetch
터미널 창
◆◆ ATmega128 : USART 통신, RX수신 'a','s' 키입력 LED on/off P.441 ◆◆
/*
USART 통신 P.441
PORTC = LED를 터미널에서 키보드 "a" , "s"
두 키입력을 RX수신을 받아 LED on/off 프로그램
0315B_USART_PORTC_p441.c
*/
#include <mega128.h>
#include <delay.h>
char Usart0_RX(void); //RX 수 신완료 함수
void main(void)
{
DDRC = 0xff;
UCSR0A = 0x00; // 초기 설정
UCSR0B = 0x18; // RX 수신 완료 함수
UCSR0C = 0x06; // 전송 문자의 데이터 비트수 8비트
UBRR0H = 0x00; // 9600으로 설정
UBRR0L = 103; // 보레이트 9600값, 16진수=0x67
while(1){
if( Usart0_RX() == 'a'){
PORTC = 0x00; // LED on
}//endifa
if( Usart0_RX() == 's'){
PORTC = 0xff; // LED off
}//endifs
}//endwhile
}//end main
char Usart0_RX(void){
while( ! ( UCSR0A & 0x80) ); // '0', '1' 체크
return UDR0;
}//endUsart0_RX
터미널 입력창
◆◆ ATmega128 : USART 통신, RX수신, 키입력 motor 회전 P.442 ◆◆
/*
USART 통신 P.442
PortB - LED
하이퍼터미널에서 키보드 "a", "s","d" 키 입력
> RX수신 - 스테핑 모터 - 정회전, 역회전
( ex. 커튼 열기 닫기, 문 여닫기 등 컴퓨터 제어)
0315C_USART_motor_p442.c
*/
#include <mega128.h>
#include <delay.h>
char Usart0_RX(void); // RX 수신 완료 함수
unsigned char CW2[4] = { 0x09, 0x05, 0x06, 0x0a}; // 정방향 출력 데이터
unsigned char CCW2[4] = { 0x0a, 0x06, 0x05, 0x09 }; // 역방향 출력 데이터
unsigned char CZO2[4] = { 0x00, 0x00, 0x00, 0x00 }; // 멈춤
char Mot_mod;
unsigned char *CW_CCW2;
unsigned char m, n, i;
void main(void)
{
DDRB = 0xff; // PORTB 8핀을 모두 출력으로 사용 설정
UCSR0A = 0x00;
UCSR0B = 0x18; // RX, TX enable
UCSR0C = 0x06; // 전송 문자의 데이터 비트수 8비트
UBRR0H = 0x00;
UBRR0L = 103; // 9600, 0x67
DDRA = 0xff;
DDRC = 0xff;
PORTC = 0xff;
Mot_mod = 0;
EICRB = 0b00000010;
EIMSK = 0b00010000;
SREG = 0x80;
while(1){
// 시계 방향 회전
if( Usart0_RX() == 'a' ){ // 수신된 값이 ASKII 값과 같으면 참
for( m = 0; m < 5 ; m++){
CW_CCW2 = CCW2;
for( n = 0 ; n < 12 ; n++){
for( i = 0 ; i < 5 ; i++){
PORTA = *(CW_CCW2 + i );
delay_ms(30);
}//endfori
}//endforn
PORTC = PORTC * 0xff;
delay_ms(50);
}//endform
delay_ms(50);
}//endifz
// 반시계 방향 회전
if( Usart0_RX() == 's' ){ // 수신된 값이 ASKII 값과 같으면 참
for( m = 0 ; m < 5 ; m++){
CW_CCW2 = CW2;
for( n = 0 ; n < 12 ; n++){
for( i = 0 ; i < 5 ; i++){
PORTA = *(CW_CCW2 + i );
delay_ms(30);
}//endfori
}//endforn
PORTC = PORTC * 0xff;
delay_ms(100);
}//endform
delay_ms(5000);
}//endifx
// 멈춤
if( Usart0_RX() == 'd' ){ // 수신된 값이 ASKII 값과 같으면 참
for( m = 0 ; m < 5 ; m++){
CW_CCW2 = CZO2;
for( n = 0 ; n < 12 ; n++){
for( i = 0 ; i < 5 ; i++){
PORTA = *(CW_CCW2 + i );
delay_ms(30);
}//endfori
}//endforn
PORTC = PORTC * 0xff;
delay_ms(100);
}//endform
delay_ms(1000);
}//endifx
}//endwhile
}//end main
char Usart0_RX(void){
while( ! ( UCSR0A & 0x80 ) );
// 비트 7 - 수신완료
// ( 수신버퍼에 읽혀지지 않은 수신문자가 있으면 '1'
// 비어있으면 '0'으로 클리어 되는 상태를 나타내는 플래그
// UCSR0A의 7번 비트
return UDR0; // 수신한 UDR0 값을 리턴해준다.
}//endUsart0_RX
터미널 입력창
'Edu > 유비쿼터스설비제어과정' 카테고리의 다른 글
호_ 학원 양식, 취업증명서, 면접확인서 .hwp (0) | 2011.03.23 |
---|---|
호_ 학원 장비 사진 (0) | 2011.03.23 |
USART통신, 온도측정, 실시간 모니터링, ATmega128, AVR - 0317 (0) | 2011.03.17 |
★ USART 통신 코드 분석 - ATmega128 (3) | 2011.03.16 |
USART 통신, FND , ATmega128 , AVR - 0316 (0) | 2011.03.16 |
USART, RS-232C, 통신, ATmega128, AVR - 0314 (1) | 2011.03.14 |
LCD 한글 문자 출력, ATmega128, AVR - 0314 (0) | 2011.03.14 |
★ LCD 제어, CG ROM, Switch 문자 출력, ATmega128, AVR - 0311 (0) | 2011.03.11 |
LCD 문자열 출력, ATmega128, AVR - 0310 (0) | 2011.03.10 |
Timer Couter, TC1, TIM1_COMPC, ATmega128, AVR - 0309 (0) | 2011.03.09 |