본문 바로가기
코스웨어/16년 스마트컨트롤러

20160322_김도관_업무일지_시리얼통신2

by 알 수 없는 사용자 2016. 4. 3.
728x90
반응형

ADC - Analog to Digital


아날로그를 디지털로 변환


DAC - Digital to Analog


디지털을 아날로그로 변환




시리얼 데이터 통신


main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "main.h"
#include "lcd.h"
 
#include "usart.h"
 
int main(void)
{
    unsigned char ucData;
    LCD_Init(); //
    usart0_Init();
    sei();
    
    usart0_Str("AVR on");
      
    while(1)
    {
        ucData = usart0_Rx(); //리턴 값이 
        LCD_Data(ucData);// lcd에 출력
        
    }
    return 0;
}
cs

9번 : usart0_Init(); //usart 초기화
13번 : 시리얼 포트 연결시 표시될 문자열 AVR on
17번 : 수신된 데이터를 ucData에 넣은뒤
18번 : LCD에 뿌려줌

usart.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "usart.h"
 
void usart0_Init(void// 초기화  
{
    UBRR0H = (unsigned long)(( OSC / (16.0 * BAUD))-0.5)>>8// (fosc/16*baud) -1 //115200 bps 
    UBRR0L = (unsigned long)(( OSC / (16.0 * BAUD))-0.5); // 오차가 나므로 -1 + 0.5
    //UCSR0A =  (0 << RXC)   |(0 << TXC )  |(0 << UDRE )|(0 << FE ) |(0 << DOR )|(0 << UPE)  |(0 << U2X)  |(0 << MPCM);
    UCSR0A =  (0 << U2X)  |(0 << MPCM);
    //UCSR0B =  (0 << RXCIE) |(0 << TXCIE) |(0 << UDRIE)|(1 << RXEN)|(1 << TXEN)|(1 << UCSZ2)|(0 << RXB8 )|(0 << TXB8);
    UCSR0B =  (1 << RXEN)|(1 << TXEN)|(0 << UCSZ2);
    //UCSR0C =  (0 << UMSEL1)|(0 << UMSEL0)|(1 << UPM1) |(1 << UPM0)|(1 << USBS)|(1 << UCSZ1)|(1 << UCSZ0)|(0 << UCPOL);
      UCSR0C=(0<<UMSEL1)|(0<<UMSEL0)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(0<<UCPOL);
    
    return;
}
 
unsigned char usart0_Rx(void//  수신을 기다리는 함수
{
    while0 == ((1 << RXC)&UCSR0A)); // data 가 수신될때까지 기다림
    
    return UDR0; //
}
 
void usart0_Tx(unsigned char ucData) // usart 0번에 전송
{
    while0 == ((1 << UDRE)&UCSR0A)); // data 기다림
    UDR0 = ucData; //
    return;
}
 
void usart0_Str(char const *cString) //usart0의 문자열 전송함수
{
 
    while(0 != *cString)
        {
            usart0_Tx(*cString);
            ++cString;
        }
}
void usart1_Init(void)
{
      UBRR1H = (unsigned long)((OSC/(16.0*BAUD))-0.5)>>8;
     UBRR1L= ((OSC/(16.0*BAUD))-0.5);
  
      //UCSR1A = (0≪RXC)|(0≪ TXC)|(0≪ UDRE)|(0≪ FE)|(0≪ DOR) |(0≪UPE)|(0≪ U2X)|(0≪ MPCM);
      UCSR1B = (0<<RXCIE)|(0<< TXCIE)|(0<< UDRIE)|(1<< RXEN)|(1<< TXEN) |(0<<UCSZ2)|(0<< RXB8)|(0<< TXB8);
      UCSR1C=(0<<UMSEL1)|(0<<UMSEL0)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(0<<UCPOL);
  
}
unsigned char usart1_Rx(void//1번 수신
{
      while(((1<<RXC) & UCSR1A)==0);
  
      return UDR1;
    
}
void usart1_Tx(unsigned char ucData)// usart 1번에 전송
{
      while(((1<<UDRE) & UCSR1A)==0);
  
      UDR1=ucData;
    
}
void usart1_Str(const char *cString)//문자열 전송함수
{
 
    while(0 != (*cString))//!=같지 않음
    {
        usart1_Tx(*cString);
        ++cString;
    }
}
 
 
cs






728x90