일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSSQL PYTHON
- 딥러닝
- 파이썬
- Serial
- 장고
- rs485
- windows10
- 티스토리 초대장
- 텐서플로우
- 윈도우10
- 크롤링
- rs422
- MX Component
- Python
- PYTHON MSSQL
- M2M
- 오라클
- Visual Studio Code
- MSSQL
- c#
- pymssql
- vscode
- 자본주의
- django
- matplot
- sql developer
- scrapy
- tensorflow
- MEAN Stack
- oracle
- Today
- Total
안까먹을라고 쓰는 블로그
128 인터럽트 uart통신소스 본문
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
unsigned char data ; // 레지스터로 선언해도 되나.. 머 상황에 따라서.
static word wRead_Count = 0 ; // 외부와 분리되는 정적 변수로 선언하면 복사_붙여넣기 프로그램 편합니다.
static BOOL bProtocol_Start = 0 ;
data = UDR0 ; // UDR0 직접 읽으시면 안되요.
if ( data == STX ) // 시작이 오면
{
bProtocol_Start = 1 ;
wRead_Count = 0 ;
comm.wReadCount = 0 ;
}
if ( bProtocol_Start )
{
comm.cComReadData [ wRead_Count ] = data ;
wRead_Count ++ ;
if ( comm.cComReadData [ wRead_Count - 1 ] == ETX ) // 종료라면 무조건 리턴 , 에러인지 아닌지는 메인에서
{
comm.bRead_Success = 1 ; // 메인에서 처리 요청
comm.wReadCount = wRead_Count ; // 데이터 받은 개수를 저장
bProtocol_Start = 0 ;
wRead_Count = 0 ;
}
}
}
//////////////////////////////////////////////////////
// <O> : ON
// <F> : OFF
// 응답 : [O] , [F]
// 에러 응답 : [o] , [f]
// 기본 에러 응답 : [e]
//////////////////////////////////////////////////////
void comm_Protocol ( void ) // BOOL 형으로 하고 리턴해도 되나 복잡해 지면 머리만 아픔
{
switch ( comm.cComReadData [ 1 ] )
{
case 'O' :
if ( comm.cComReadData [ 2 ] != ETX ) // STX : < , ETX : >
{
comm_Printf ( "[o]" ) ;
break ;
}
// ON 명령 수행
comm_Printf ( "[O]" ) ;
break ;
case 'F' :
if ( comm.cComReadData [ 2 ] != ETX ) // STX : < , ETX : >
{
comm_Printf ( "[f]" ) ; // 실패는 소문자로 (그냥 편함)
break ;
}
// OFF 명령 수행
comm_Printf ( "[F]" ) ; // 성공은 대문자로 <> 로 받았으니 구분되게 [ ] 로 리턴, 통신 프로그램에서 보기 쉬움
break ;
default :
comm_Printf ( "[e]" ) ; // 데이터를 받았다면 어떠한 상황이던 응답을 주어야 버그 찾기 쉬움
break ;
}
}
void main ( void )
{
while ( true )
{
if ( comm.bRead_Success ) // 통신 완료
{
comm.bRead_Success = 0 ;
#asm("cli")
comm_Protocol () ;
#asm("sei")
}
//delay_ms ( 100 ) ; // 사람의 생각의 속도와 맞추고 싶을때 사용함 , 마이컴 겁나 빨라요.
}
}
'Embedded > Atmega128' 카테고리의 다른 글
c언어에서 printf 함수를 사용한 서식지정 출력 (0) | 2012.09.01 |
---|---|
LED 출력 (0) | 2012.09.01 |
KEY 입력 기술 (0) | 2012.09.01 |
Text-Lcd 모듈 프로그래밍 (0) | 2012.09.01 |
AVR Atmega128 정복[책 소개 및 관련자료] (0) | 2012.09.01 |