본문내용
아주 중요한 의미가 있다. 메인 루틴과 인터럽트 서비스 루틴에서 시간지연 서브루틴을 중복하여 사용하더라도 아무문제가 없도록 해주기 때문이다.
3)레지스터의 비트처리
AVR 마이크로 컨트롤러는 일부명령에서 비트 단위의 처리 기능을 가지고 있지만 이것도 확장 I/O 레지스터에는 적용되지 않고, I/O 레지스터에서 read-modify-write기능을 수행하는 명령이 없으므로 원활하게 비트 단위의 처리를 수행하기는 어렵다. 이 때문에 AVR에서는 비트 단위의 처리를 수행하기 위한 여러 가지 프로그램 테크닉이 필요하다.
(1)어셈블리 언어의 경우
어셈블리 언어에서 비트 단위로 처리가 가능한 명령에는 몇가지가 있으나 비트 값에 따른 스킵 명령과 CBI/SBI 명령을 제외하고는 그다지 자주 사용되지 않는다. 범용 레지스터나 I/O레지스터 또는 확장 I/O 레지스터에서 read-modify-write 기능을 사용할 수 없다는 것도 불편한 점이다.
프로그램에서 많이 사용되는 일은 어떤 레지스터의 특정 비트를 세트 또는 리셋하는 일인데, AVR의 어셈블리 언어에서 이는 CBI/SBI 명령을 사용하면 된다. 단, 이 명령들은 I/O 레지스터에 대해서만 사용할 수 있으며, 확장 I/O 레지스터나 그 밖의 레지스터는 사용 할 수 없고 상태 레지스터에 대하여는 BCLR/BSET 명령이 따로 있다.
CBI PORTB, 4
SBI PORTB, 7
그러나, 프로그래머가 각 I/O 레지스터의 비트 번호를 기억하기 어려울 때는 다음과 같이 비트 번호를 상수로 정의 하면 편리하다.
.equ LED1 = 4
.equ LED2 = 5
.equ LED3 = 6
.equ LED4 = 7
CBI PORTB, LED1
SBI PORTB, LED4
대부분의 I/O 레지스터에서는 각 비트마다 고유한 역할을 가지고 있는데, 매크로 어셈블러에서는 사용자가 이렇게 I/O 레지스터의 각 비트를 편리하게 사용할 수 있도록 비트 번호를 일일이 기억하기 좋은 이름으로 정의해 놓은 인클루드 파일을 제공하고 있다. 따라서, 아래의 2명령은 서로 같은 의미가 된다.
SBI MCUCR, 7
SBI MCUCR, SRE
프로그램에서 또한 많이 사용하는 일은 어떤 I/O 레지스터의 값을 설정하는 일인데 이것도 위와 같은 비트 번호의 정의를 이용하면 편리하다. 즉,
LDI AL, 0b01000100
STS XMCRA, AL
으로 처리할 것을
LDI AL,(1<
STS XMCRA, AL
와 같이 처리해도 같은 의미가 된다.
(a)순서도(기술로 대체)
①MCU를 초기화 한다.
②PORTB에 6번이나 4번을 1bit씩 왼쪽으로 이동시킨 후 저장한다.
③1,3번 LED가 점등된다.
④시간 지연이 된다.
⑤PORTB에 7번이나 5번을 1bit씩 왼쪽으로 이동시킨 후 저장한다.
⑥2,4번 LED가 점등된다.
⑦시간 지연이 된다.
⑧반복한다.
(b)기본적인 레지스터의 비트처리 프로그램예제
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
;[] []
;[]Exp02_4.asm : Bit Access []
;[] []
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
;
;Designed and programmed by Duck-Yong Yoon in 2005.
;
;------------------------------------------------
;Include Header File
;------------------------------------------------
.include "MEGA128.INC"; include ATmega128 definition file
.include "OK128DEF.INC"; include OK-128 I/O definition file
;------------------------------------------------
;Initialize MCU
;------------------------------------------------
.cseg
.org0x0000
LDIAH,high(RAMEND)high(RAMEND)를 AH로 저장한다.
LDIAL,low(RAMEND) low(RAMEND)를 AL로 저장한다.
OUTSPH,AH AH값을 SPH로 out한다.(I/O)
OUTSPL,AL AL값을 SPL로 out한다.(I/O)
;------------------------------------------------
;Blink LED1/3 and LED2/4
;------------------------------------------------
LDIAL,0xFF0xFF를 AL로 저장한다.; initialize PORTB = output
OUTDDRB,AL AL을 DDRB로 저장한다.(I/O)
LOOP:CBIPORTB,PB7PORTB,PB7의 bit를 ‘0’으로 clear한다. ; LED1,3 on
CBIPORTB,PB5PORTB,PB5의 bit를 ‘0’으로 clear한다.
SBIPORTB,PB6PORTB,PB6의 bit를 ‘1’로 set한다.
SBIPORTB,PB4 PORTB,PB4의 bit를 ‘1’로 set한다.
CALLD500MS 현재 PC를 스택에 저장해 두고 D500MS로 간다.
LDIAL,(1<
PB7나 PB5의 주소를 1bit 왼쪽으로 이동시키고 AL에 저장한다.
OUTPORTB,AL AL주소를 PORTB로 저장한다.
CALLD500MS 현재 PC를 스택에 저장해 두고 D500MS로 간다.
JMPLOOP LOOP label로 간다.
;------------------------------------------------
;Include User Subroutine File
;------------------------------------------------
.include "OK128SUB.INC"; include OK-128 subroutine file
3)레지스터의 비트처리
AVR 마이크로 컨트롤러는 일부명령에서 비트 단위의 처리 기능을 가지고 있지만 이것도 확장 I/O 레지스터에는 적용되지 않고, I/O 레지스터에서 read-modify-write기능을 수행하는 명령이 없으므로 원활하게 비트 단위의 처리를 수행하기는 어렵다. 이 때문에 AVR에서는 비트 단위의 처리를 수행하기 위한 여러 가지 프로그램 테크닉이 필요하다.
(1)어셈블리 언어의 경우
어셈블리 언어에서 비트 단위로 처리가 가능한 명령에는 몇가지가 있으나 비트 값에 따른 스킵 명령과 CBI/SBI 명령을 제외하고는 그다지 자주 사용되지 않는다. 범용 레지스터나 I/O레지스터 또는 확장 I/O 레지스터에서 read-modify-write 기능을 사용할 수 없다는 것도 불편한 점이다.
프로그램에서 많이 사용되는 일은 어떤 레지스터의 특정 비트를 세트 또는 리셋하는 일인데, AVR의 어셈블리 언어에서 이는 CBI/SBI 명령을 사용하면 된다. 단, 이 명령들은 I/O 레지스터에 대해서만 사용할 수 있으며, 확장 I/O 레지스터나 그 밖의 레지스터는 사용 할 수 없고 상태 레지스터에 대하여는 BCLR/BSET 명령이 따로 있다.
CBI PORTB, 4
SBI PORTB, 7
그러나, 프로그래머가 각 I/O 레지스터의 비트 번호를 기억하기 어려울 때는 다음과 같이 비트 번호를 상수로 정의 하면 편리하다.
.equ LED1 = 4
.equ LED2 = 5
.equ LED3 = 6
.equ LED4 = 7
CBI PORTB, LED1
SBI PORTB, LED4
대부분의 I/O 레지스터에서는 각 비트마다 고유한 역할을 가지고 있는데, 매크로 어셈블러에서는 사용자가 이렇게 I/O 레지스터의 각 비트를 편리하게 사용할 수 있도록 비트 번호를 일일이 기억하기 좋은 이름으로 정의해 놓은 인클루드 파일을 제공하고 있다. 따라서, 아래의 2명령은 서로 같은 의미가 된다.
SBI MCUCR, 7
SBI MCUCR, SRE
프로그램에서 또한 많이 사용하는 일은 어떤 I/O 레지스터의 값을 설정하는 일인데 이것도 위와 같은 비트 번호의 정의를 이용하면 편리하다. 즉,
LDI AL, 0b01000100
STS XMCRA, AL
으로 처리할 것을
LDI AL,(1<
와 같이 처리해도 같은 의미가 된다.
(a)순서도(기술로 대체)
①MCU를 초기화 한다.
②PORTB에 6번이나 4번을 1bit씩 왼쪽으로 이동시킨 후 저장한다.
③1,3번 LED가 점등된다.
④시간 지연이 된다.
⑤PORTB에 7번이나 5번을 1bit씩 왼쪽으로 이동시킨 후 저장한다.
⑥2,4번 LED가 점등된다.
⑦시간 지연이 된다.
⑧반복한다.
(b)기본적인 레지스터의 비트처리 프로그램예제
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
;[] []
;[]Exp02_4.asm : Bit Access []
;[] []
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
;
;Designed and programmed by Duck-Yong Yoon in 2005.
;
;------------------------------------------------
;Include Header File
;------------------------------------------------
.include "MEGA128.INC"; include ATmega128 definition file
.include "OK128DEF.INC"; include OK-128 I/O definition file
;------------------------------------------------
;Initialize MCU
;------------------------------------------------
.cseg
.org0x0000
LDIAH,high(RAMEND)high(RAMEND)를 AH로 저장한다.
LDIAL,low(RAMEND) low(RAMEND)를 AL로 저장한다.
OUTSPH,AH AH값을 SPH로 out한다.(I/O)
OUTSPL,AL AL값을 SPL로 out한다.(I/O)
;------------------------------------------------
;Blink LED1/3 and LED2/4
;------------------------------------------------
LDIAL,0xFF0xFF를 AL로 저장한다.; initialize PORTB = output
OUTDDRB,AL AL을 DDRB로 저장한다.(I/O)
LOOP:CBIPORTB,PB7PORTB,PB7의 bit를 ‘0’으로 clear한다. ; LED1,3 on
CBIPORTB,PB5PORTB,PB5의 bit를 ‘0’으로 clear한다.
SBIPORTB,PB6PORTB,PB6의 bit를 ‘1’로 set한다.
SBIPORTB,PB4 PORTB,PB4의 bit를 ‘1’로 set한다.
CALLD500MS 현재 PC를 스택에 저장해 두고 D500MS로 간다.
LDIAL,(1<
OUTPORTB,AL AL주소를 PORTB로 저장한다.
CALLD500MS 현재 PC를 스택에 저장해 두고 D500MS로 간다.
JMPLOOP LOOP label로 간다.
;------------------------------------------------
;Include User Subroutine File
;------------------------------------------------
.include "OK128SUB.INC"; include OK-128 subroutine file
키워드
추천자료
8051 Micro Processor전자회로
중앙처리장치(CPU)
[C++] 여행사 운영프로그램 보고서(소스와 프로그램사진포함)
[자료처리] 인터넷 활용
[멀티미디어]멀티미디어의 개념, 멀티미디어의 특징, 멀티미디어의 유형, 멀티미디어의 종류...
[데이터 암복호화 프로그램] DES, AES, 3-DES 알고리즘의 5가지 운용모드 암복호화 프로그램
[컴퓨터][CPU][중앙처리장치][주기억장치][보조기억장치][메인보드]컴퓨터의 구성, CPU(중앙...
해체가족(가족해체)의 정의, 해체가족(가족해체)의 연구 방향, 해체가족(가족해체)과 실업, ...
xilinx를 이용한 4비트 가감산기 설계(vhdl)
자료처리 방법
[인테넷과 정보사회] 주변에서 사용가능한 컴퓨팅 기능 장치(내비게이션,키오스크,디지털카메...
[통신이론] 자바(JAVA) CRC순환 코드 (순환 중복 검사 CRC방식에 대한 설명 및 부호화 과정, ...
디지털실험 - 실험 12. 쉬프트 레지스터 예비
디지털실험 - 실험 12. 쉬프트 레지스터 결과