회원가입 ID/PW 찾기
AA

안녕하세요

컴퓨터 keyboard를 통해 led제어 를 usart통신으로하려합니다

그런데 하이퍼터미널까지는 했는데요

제어가 되지않습니다

그냥 불만 들어옵니다..

어떤 포트에는 불이 들어오지 않지만 어떤 포트에는 불이 들어옵니다

무엇이 잘못된건지몰라서 질문 올립니다

혹시 소스보시고 아시는분은 빨리 답변좀 해주세요ㅠ

 

 

 

 

 

#include <avr/io.h>
#include <avr/interrupt.h>
#include "d:/WinAVR-20100110/avr/include/avr/iom128.h"
#include <stdio.h>

void tx0Char(char message);
void tx1Char(char message);


//int putchar(char c);
//int getchar(void);
void port_init(void);
void uart0_init(void);
void uart1_init(void);
void init_devices(void);
void delay(int n);
static int Putchar(char c, FILE *stream);

static int Putchar(char c, FILE *stream)
{
 tx0Char(c);
    tx1Char(c);
 return 0;
     
}

/*
// printf 함수에서 사용할 putchar 에 UART0와 UART1으로
// 데이터를 보내도록 하였다.
int putchar(char c)
{
    tx0Char(c);
    tx1Char(c);
 return c;
}*/

// UART0 을 이용한 출력
void tx0Char(char message)
{
 while (((UCSR0A>>UDRE0)&0x01) == 0) ;  // UDRE, data register empty       
    UDR0 = message;
}

// UART1 을 이용한 출력
void tx1Char(char message)
{
 while (((UCSR1A>>UDRE1)&0x01) == 0) ;  // UDRE, data register empty       
    UDR1 = message;
}

void USART_Transmit(unsigned char data)
{
 /*wait for empty transmit buffer*/
 while(!(UCSR0A & (1<<UDRE)));

 /*put data into buffer, sends the data*/

 UDR0 = data;

}

unsigned char USART_Receive(void)
{
int toggle=1;

 char temp;
 int shift = 0;
 /*wait for data to be received*/

 while(!(UCSR0A & (1<<RXC)));

 /*Get and return received data from buffer*/
 temp = UDR0 & 0xff;

 return temp; 

}


void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x83;//83
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x02;
 DDRE  = 0x00;
 PORTF = 0x00;
 DDRF  = 0xff;//ff
 PORTG = 0x00;
 DDRG  = 0x03;//03
}


//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0x67; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x18;
}

//UART1 initialize
// desired baud rate:9600
// actual baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart1_init(void)
{
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x00;
 UCSR1C = 0x06;
// UBRR1L = 0x2F; //set baud rate lo 7.3728 MHz
// UBRR1L = 0x47; //set baud rate lo 11.0592 Mhz
 UBRR1L = 0x67; //set baud rate lo 16Mhz
 UBRR1H = 0x00; //set baud rate hi
 UCSR1B = 0x18;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 cli(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 uart0_init();              // UART 0 초기화
 uart1_init();              // UART 1 초기화
 fdevopen(Putchar,0);  

 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 sei(); //re-enable interrupts
 //all peripherals are now initialized
}


// 시간 지연 함수
void delay(int n)
{
 volatile int i,j;

 for(i=1;i<n;i++)
 {
     for(j=1;j<600;j++);
 }
}


int main (void)
{

 init_devices();

 volatile unsigned char receive = 0;
 
 //insert your functional code here...
 printf("\n\r\ntesting...\n\r");
 printf("printf 테스트 프로그램...\n\r");


  printf("1. LED_ON / OFF 제어(q,w)\n");
  printf("2. 커텐온오프(a,s)\n");
  printf("3. 보안 온오프(z,x)\n");
  printf(" : ");
 

 do
 {
  receive = USART_Receive();
  
  switch (receive)
  {
   case 'q' :
   
    PORTD = 0xff;
   
   break;

   case 'w' :    /*js :빠져서추가*/ 
    
    PORTD = 0x00;   

   break;


   case 'a' :
   
    PORTA =  PORTA  | 0x01;   // 0000 0001
   
    delay(100);
    
    PORTA = PORTA & 0xfe;
   break;

   case 's' :
    PORTA = PORTA | 0x02;    // 0000 0010

    delay(100);

    PORTA = PORTA & 0xfd;   // 1111 1101
   break;

   case 'z' :
   //  PORTA_temp = PORTA_temp | 0x04;        //   0000 0100
   PORTA = PORTA | 0x04;
   break;

   case 'x' :

   PORTA = PORTA & 0xfc;   // 1111 1011

   break;

   default : break;


  }

     }while(1);

 


 

 

 

 return 0;
}

댓글 1
  • No Profile

    이소스를 한가히 분석하고 답을 드리긴 쉽지않겠죠.. 기본적으로 PC에서 보내는 직렬신호는 들어오는지..문자는 수신이 됬는지는 확인하셨나요?

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
2287 자유주제 HOT블루투스 모듈에 관해서1 데이비스깽 17152 2011.06.18
2286 자유주제 HOT우리 아들입니다^^잘생겼는지 평가해주세요.^^(원빈,닉쿤)15 수내아트원 18146 2011.05.27
2285 자유주제 HOT단종 IC 구매에 대하여 . . .3 무적쫑 10599 2011.05.24
2284 자유주제 HOT[S.O. S.1] Launch1 Crew 1차 모집합니다.2 코닉스트리페스그룹 9363 2011.05.09
2283 자유주제 HOTRC카 제작문의... ya-han 25264 2011.04.24
2282 자유주제 HOT버그인지 확인 부탁드려요. 아크마님...3 artwork 19066 2011.04.23
2281 자유주제 HOT하드웨어 개발자가 되고싶은데...어떻게 시작 할지를 모르겠네요..7 이지스윈 22884 2011.04.21
2280 자유주제 HOT큰일났네요...3 혈청 29239 2011.04.18
2279 자유주제 HOT인생선배님들읽어주세요6 요르박 17934 2011.04.12
2278 자유주제 HOT안녕하세요~ 질문좀 해결해 주시겟어요??1 쌩초보TT 16865 2011.04.10
2277 자유주제 HOT지식 공유의 정신과 회원등급에 대하여...53 아크마 235426 2011.04.10
2276 자유주제 HOT납을 언제 다 모으죠? ㅎㅎ2 니꼬르 18279 2011.04.07
2275 자유주제 HOT의료용 LED 치료기2 빛나는 영혼 12547 2011.04.05
2274 자유주제 HOT창의력 돋는 광고들5 mapiyam 3141 2011.04.05
2273 자유주제 HOT효과음 종결자!6 mapiyam 3638 2011.04.05
2272 자유주제 HOT대문자와 소문자의 차이9 mapiyam 3294 2011.04.05
2271 자유주제 HOT위장의 고수 ~15 mapiyam 3242 2011.04.05
2270 자유주제 HOT안녕하세요1 hilooo 18193 2011.04.04
2269 자유주제 HOT밑에 짤렸다는 사람입니다.3 혈청 17191 2011.04.03
2268 자유주제 HOTH/W시 초창기 접하는 BOM 에 대해서..2 용장군 19395 2011.03.29
Prev 1 ... 16 17 18 19 20 21 22 23 24 25 ... 135 Next
  • 로마에서는 로마인들이 하는대로 하라.
    - 앰브로스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.