본문 바로가기

ATMEGA

아트메가 128 메모리에 관해 Memory map 아트메가의 플레쉬 메모리는 ISP로 128K바이트의크기를 가지고 있다. 명령어의 크기 16BIT // 32 BIT 플레쉬 메모리의 구성(BOOT SECTION + APPLICATION PROGRAM SECTION) 128KBYTE = 64 KBYTE * 2BYTE(16BIT) 참고(1BYTE =8 BIT) PC(PROGRAM COUNTER): 아트메가 128 메모리(64K byte)에 접근하기 위한 주소공간임 크기 16bit (0x0000~0xFFFF) JTAG 이나 SPI(직병렬 인터페이스) 모드를 통해 ISP(IN SYSTEM PROGRAM) 로 접근 할수 있다. 플레쉬메모리는 10000 번의 쓰기 삭제 보장 DATA MEMORYMAP 4096바이트의 SRAM 메모리의 접근 호환성.. 더보기
/*2. 적외선 센서로부터 감지 신호를 받을 때마다, LED 불빛이 좌측에서 우측으로 1칸씩 이동 시키기*/ #include void Delay_us(unsigned int time_us) /* time delay for us */ { register unsigned char i; for(i = 0; i < time_us; i++) // 4 cycle + { asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle = 16 cycle = 1 us for .. 더보기
단방향 통신예제 더보기
AT90S2313 (AVR 강의 자료) 파일 더보기
/* cds 이용 led 불켜기 adc07이용*/ #include void LED_init(); void ADC_init(); unsigned int ADConversion(int ch); int main(void) { unsigned int ch_ADC; LED_init(); ADC_init(); while(1) { ch_ADC = ADConversion(7); if(ch_ADC 더보기
FND 두자리 동시에 같은숫자표현 #include int main(void) { DDRE=0xFF; PORTE=0xFF; //DDRF=0xFF; //PORTF=0xFF; volatile unsigned char i=0; volatile unsigned char a=0; for(;;) { asm("NOP"); i=0; //PORTF = PINC; a=~PINC; while(a>=1) { a/=2; i++; } PORTE =i | i 0001 0001 } return 1; } 더보기
/*99~0까지 순차적으로 숫자를 1씩 감소하면서 FND에 표시 하기*/ #include void Delay_us(unsigned int time_us) /* time delay for us */ { register unsigned char i; for(i = 0; i < time_us; i++) // 4 cycle + { asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle = 16 cycle = 1 us for .. 더보기
1칸?씩 쉬프트시키면서 불켜기 #include //------------------------딜레이 함수.. void Delay_us(unsigned int time_us) /* time delay for us */ { register unsigned char i; for(i = 0; i < time_us; i++) // 4 cycle + { asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 ").. 더보기
/*0~99까지 순차적으로 숫자를 1씩 증가하면서 FND(7 SEGMENT)에 표시 하기*/ #include void Delay_us(unsigned int time_us) /* time delay for us */ { register unsigned char i; for(i = 0; i < time_us; i++) // 4 cycle + { asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle = 16 cycle = 1 us for .. 더보기
1칸?씩 쉬프트시키면서 LED 쌓이면서 켜기 #include //------------------------딜레이 함수.. void Delay_us(unsigned int time_us) /* time delay for us */ { register unsigned char i; for(i = 0; i < time_us; i++) // 4 cycle + { asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 "); // 2 cycle + asm volatile(" PUSH R0 "); // 2 cycle + asm volatile(" POP R0 ").. 더보기