*성*
Bronze개인인증
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 61
검색어 입력폼
  • 실험4) 외부 메모리 인터페이스 실습 14, 15
    실험(4) 예비 보고서●10장 외부 메모리 인터페이스소속 : 홍익대학교 전자전기공학부수업 : 금요일 교시 조학번 : B 이름 : 김담당교수님 : 유 교수님담당조교님 : 박 조교님제출일자 : 2015년 월 일 요일▣실습14 : TEXT LCD에 글자쓰기1) 실습개요- ATMega128의 GPIO에 TEXT LCD를 연결하고, LCD 화면에 미리 작성된 문장("Hello! MCU World !!")을 표시- AVR 개발 환경에서 제공하는 TEXT-LCD 관련 함수를 이해하면 쉽게 프로그램을 작성할 수 있음.2) 실습 목표- TEXT LCD의 동작 원리 이해- AVR 개발환경에서 제공하는 TEXT-LCD 관련 함수 이해- TEXT LCD 제어 프로그램 방법 습득3) 사용 모듈 : MCU 모듈, TEXT-LCD 모듈TEXT LCD 모듈 회로4) 사전지식- AVR 개발 환경에서 TEXT LCD 관련 라이브러리 함수를 제공lcd.c 와 avr_lib.c 라는 파일에 포함AVR Studio에서 이미지를 Build할 때 이 lcd.c파일과 avr_lib.c 파일을 함께 포함시켜야 함.- TEXT LCD용 라이브러리 함수lcdInit : TEXT LCD 초기화lcdGotoXY(unsigned char x, unsigned char y): TEXT LCD의 커서를 원하는 위치로 이동.lcdDataWrite( unsigned char data ): TEXT LCD에 하나의 문자 출력lcdPrintData(char* data, unsigned char nBytes) : TEXT LCD에 nBytes 길이의 문자열을 출력lcdClear() : TEXT LCD의 화면을 지움.4) 소스코드 분석소스코드소스코드 해석#include#include"lcd.h“int main(){lcdInit();lcdGotoXY(0,0);lcdDataWrite('H');lcdDataWrite('e');lcdDataWrite('l');lcdDataWrite('l');lcdDataWrite('o');lcdGotoXY(3,1);lcdPrintData("MCU World !!",12);return 0;}AVR 입출력에 대한 헤더 파일과 인터럽트를 사용하기 위한 헤더파일과 그 외 헤더파일을 선언한다.‘H' 출력‘e' 출력‘l' 출력‘l’출력‘0’출력현재 커서위치를 (3,1) 위치로 이동▣실습15 : 외부메모리 I/F에 SRAM 붙이기1) 실습개요- ATmega128의 외부 메모리 인터페이스를 이용하여 SRAM을 제어하는 방법을 실습- 외부 메모리 인터페이스에 SRAM과 TEXT LCD를 연결- UART포트를 이용하여 PC와 통신 연결- PC에서 입력하는 문자열을 SRAM에 한문자씩 차례로 저장하였다가, 한번에 꺼내서 TEXT LCD에 출력2) 실습 목표- ATmega128 외부 메모리 인터페이스 동작 원리 이해 (레지스터 설정)- SRAM 동작 원리 이해- SRAM의 제어 방법 습득3) 사용 모듈 : MCU 모듈, 메모리 모듈, TEXT-LCD 모듈, UART 모듈메모리 모듈의 SRAM부 회로4) 사전지식①외부 메모리를 사용을 위한 제어 레지스터 설정ⅰ외부 메모리 Enable→ MCUCR 레지스터의 SRE 비트를 ‘1’로 세팅ⅱ메모리의 영역 분할 및 대기 사이클을 설정→ XMCRA의 SRL(2:0) 비트를 설정하여 메모리의 섹터를 나눌 것인지, 아닌지를 결정→ 상위(Upper)와 하위(Lower) 메모리 섹터들에 대한 대기 사이클(Wait-State)를 설정→ 여기서는 메모리 영역을 0x1100~0x7FFF까지의 하위 섹터와 0x8000~0xFFF F까지의 상위 섹터로 나누어 사용→ 각 메모리 섹터의 대기 사이클은 0ⅲ메모리를 위해 어느 정도의 핀을 할당할 것인지를 결정→ XMCRB 레지스터의 XMBK 비트를 세팅하여 BUS-Keeper를 사용할 것인지 아닌지를 결정→ 여기서는 BUS-Keeper는 사용하지 않고, 메모리는 60KByte 전체 영역을 사용→ 따라서, C 포트의 모든 핀들은 외부 메모리(SRAM)에 할당→외부 메모리의 주소영역 : 0x1100~0XFFFF②외부 메모리(여기서는 SRAM)을 액세스하는 방법ⅰ포인터 변수를 이용하여 접근ⅱ외부 메모리의 주소영역이 0x1100~0XFFFFⅲ메모리 읽기→ A = *(volatile unsigned char *)0x1100;ⅳ메모리 쓰기→ *(volatile unsigned char *)0x1100 = 0xAA;ⅴvolatile : 컴파일러가 최적화 과정에 해당 메모리의 영역을 제거해 버리는 것을 막기 위해 사용4) 소스코드 분석소스코드소스코드 해석#ifdef LCD_PORT_INTERFACE#ifndef LCD_CTRL_PORT#define LCD_CTRL_PORT PORTB#define LCD_CTRL_DDR DDRB#define LCD_CTRL_RS 0#define LCD_CTRL_RW 1#define LCD_CTRL_E 2#endif#ifndef LCD_DATA_POUT#define LCD_DATA_POUT PORTD#define LCD_DATA_PIN PIND#define LCD_DATA_DDR DDRD#endif#endif#include#include#include"lcd.h“#define read_XRAM(address) (*(volatile unsigned char *)(0x1100+address))#define write_XRAM(address,value) ((*(volatile unsigned char *)(0x1100+address))=value)void putch(unsigned char data){while((UCSR0A & 0x20) == 0);UDR0 = data;UCSR0A |= 0x20;}UCSR0A 레지스터 중에서 5번째 비트(UDREn)를 세트하여 UDRE0를 클리어 함.소스코드소스코드 해석unsigned char getch(){unsigned char data;while((UCSR0A & 0x80) == 0);data = UDR0;UCSR0A |= 0x80;return data;}int main(){unsigned char i=0,j=0;unsigned char line1,line2;unsigned char Tmp=0;unsigned char text[]="nr**************************************""nr EXT-SRAM TEST Program ! ""nr TextLCD에 출력할 데이터를 입력 하세요nr"" (종료 : Enter키, 32바이트 이내)nr"" **************************************nr >> ";MCUCR |= 0x80;XMCRA |= 0x40;XMCRB = 0x00;DDRE = 0xfe;UCSR0A = 0x00;UCSR0B = 0x18;UCSR0C = 0x06;UBRR0H = 0x00;UBRR0L = 0x03;lcdInit();UCSR0A 레지스터 중에서 7번째 비트를 세트하여 RXC0를 클리어 함.외부 메모리 enablelower sector = 0x1100 - 0x7fff ,Upper sector = 0x8000 - 0xffffRx(입력 0), Tx (출력, 1)Rx, Tx enable비동기 방식, No Parity bit, 1 Stop bit7.3728 MHz -> 115200 bpsUBRRnH/L레지스터는 16비트 중에서 12비트만 사용하여 USARTn모듈의 송수신 속도를 설정TextLCD 초기화소스코드소스코드 해석while(text[j]!='')putch(text[j++]);while(1){Tmp = getch();putch(Tmp);if((Tmp == 'r') || i > 32) {break;}write_XRAM(0x0100+i,Tmp);_delay_ms(10);i++;}if(i
    공학/기술| 2015.11.12| 10페이지| 1,500원| 조회(279)
    미리보기
  • 실험4) UART & A/D컨버터 실습 11, 12, 13
    실험(4) 예비 보고서●8장 UART●9장 A/D컨버터소속 : 홍익대학교 전자전기공학부수업 : 금요일 교시 조학번 : B 이름 : 김담당교수님 : 유 교수님담당조교님 : 박 조교님제출일자 : 2015년 월 일 요일▣실습11 : UART로 Hello 보내기1) 실습개요- UART를 이용하여 미리 작성된 문장(“Hello World”)을 PC로 전송하는 실습- ATmega128의 USART 포트를 입력과 출력으로 선언하고 이 포트를 UART 모듈에 연결.- USB 케이블을 이용하여 PC와 연결.2) 실습 목표- UART 기능 동작원리 이해- ATMega128의 USART 제어 방법의 습득(관련 레지스터 이해)- UART를 통해 PC와 통신하는 방법 습득3) 사전지식- 미리 정해 주어야 하는 통신 규약을 결정Baud Rate115200패리티No ParityStop Bit1전송문자 데이터 비트수8흐름제어없음- UART 제어 레지스터 세팅비동기 전송 모드멀티 프로세서 통신 모드UART의 RX와 TX를 Enable- UCSR0A 레지스터의 플래그 를 보면서 데이터를 보낼 수 있는 상태를 기다렸다가 UDR0 레지스 터에 데이터를 넣어주면 UART로 데이터가 출력됨.4) 소스코드 분석소스코드소스코드 해석#includevoid putch(unsigned char data){while((UCSR0A & 0x20) == 0);UDR0 = data;UCSR0A |= 0x20;}int main(){unsigned char text[]="Hello! Wolrd!! rn";unsigned char i=0;DDRE = 0xfe;UCSR0A = 0x00;UCSR0B = 0x18;UCSR0C = 0x06;UBRR0H = 0x00;UBRR0L = 0x03;while(text[i] != '')putch(text[i++]);return 0;}AVR 입출력에 대한 헤더 파일과 인터럽트를 사용하기 위한 헤더파일과 그 외 헤더파일을 선언한다.전송준비가 될 때까지 대기UCSR0A 레지스터 중에서 ARTn모듈의 송신부 동작 enable) RXENn (USARTn모듈의 수신부 동작 enable) 2번 비트 UCSZ02 = 0으로 세트비동기 방식, No Parity bit, 1 Stop bit1번째, 2번째 비트 세트 즉, UCSZ0(1:0) = “11”로 세트 데이터 비트수를 8비트로 결정7.3728 MHz -> 115200 bpsUSARTn모듈의 송수신 속도를 설정▣실습12 : UART로 PC와 데이터 주고받기1) 실습개요- PC로부터 전송되는 문자열을 받아 다시 PC로 되돌려 전송하도록 함.- 설정은 앞의 예제와 유사- 프로그램의 작성된 문장을 PC 화면에 뿌려주는 역할과 키보드를 통해 입력 받은 ASCII값을 화면 상에 보여주는 기능을 함.2) 실습 목표- 16비트 타이머/카운터 활용 방법의 습득(관련 레지스터 이해)- 버저의 동작원리 이해3) 사전지식- ATmega128의 USART 포트를 통해서 PC와 UART 통신을 연결하고, PC로 받은 문자열을 그대로 되돌려 전송.- 설정 : 기본적인 UART 설정은 이전 예제와 동일하게 설정- 데이터 수신 : 모든 설정이 끝나면 UCSR0A 레지스터의 플래그를 보면서 PC로부터 데이터가 도착했 는지 살펴보고 있다가 데이터가 도착 하면 UDR0 레지스터로부터 데이터를 가져오면 된다.- 데이터 송신 : UCSR0A 레지스터의 플래그를 보면서 데이터를 보낼 수 있는 상태를 기다렸다가 UDR0 레지스터에 데이터를 넣어주면 UART로 데이터가 출력될 것이다.4) 소스코드 분석소스코드소스코드 해석#includevoid putch(unsigned char data){while((UCSR0A & 0x20) == 0);UDR0 = data;UCSR0A |= 0x20;}unsigned char getch(){unsigned char data;while((UCSR0A & 0x80) == 0);data = UDR0;UCSR0A |= 0x80;return data;}int main(){unsigned char text[]="r0B = 0x18;UCSR0C = 0x06;UBRR0H = 0x00;UBRR0L = 0x03;while(text[i] != '')putch(text[i++]);i=0;while(echo[i] != '')AVR 입출력에 대한 헤더 파일과 인터럽트를 사용하기 위한 헤더파일과 그 외 헤더파일을 선언한다.전송준비가 될 때까지 대기UCSR0A 레지스터 중에서 5번째 비트(UDREn)를 세트하여 UDRE0를 클리어 함.데이터를 받을 때까지 대기UCSR0A 레지스터 중에서 7번째 비트를 세트하여 RXC0를 클리어 함.Rx(입력 0), Tx(출력, 1)Rx, Tx enable비동기 방식, No Parity bit, 1 Stop bit7.3728 MHz 에서 115200 bps소스코드소스코드 해석putch(echo[i++]);while(1)putch(getch());return 0;}▣실습13 : A/D 컨버터로 광센서 읽기1) 실습개요- ATmega128 의 A/D 컨버터 기능을 이용하여 광 센서(포토 다이오드) 로부터 밝기 정보를 읽어내어 7-Segment FND에 출력- 광다이오드 : 밝기에 따라 아날로그 출력을 냄2) 실습 목표- ATmega128 A/D 컨버터의 동작 원리 이해- A/D 컨버터 제어 방법 습득(레지스터 설정)- 광다이오드 동작 원리 이해3) 사전지식- A/D 컨버터 기능을 이용하여 광다이오드에서 출력되는 광량에 대한 아날로그 신호를 받아 디지 털로 변환한 뒤, 이를 Array-FND에 표시- 타이머/카운터를 이용하여 1초간격으로 데이터를 읽어들이도록 한다.- A/D 컨버터의 설정 방법A/D 컨버터의 입력채널 결정 : 0번 채널 사용입력 데이터의 정렬 방법과 기준전압 선택 : 데이터 정렬은 디폴트인 우정렬로 하고, 기준 전압을 내부 2.56V프리스케일러와 인터럽트 결정 : 프리스케일러는 64분주를 사용하고, 인터럽트는 사용하지 않음.인터럽트를 사용하지 않으므로 설정 끝- A/D 컨버팅 제어설정을 마친 후, ADCSR의 6번 비트를 세트하여 A/D분석소스코드소스코드 해석#include#include#includeenum{C0,C1,C2,C3};unsigned char FND_DATA_TBL[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7C,0X07,0X7F,0X67,0X77,0X7C,0X39,0X5E,0X79,0X71,0X08,0X80};unsigned char lowValue=0;unsigned char highValue=0;unsigned int adcValue=0;unsigned char timer0Cnt=0;void print_FND(char selCx, unsigned char data);SIGNAL(SIG_OVERFLOW0);int main(){DDRE = 0xFF;PORTE = 0x00;DDRG = 0x0F;PORTG = 0x0F;TCCR0 = 0x07;TCNT0 = 0xff - 80;TIMSK |= 1 < TOIE0;TIFR |= 1 < TOV0;AVR 입출력에 대한 헤더 파일과 인터럽트를 사용하기 위한 헤더파일과 그 외 헤더파일을 선언한다.Timer0 Overflow0 ISPdata port0~7비트까지의 모든 비트를 클리어한다.control port 0-3 PIN 0~4비트까지의 register중에서0~3 비트까지의 register를 사용하여 출력한다.0~3비트까지의 비트를 1로 세트한다.Timer/Count0의 동작을 설정WGM0(1:0) = “00” 일반동작모드COM0(1:0) = “00” OC0사용하지 않음CS0(2:0) = “111” Prescaler 1024분주(1 / (7.3728 Mhz / 1024 prescaler )) * 80 => 0.011s를 얻기위한 카운트 값오버플로우 인터럽트TOV0 Timer/Counter0 overflow flag 클리어소스코드소스코드 해석ADMUX = 0xC0;REFS(1:0) = “11”ADLAR = ‘0’MUX(4:0) = “00000”ADCSR = 0xA6;ADFR = ‘1’ADPS(2:0) = “110”ADEN = 0);_delay_ms(3);}}SIGNAL(SIG_OVERFLOW0){cli();TCNT0 = 0xff - 80;timer0Cnt++;if(timer0Cnt == 90){timer0Cnt = 0;while( (ADCSR&0x10) == 0x00);lowValue = ADCL;highValue = ADCH ;adcValue = (highValue < 8) | lowValue ;}sei();}ADMUX 레지스터 중에서 6,7 번째 레지스터를 세트.internal 2.56V 전원 사용디폴트 우정렬ADC0 핀사용 단극성 입력 사용ADSCR 레지스터 중에서 1,2,5,7번째의 비트를 세트.프리러닝 모드프리스케일러 64분주ADC를 EnableADC start conversion ADSC = ‘1’로 세트0.011s * 90 = 1s (1초를 얻기 위한 카운트 횟수)ADC 변환이 끝날 때 까지 대기소스코드소스코드 해석void print_FND(char selCx, unsigned char data){switch(selCx){case C3:PORTG &= 0xF0;PORTG |= 0x0E;Break;case C2:PORTG &= 0xF0;PORTG |= 0x0D;break;case C1:PORTG &= 0xF0;PORTG |= 0x0B;break;case C0:PORTG &= 0xF0;PORTG |= 0x07;break;default:PORTG &= 0xF0;PORTG |= 0x0F;break;}PORTE = FND_DATA_TBL[data];}4번째 FND (좌측기준)하나씩만 입력하기 위해서 그 전의 내용을 초기화 시킴포트 G의 G0을 사용하여 C3로 출력3번째 FND하나씩만 입력하기 위해서 그 전의 내용을 초기화 시킴포트 G의 G1을 사용하여 C2로 출력2번째 FND하나씩만 입력하기 위해서 그 전의 내용을 초기화 시킴포트 G의 G2를 사용하여 C1으로 출력1번째 FND하나씩만 입력하기 위해서 그 전의 내용을 초기화 시킴포트 G의 G3를 사용하여 C0으로 출력포트 G의
    공학/기술| 2015.11.12| 11페이지| 1,500원| 조회(306)
    미리보기
  • 실험4) 타이머와 카운터 실습 7, 8
    실험(4) 예비 보고서●타이머와 카운터소속 : 홍익대학교 전자전기공학부수업 : 금요일 교시 조학번 : B 이름 : 김담당교수님 : 유 교수님담당조교님 : 박 조교님제출일자 : 2015년 월 일 요일▣실습7 : 타이머로 LED 점멸1) 실습개요- ATMega128 마이크로컨트롤러의 타이머 기능을 이용하여 LED를 점멸시키는 실습- 타이머를 이용하여 정확히 1초 마다 LED가 점멸하도록 함.- 타이머는 타이머/카운터 0의 일반 동작 모드를 사용2) 실습 목표- 타이머0의 동작원리 이해- 타이머0 제어 방법의 습득(관련 레지스터 이해)- 오버플로우 인터럽트 제어 프로그램 방법 습득3) 사전지식- 사용할 타이머/카운터 결정여기서는 8비트 타이머/카운터인 타이머/카운터 0를 사용- 동작모드 결정여기서는 일반 동작 모드 사용TCCR 레지스터의 CS를 제외한 모든 비트들을 0으로 세트- 타이머 클럭 결정(클럭소스 및 프리스케일러 결정)여기서는 내부 클럭(7.3278MHz)을 사용프리스케일러는 최대한 주기를 길게 하기 위해 1024를 사용ASSR/SFIOR는 디폴트, TCCR0의 CS비트를 ‘111’로 설정- 타이머 주기 결정1초를 만들기 위해 10ms을 타이머 주기로 결정인터럽트는 10ms마다 발생, 인터럽트가 100번 발생하면 1초로 간주10ms를 맞추기 위해 세어야 하는 카운터 개수를 계산하고 그 카운터 계수를 만족시키기 위한 TCNT 초기값을 TCNT0에 넣음(183)- 인터럽트 인에이블TIMSK 레지스터를 설정하여 오버플로우 인터럽트를 Enable하고, TIFR 레지스터의Timer/Counter0 overflow flag를 클리어4) 소스코드 분석소스코드소스코드 해석#include#includeunsigned char LED_Data = 0x00;unsigned char timer0Cnt = 0;SIGNAL(SIG_OVERFLOW0);int main(){DDRE = 0xFF;TCCR0 = 0x07;TCNT = 0xFF ? 72;TIMSK I = 1 < TOIE0;TIFR I = 1 < TOV0;sei();while(1){PORTE = LED_Data;}return 0;}ATmega128의 I/O에 연관된 내용 정의한다.매크로를 이용하여 interrupt.h를 preprocessing한다.여러 함수들을 모아둔 헤더파일을 불러온다.LED 사용과 타이머 사용을 위한 변수를 선언한다.imer0 Overflow0 ISP 서비스 루틴 선언포트 E를(0~7비트까지 모두)출력 포트로 사용0~7비트 까지의 모든 register중에서 0~2까지의 레지스터를 사용하여 출력한다. 1024prescaler (Timer/Counter0 Control Register : Timer/Counter0의 동작을 설정하고 프리스케일러를 설정하는 등의 기능을 수행한다.)(1/(7.3728MHz/1024 Prescaler))*72=>0.01s0.01s를 얻기 위한 카운트 값 (Timer/Count0 Register : Timer/Count0의 8비트 카운터 값을 저장하고 있는 레지스터이다.)오버플로우 인터럽트 이용TOV0 Timer/Counter0 Overflow flag 클리어LED_Data를 포트 E를 보낸다.소스코드소스코드 해석SIGNAL(SIG_OVERFLOW0){cli();TCNT0 = 0xFF ? 72;timer0Cnt++;if(timer0Cnt = = 100){LED_Data++;timer0Cnt=0;}sei();}타이머0 오버플로우를 확인하고 이 루틴을 실행한다. TCNT0가 클리어 되고 0.01초로 세팅된다. timer0Cnt가 100이 된다는 것은 0.01*100=1초가 되는 카운트 횟수이다.▣실습8 : 타이머를 이용한 디지털 시계1) 실습개요- 타이머를 이용하여 디지털 시계의 기능을 설계- Array-FND 모듈에 마이크로 컨트롤러 출력 포트를 연결하고, 클럭을 이용하여 일정 카운트 기능 을 수행- 타이머/카운터 0의 일반 모드 동작을 사용한다- 편이상 시계는 초와 분까지만 표시2) 실습 목표- 타이머/카운터 활용 방법의 습득(관련 레지스터 이해)- 디지털 시계(초/분) 구현 방법 이해3) 사전지식- 타이머를 이용하여 디지털 시계- 타이머로 LED 점멸하기 예제와 거의 유사- 시계표시를 위해 Array-FND를 사용- 타이머를 이용하여 정확히 1초를 카운트4) 소스코드 분석소스코드소스코드 해석#include
    공학/기술| 2015.11.12| 9페이지| 1,500원| 조회(324)
    미리보기
  • 실험4)인터럽트 실습 5, 6
    실험(4) 예비 보고서●인터럽트소속 : 홍익대학교 전자전기공학부수업 : 금요일 교시 조학번 : B 이름 : 김담당교수님 : 유 교수님담당조교님 : 박 조교님제출일자 : 2015년 월 일 요일▣실습5: 인터럽트로 LED 점멸1) 실습개요- ATMega128 마이크로컨트롤러의 인터럽트 기능을 이용하여 LED를 점멸시키는 실습- 일정시간 마다 LED가 순차적으로 켜지도록 하고, 버튼 스위치를 누르면 LED가 멈추었다가 다시 누르면 동작하도록 한다.- 버튼 스위치가 눌려지면 인터럽트가 발생하도록 해야 한다.- 입력포트 1개(인터럽트가 가능한 포트), 출력포트 1개 사용2) 실습 목표- 인터럽트 발생 원리 이해- 인터럽트 제어 방법의 습득(관련 레지스터 이해)- 입출력 포트에 관한 이해(특히 인터럽트 관련 포트)3) 사전지식- 인터럽트를 위한 입력 포트 선택포트 D의 0번 비트는 int0로서, 인터럽트로 사용할 수 있는 포트임.- 외부 인터럽트 Enable상태 레지스터의 전체 인터럽트 허용비트를 ‘1’로 세팅.int0의 인터럽트 마스크 레지스터의 0번 비트를 1로 세팅.-인터럽트 트리거 방법 정의상승 에지에서 트리거하도록 EICRA 레지스터를 세팅.-전체 인터럽트 Enablesei();-Main 루틴 기술-인터럽트 서비스 루틴의 선언SIGNAL(인터럽트소스명); 방식을 사용4) 인터럽트란??대부분의 마이크로프로세서는 한번에 하나의 프로그램만 실행할 수 있습니다. 따라서 긴급히 처리해야 할 프로그램이 있다면 현재 실행 중인 프로그램을 일시 중지하고 긴급한 프로그램을 실행하여 마친 후에 중지한 프로그램을 계속 실행하면 될 것입니다.인터럽트란 프로세서의 내/외부 장치가 프로세서에게 특정 이벤트(event)가 발생함을 알려서 이벤트를 처리하는 과정을 말합니다. 이러한 이벤트는 프로세서의 내부 장치나 외부 장치에 의해서 비정기적으로 발생되기 때문에 프로세서는 인터럽트 처리를 통해 주변 장치의 서비스(이벤트 처리) 요청을 효율적으로 다룰 수 있습니다.인터럽트 처리에 대한 용어는 과 같고 다음과 같이 설명됩니다.① 특정 이벤트가 발생한 것을 인터럽트 발생이라고 하며 주변장치에서 발생한 인터럽트 의 원인을 인터럽트 소스라고 합니다.② 사용자는 발생한 인터럽트를 미리 허가(enable 또는 non-mask) 또는 금지(disable 또는 mask)로 설정할 수 있습니다.-금지로 설정되었다면 발생한 인터럽트를 무시하고 프로그램을 계속 실행합니다.-허가로 설정되었다면 발생한 인터럽트를 처리한다. 즉 실행 중인 프로그램을 중지 하고 인터럽트 서비스 루틴을 실행한 후 복귀합니다.용어설명인터럽트 소스인터럽트 발생 되는 원인, ATmega128은 35개의 인터럽트 소스가 있다.인터럽트 발생인터럽트 소스가 MCU에 인터럽트 처리를 요청하는 것인터럽트 허가인터럽트가 발생할 때 허가로 설정되어 있다면 MCU는 인터럽트를 처리한다.인터럽트 금지인터럽트가 발생할 때 금지로 설정되어 있다면 MCU는 인터럽트를 처리하지 않고 무시한다.인터럽트 처리인터럽트 서비스 루틴을 실행시키는 것이다.인터럽트 서비스 루틴발생한 인터럽트의 처리를 위해 미리 정의된 프로그램이다.인터럽트 벡터인터럽트 서비스 루틴이 실행되는 시작 주소이다.5) 소스코드 분석소스코드소스코드 해석#include #include #include unsigned char Time_STOP = 0;SIGNAL(SIG_INTERRUPT0);int main(){unsigned char LED_Data = 0x01;DDRD = 0xFE;DDRE = 0xFF;EICRA = 0x04;EICRB = 0x00;EIMSK = 0x01;EIFR = 0x01;sei();while(1){PORTE = LED_Data;if(Time_STOP == 0) {if(LED_Data == 0x80) LED_Data = 0x01;else LED_Data < 1;}_delay_ms(100);}return 0;}SIGNAL(SIG_INTERRUPT0){cli();if(Time_STOP == 0 )Time_STOP = 1;elseTime_STOP = 0;sei();}ATmega128의 I/O에 연관된 내용 정의한다.매크로를 이용하여 interrupt.h를 preprocessing한다.여러 함수들을 모아둔 헤더파일을 불러온다.인터럽트 서비스 루틴 선언포트 D의 0 번째 레지스터를 사용하여 입력(0xFE는 1~7비트까지의 레지스터를 의미)포트 E의 0~7번째까지의 모든 레지스터를 출력으로 사용INT0을 상승에지에서 비동기적으로 발생나머지 INT 1~7은 Low Level에서 인터럽트를 요구INT0이 발생할 때만 인터럽트를 요구외부 INT0을 0으로 초기화global interrupt enable, SREG = 0x80; 한 것과 같다.while문은 E포트의 1bit에 해당하는 점등된 LED를 100ms간격으로 한 bit씩 이동시킨다.그리고 7번째 bit을 지나 다시 1번째 bit로 돌아온다. 그리고 반복외부 Interrupt0 벡터가 주어지면 ISR 함수를 실행global interrupt disable. SREG = 0x00; 한 것과 같다.다시 global interrupt enable.▣실습6: 인터럽트를 이용한 스톱워치1) 실습개요- 스위치 모듈과 Array-FND 모듈에 연결하여 스톱 워치를 제작- 일정 시간마다 클럭에 의해 FND에 숫자와 문자가 디스플레이 되도록하고, 스위치를 누르면 FND 디스플레이가 초기화되도록 하며, 또한 다른 버튼을 누르면 잠시 멈추었다가 다시 이어서 동작을 하도록 한다.- 포트 D의 0번 비트와 1번 비트를 Int0와 Int1의 인터럽트로 사용Int0에 의해서 스톱워치의 Stop/Resume 기능을 구현.Int1을 이용하여 스톱워치의 리셋 기능을 구현.- 스톱워치의 표시는 Array FND를 사용한다.2) 실습 목표- 인터럽트 활용 방법의 습득(관련 레지스터 이해)- Array FND 동작 원리 이해3) 사전지식- 인터럽트를 이용하여 스톱 워치와 비슷한 기능을 하도록 만든 것이다- FND Array는 A~H까지의 각 7-Segment의 LED를 켜기 위한 신호를 사용위치선택 신호(C3~C0)잔상 효과를 위해 약간의 시간지연이 필요- C3~C0는 MCU G포트의 PG3~PG0에 연결되어 있고, A~H 포트는 MCU E 포트의 PE7~PE0 연결- 입출력 포트 D의 0번 비트는 Int0로서, 1번 비트는 Int1으로 사용- 스톱워치와 유사하게 기능을 하도록 만들어진 것으로 실제로 정확한 시간을 잴 수 있는 완전한 스톱워치가 아님매인 함수의 While-Loop를 한바퀴 돌아온 시간을 10ms으로 간주상대적인 시간4) 소스코드 분석소스코드소스코드 해석#include
    공학/기술| 2015.11.12| 8페이지| 1,500원| 조회(476)
    미리보기
  • 실험4) GPIO 입출력 제어 실습 1, 2
    1) 실습개요 - ATMega128 마이크로컨트롤러의 GPIO를 이용하여 LED를 켜는 가장 단순한 실습 - 입출력 포트를 출력으로 설정하고, 그 포트를 이용하여 LED에 신호를 보내 점등 - 프로그램이 시작하면 1초마다 LED에 불이 점등 2) 실습 목표 - GPIO 입출력 포트의 방향 제어 및 출력 제어 방법 습득 - LED 동작 원리 습득<중 략>ATmega128의 I/O에 연관된 내용 정의한다.여러 함수들을 모아둔 헤더파일을 불러온다.정수형으로 값을 반환하는 main 함수 호출I라는 문자를 선언부호가 없는 정수로서 LED_Data 선언포트 E를 출력 포트로 사용계속 반복하기 위한 무한루프 생성포트E를 LED_Data로 둠LED_Data를 하나씩 늘림I가 0부터 99까지 올라가는 동안 동작<중 략>1) 실습개요 - 단순 출력이 아니고, GPIO 포트를 통해 신호를 입력하여 그 신호에 따라 LED의 불을 켜는 실습 - 스위치 모듈의 스위치를 누르면 해당되는 LED 모듈의 LED가 점등되도록 함 - 입출력 포트를 스위치 쪽은 입력으로 LED 쪽은 출력으로 설점하도록 함 2) 실습 목표 - GPIO 입출력 포트의 방향 제어 및 입력 제어 방법 습득 - 스위치 동작원리 습득<중 략>#include<avr/io.h> #include<util/delay.h>int main(){unsigned char FND_DATA_TBL [] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C,0x07, 0x7F, 0x67, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x08, 0x80};unsigned char cnt=0, i;DDRD = 0xFF;while(1){PORTD = FND_DATA_TBL[cnt];cnt++; if (cnt>17) cnt=0; for(i=0; i<50; i++) _delay_ms(10);
    공학/기술| 2015.11.12| 7페이지| 1,500원| 조회(257)
    미리보기
전체보기
받은후기 3
3개 리뷰 평점
  • A+최고예요
    2
  • A좋아요
    0
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    1
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 05월 21일 목요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
10:06 오후
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감