atmega128로 uart포트를 사용하여 통신할려구 합니다.
워낙 초보라서 프로그램 짜는 것 부터 쉽지않네요;;
제가 구현하고자 하는 프로그램은 대충 이런 것입니다.
LED신호가 adc에 의해 불이 들어오면 uart포트를 통해 컴퓨터 창에 1이라는 신호가 들어오게끔 만드는 것이고 그반대의
경우는 0이 뜨게끔 만드는 것입니다.
학교 조교가 adc register값을 uart register에 실어서 보내면 된다고 하셨는데 감이 안오네요;;;
프로그래밍을 해야 하는데 제발 부탁드립니다...도와주세요
워낙 초보라서 프로그램 짜는 것 부터 쉽지않네요;;
제가 구현하고자 하는 프로그램은 대충 이런 것입니다.
LED신호가 adc에 의해 불이 들어오면 uart포트를 통해 컴퓨터 창에 1이라는 신호가 들어오게끔 만드는 것이고 그반대의
경우는 0이 뜨게끔 만드는 것입니다.
학교 조교가 adc register값을 uart register에 실어서 보내면 된다고 하셨는데 감이 안오네요;;;
프로그래밍을 해야 하는데 제발 부탁드립니다...도와주세요
void uart1_init(unsigned long baud_data)
{
unsigned long UBRR_DATA;
// 송수신 속도 설정
UBRR_DATA = ((FOSC/baud_data)/8)-1; UBRR1L = (unsigned char)(UBRR_DATA & 0xFF);
UBRR1H = (unsigned char)(UBRR_DATA >> 8);
// Enable receiver and transmitter
SETBIT(UCSR1A, U2X1); // double speed
SETBIT(UCSR1B, RXCIE1); // RXC interrupt enable
SETBIT(UCSR1B, RXEN1); // RX enable
SETBIT(UCSR1B, TXEN1); // TX enable // Data bit 8
SETBIT(UCSR1C, UCSZ10);
SETBIT(UCSR1C, UCSZ11); return;
} // usart 1 rx interrupt
#pragma vector = USART1_RXC_vect
__interrupt void USART1_RXC_func(void)
{
// data 받는곳
ucRx1_Buff[ucRx1_Count++] = UDR1;
return;
} 보낼땐 이렇게
UDR1 = '1';
제가 쓰는 함수에서 간단하게 정리해왔습니다.
제 UART전체 소스를 드리면 아마 더 헤메실거 같아서.. 간단하게 필요한 내용만 정리 해봤습니다.
정확한것은 Data sheet UART부분 보시면 기본 소스가 있습니다. 그것만으로도 하시고자하는걸 충분히 하실수 있다고생각합니다.
현재 이소스는 UART 0가 아닌 UART1 을 기준으로 되어있으며, 레지스터를 바꿔 설정하시면 uart 0도 가능합니다.
main 에서 uart1_init(9600); 이렇게 넣어주시면, 9600bps 로 설정이 됩니다.
추리다 보니 오류 및 동작이 안될수 있으니 참고만하시고, 책과 Datasheet 보시고 프로그램 하시면 그닥 어렵지는 않을것이라 생각 됩니다.
#define FOSC 16000000 으로 고치시면 됩니다.
{
//시리얼포트로 데이터 송신이 완료되고 송신버퍼가 준비되었는지 검사
while((UCSR0A&0x20) == 0x00);
UDR0 = tx_data; //시리얼 포트를 통하여 데이터 전송
}
하나 놓으시고 쓰실때는 tx_char('1'); 하면 pc로 아스키코드 1이 갑니다.