*은*
Bronze개인
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 1
검색어 입력폼
  • [report] Atmega 128를 어셈블리(assembly)를 이용해 miss.exe로 Timer를 두어 LED on/off를 시킴. 평가A+최고예요
    마이크로 프로세서 (HW#1)교수님: 김종현컴퓨터정보통신공학과[과제 #1] LEDRED LED와 Yellow LED는 ‘ON’ 시키고, Green LED는 ‘OFF'시키는 어셈블리 프로그램을 작성하고, AVR Studio로 디버깅한 후, MISS로 실행하라ASSEMBLY PROGRAM CODE.include "m128def.inc".org 0x0000Main:ldi r16,0xFFout DDRA,r16ldi r16,0x02 ; Y_Rout PORTA,r16end:rjmp endDEBUGGINGMISS 실행DISCUSSIONRED LED와 Yellow LED는 ‘ON’ 시키고, Green LED는 ‘OFF 시키는 프로그램 이다. 0번핀부터 순서대로 YELLOW GREEN RED 임으로 해당 비트에 0이 들어가면 꺼지게 하는 기본 로직을 염두해 두는게 중요하다. 우선 PORTA를 output 모드로 활성시키려면 DDRA에 0xFF값을 대입하여 OUTPUT모드로 설정하고, 키고싶은 LED에 알맞게 그 값을 PORTA에 16진수 형태로 대입하면 된다. DEBUGGING 하면서 알았던 점은 PORTA가 셋팅되고 바로 PINA가 설정되는게 아니었다. 다음 명령어가 수행이 되어가 그때 PINA가 설정되어 출력하는데는 우리가 느끼진 못하지만 아주 미세한 시간차는 존재 할 수 있다. MISS에서 실행시 맨뒤 상수는 프로그램 실행 시간으로, 5.5초동안 실행하면 계속 Y_R이 출력되어 코드에 end label과 그 label을 반복 시킴으로 불필요하게 출력값을 계속 출력시키진 않았다. 하지만 LED는 계속 켜져있음을 예상 할 수 있다..[과제 #2] LED 켜기2. LED의 배치가 황색(Yellow), 녹색(Green), 적색(Red) 순서라고 가정했을 때, LED의 점멸 순서가 " Y _ _ --> _ _ _ --> _ G _ --> _ _ _ --> _ _ R --> _ _ _ --> Y G _ --> _ _ _ --> _ G R --> _ _ _ --> Y _ R --> W(RAMEND) ; LOW-Byte der obersten RAM-Adresseout SPL, r16rjmp MainMain:ldi r16,0xFFout DDRA,r16ldi r16,0x06 ; Y__out PORTA,r16ldi r17,0x50loop:call Delaydec r17cpi r17,0x00brpl loopcall offldi r16,0x05 ; _G_out PORTA,r16ldi r17,0x50loop2:call Delaydec r17cpi r17,0x00brpl loop2call offldi r16,0x03 ; __Rout PORTA,r16ldi r17,0x50loop3:call Delaydec r17cpi r17,0x00brpl loop3call offldi r16,0x04 ; YG_out PORTA,r16ldi r17,0x50loop4:call Delaydec r17cpi r17,0x00brpl loop4call offldi r16,0x01 ; _GRout PORTA,r16ldi r17,0x50loop5:call Delaydec r17cpi r17,0x00brpl loop5call offldi r16,0x02 ; Y_Rout PORTA,r16ldi r17,0x50loop6:call Delaydec r17cpi r17,0x00brpl loop6call offldi r16,0x00 ; YGRout PORTA,r16ldi r17,0x50loop12:call Delaydec r17cpi r17,0x00brpl loop12call offldi r16,0x00 ; YGRout PORTA,r16ldi r17,0x50loop14:call Delaydec r17cpi r17,0x00brpl loop14call offend:rjmp endDelay:push r24in r24,SREGpush r24nopnopnopnopnopnoppop r24out SREG,r24pop r24retOFF:ldi r16,0x07 ; ___out PORTA,r16ldi r17, 반복시킬때 다른 레지스터에 임의의 값을 집어넣고 한번 반복마다 그 dec 명령어로 그 값이 하나씩 줄고, 그 값을 항상 0과 비교하여 같으면 delay를 끝내는 로직이다. 실제로 반복문을 실행하면서 생기는 cycle이 있어 정확이 300마이크로 초를 만들어내진 못했지만 거의 근접하게 구현하였다. DEBUGGING 하면서는 300마이크로초가 진행되는 것을 F11로 계속 누르기에는 시간이 너무 많이 소요 되어 cirl+F10 (run to cursor)을 사용해 delay바로 다음 문장으로 옮겨 실제로 300마이크로초가 딜레이 되는 것을 확인 할 수 있었다. miss실행시 실제로 LED가 켜지고 꺼질 때 300마이크로초가 진행되는 것을 확인 할 수 있었다.[과제 #3] Timer/Counter0를 이용하여 1초 간격으로 LED 켜기Timer/Counter0을 이용하여 [과제 #2]를 다시 수행하라. 즉, LED 점멸이 1초 간격으로 반복하도록 어셈블리 프로그램을 작성하여라. Timer/Counter0의 클록 소스는 외부 클록(32.768 KHz)을 사용하도록 하고, SLEEP 명령어와 Timer0 Interrupt를 이용하도록 한다.ASSEMBLY PROGRAM CODE.include "m128def.inc".cseg.org 0x0000Int_Vector:.org 0x0000jmp Reset ; 01: RESETjmp Bad_Interrupt ; 02: INT0, External Interrupt Request 0jmp Bad_Interrupt ; 03: INT1, External Interrupt Request 1jmp Bad_Interrupt ; 04: INT2, External Interrupt Request 2jmp Bad_Interrupt ; 05: INT3, External Interrupt Request 3jmp Bad_Interrupt ; 06: INT4, External Interrupt Request 4jmp Bad_Interrupt ; 07:MPAjmp Bad_Interrupt ; 14: TIMER1_COMPBjmp Bad_interrupt ; 15: TIMER1_OVFjmp Bad_Interrupt ; 16: TIMER0_COMP.org 0x0020jmp Tim_Interrupt ; 17: TIMER0_OVFjmp Bad_Interrupt ; 18: SPI_STC, SPI Serial Transfer Completejmp Bad_Interrupt ; 19: USART0_RX, USART0 Rx Completejmp Bad_Interrupt ; 20: USART0_UDRE, USART0 Data Register Emptyjmp Bad_Interrupt ; 21: USART0_TX, USART0 Tx Completejmp Bad_Interrupt ; 22: ADC, ADC Conversion Completejmp Bad_Interrupt ; 23: EE_READY, EEPROM Readyjmp Bad_Interrupt ; 24: ANALOG_COMP, Analog Comparatorjmp Bad_Interrupt ; 25: TIMER1_COMPCjmp Bad_Interrupt ; 26: TIMER3_CAPTjmp Bad_Interrupt ; 27: TIMER3_COMPAjmp Bad_Interrupt ; 28: TIMER3_COMPBjmp Bad_Interrupt ; 29: TIMER3_COMPCjmp Bad_Interrupt ; 30: TIMER3_OVFjmp Bad_Interrupt ; 31: USART1_RX, USART1 Rx Completejmp Bad_Interrupt ; 32: USART1_UDRE, USART1 Data Register Emptyjmp Bad_Interrupt ; 33: USART1_TX, USART1 Tx Completejmp Bad_Interrupt ; 34: TWI, Two-wire Serial Interfacejmp Bad_Interrupt ; 35: SPM_RLoopcall offldi r16,0x04out PORTA,r16call Loopcall offldi r16,0x01out PORTA,r16call Loopcall offldi r17, 0x02out PORTA, r17call Loopcall offldi r17, 0x00out PORTA, r17call Loopcall offldi r17, 0x00out PORTA, r17call Loopcall offHalt:jmp Halt;TCNT0 증가.retTim_interrupt:brne Tim_interrupt_reTim_interrupt_re:pop r24out SREG,r24pop r24retiBad_Interrupt:jmp Int_VectorLoop:push r24in r24,SREGpushr24ldi r17,0x08out ASSR,r17ldi r17,0x00out TCNT0,r17;TCNT0 0 setldi r17,0x6Cout TCCR0,r17;ldi r17,0x01out TIMSK,r17seijmp Haltpop r24out SREG, r24pop r24retoff:ldi r16,0x07out PORTA,r16jmp loopDEBUGGINGMISS 실행DISCUSSION1초 카운터에 가기전에 인터럽트시 상태플래기에 영향을 끼칠 수 있음으로 초기 상태플래그는 따로 저장해 놓았다고 리턴시 pop하여 그 값을 다시 꺼낸다. 처음 ASR설정하여 동기식 타이머카운터0를 설정한다. 다음 TNCT0를 0으로 맞춰놓는다. TCNT는 초기값이 0x32로 설정되어있었다. 직접 그 수를 바꿔줄 필요가 있다. TCCR레지스터에 적당한 값을 집어넣어 wave generator도 가동시키고, Fast PWN모드 선택, 분주수 또한 선택을 하여 32.768khz를 만들어 낸다. Sei는 인터럽트 실행가능케 하는 명령어고 그 후 halt 라벨로 이동해 tcnt값이 255까지 도달하고 0으로 떨어지고 하는 과정을 반복하면서 1초를 만들어 내는 코드이다 1초발생이 되면 push된 원래긴했다.
    공학/기술| 2015.12.30| 15페이지| 3,000원| 조회(904)
    미리보기
전체보기
받은후기 2
2개 리뷰 평점
  • A+최고예요
    1
  • A좋아요
    1
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    0
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 05월 17일 일요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
11:30 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감