|
2. 196À» ¹è¿öº¸ÀÚ
I.
196ÀÇ ³»ºÎ ±¸Á¶
1. 196ÀÇ
Ư¡
20MHz
operation
RALU
488 byte
internal RAM
28°³
interrupt source, 16°³ interrupt vector
1.4usÀÇ
16bit X 16bit multiplication (at 20MHz)
Power
down mode, Idle mode
16bit
watchdog timer
full
duplex serial port
µ¿Àû
±¸Á¶ÀÇ 8bit/16bit
external BUS width
Capture
±â´ÉÀÌ ÀÖ´Â 16bit
up/down counter
8/10bit
ADC with Sample/Hold
232 byte
register file
Register-Register
Architecture
PTS(Peripheral Transaction
Server)
HOLD/HOLDA protocol
5°³ÀÇ 8bit
I/O port
3 PWM
output
³×
°³ÀÇ 16bit
software timer
2. 196ÀÇ ³»ºÎ
±¸Á¶
(1)
196KCÀÇ memory ±¸Á¶
196KCÀÇ
memory mapÀ» »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.
|
external
Memory/IO |
FFFFH ~
4000H |
|
|
internal ROM/EP-ROM or
external ROM |
3FFFH ~
2080H |
|
|
reserved |
|
|
|
»óÀ§ 8°³ÀÇ interrupt vector
table |
203FH ~
2030H |
|
|
EP-ROM security
key |
202FH ~
2020H |
|
|
reserved |
|
|
|
CCB(Chip Configuration
Byte) |
2018H |
|
|
reserved |
|
|
|
ÇÏÀ§ 8°³ÀÇ interrupt vector
table |
2013H ~
2000H |
|
|
port 3,
4 |
1FFFH
1FFEH |
Address/Data
BUS |
|
external memory
¶Ç´Â
IO |
1FFDH ~
0200H |
|
|
internal data memory,
register file(SP, RAM, SFR, external program code
memory) |
01FFH
~
0000H |
80C196KC internal RAM
& SFR |
¿©±â¿¡¼
³»ºÎ RAM Áß Register file¿¡ ´ëÇØ
°£´ÜÈ÷ ¾Ë¾Æº¸ÀÚ.
³»ºÎ RAMÀÇ memory map
|
ȗˤ
RAM |
01FFH ~
0100H |
window¸¦ ÀÌ¿ëÇÏ¿© Á÷Á¢ ¹øÁö ÁöÁ¤À¸·Î data access |
|
Register
File |
00FFH ~
001AH |
direct, indirect, index
addressing µîÀ» ÀÌ¿ëÇÏ¿© data
access |
|
SP(Stack
Pointer) |
0019H ~
0018H |
Stack Pointer·Î »ç¿ë |
|
SFR(Special Function
Register) |
0017H ~
0000H |
I/O
¹× ´Ù¸¥ ÁÖº¯
±â´ÉÀ»
Á¦¾î |
1) Register File
80196˼
Register FileÀ»
base·Î ÇÏ¿© ¿¬»êÀ» ÇÏ´Â
Register to Register Architecture·Î
µÇ¾îÀÖ´Ù. register fileÀº 232byteÀÇ ³»ºÎ RAM(18H~0FFH)À» ¸ðµÎ
register·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç,
196KC¿¡´Â 256byteÀÇ Ãß°¡ RAMÀ» °¡Áö°í ÀÖ¾î¼ ¼öÁ÷ window¸¦ ÀÌ¿ëÇÏ¿©
»ç¿ëÇÒ ¼ö ÀÖ´Ù.
18H~0FFHÀÇ
¿µ¿ªÀ» register fileÀ̶ó°í ºÎ¸£´Âµ¥, ÀÌ ¿µ¿ªÀº byte(8bit),
word(16bit), long word(32bit)·Î
accessÇÒ ¼ö ÀÖ´Ù. ÀÌ
register file˼
RALU(Register/Arithmetic Logic Unit)°¡ »ç¿ëÇϹǷΠ232°³ÀÇ Accumulator°¡ ÀÖ´Â °Í°ú
°°Àº È¿°ú¸¦ ³½´Ù. Áï,
ƯÁ¤ Accumulator¸¦ ÀÌ¿ëÇÏ¿© ¿¬»êÀ» ÇÒ Çʿ䰡 ¾øÀ¸¹Ç·Î ÇÁ·Î±×·¥¿¡ À¯¿ëÇÏ´Ù.
ÇÑÆí, »óÀ§
RAM˼
SFRÀÇ window¸¦
ÀÌ¿ëÇÏ¿© 0100H~01FFHÀÇ 256byteÀÇ RAMÀ» register
file·Î mapping
½ÃÄѼ RALU¿¡¼ »ç¿ëÇÒ ¼ö
ÀÖ´Ù.
2) Stack Pointer
ÀÌ °÷Àº
16bit Stack Pointer·Î »ç¿ëµÇ´Â ºÎºÐÀÌ´Ù. »ç¿ëÀÚ°¡ Ãʱ⠼³Á¤ÇÏ¿© »ç¿ëÇÑ´Ù.
3) SFR(Special
Function Registers) & ¼öÆò window
196ÀÇ
IO¸¦ Á¦¾îÇϱâ À§ÇÑ RegisterÀÌ´Ù.SFRÀ» ¾Ë¾Æ¾ß¸¸ controller¿¡¼
IO¸¦
¸¶À½´ë·Î ÈÖ¾îÀâÀ» ¼ö
ÀÖ´Ù.
¶Ç 196¿¡¼´Â
¼öÆò
window¸¦
ÀÌ¿ëÇÏ¿© ´Ù¸¥ ±â´ÉÀÇ
SFRÀ»
¼±ÅÃÇÒ ¼ö°¡ ÀÖ´Ù.
¾Æ·¡ÀÇ
Ç¥´Â 196ÀÇ
SFRÀÌ´Ù.
|
address |
¼öÆò window 0
Read |
¼öÆò window 0
Write |
¼öÆò window 1
Read/Write |
¼öÆò window 15
Read |
¼öÆò window 15
Write |
|
17H |
IOS2 |
PWMO_CONTROL |
PWM2_CONTROL |
PWM0_CONTROL |
IOS2 |
|
16H |
IOS1 |
IOC1 |
PWM1_CONTROL |
IOC1 |
IOS1 |
|
15H |
IOS0 |
IOC0 |
reserved |
IOC0 |
IOS0 |
|
14H |
WSR |
WSR |
WSR |
WSR |
WSR |
|
13H |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
|
12H |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
|
11H |
SP_STAT |
SP_CON |
reserved |
SP_CON |
SP_STAT |
|
10H |
PORT2 |
PORT2 |
reserved |
reserved |
reserved |
|
0FH |
PORT1 |
PORT1 |
reserved |
reserved |
reserved |
|
0EH |
PORT0 |
BAUD_RATE |
reserved |
reserved |
reserved |
|
0DH |
TIMER2(HI) |
TIMER2(HI) |
reserved |
T2CAPTURE(HI) |
T2CAPTURE(HI) |
|
0CH |
TIMER2(LO) |
TIMER1(LO) |
IOC3 |
T2CAPTURE(LO) |
T2CAPTURE(LO) |
|
0BH |
TIMER1(HI) |
IOC2 |
reserved |
IOC2 |
TIMER1(HI) |
|
0AH |
TIMER1(LO) |
WATCHDOG |
reserved |
WATCHDOG |
TIMER1(LO) |
|
09H |
INT_PEND |
INT_PEND |
INT_PEND |
INT_PEND |
INT_PEND |
|
08H |
INT_MASK |
INT_MASK |
INT_MASK |
INT_MASK |
INT_MASK |
|
07H |
SBUF(Rx) |
SBUF(Tx) |
PTSSRV(HI) |
SBUF(Tx) |
SBUF(Rx) |
|
06H |
HSI_STATUS |
HSO_COMMAND |
PTSSRV(LO) |
HSO_COMMAND |
HSI_STATUS |
|
05H |
HSI_TIME(HI) |
HSO_TIME(HI) |
PTSSEL(HI) |
HSO_TIME(HI) |
HSI_TIME(HI) |
|
04H |
HSI_TIME(LO) |
HSO_TIME(LO) |
PTSSEL(LO) |
HSO_TIME(LO) |
HSI_TIME(LO) |
|
03H |
AD_RESULT(HI) |
HSI_MODE |
AD_TIME |
HSI_MODE |
AD_RESULT(HI) |
|
02H |
AD_RESULT(LO) |
AD_COMMAND |
reserved |
AD_COMMAND |
AD_RESULT(LO) |
|
01H |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
|
00H |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
* WSR
(Window Select Register)À» ÀÌ¿ëÇØ¼
¼öÆò window¸¦ ¼±ÅÃÇÏ´Â °æ¿ì
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
function |
|
X |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
¼öÆò window
0 |
|
X |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
¼öÆò window
1 |
|
X |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
¼öÆò window
15 |
À§ÀÇ SFRµéÀ»
º¸¸é
°°Àº address¿¡ ¼·Î
´Ù¸¥
±â´ÉÀÇ Register°¡
mapping µÇ¾î Àִµ¥, ÀÌ´Â 96 °è¿ controllerÀÇ ÀÌÀü ¹öÀü°úÀÇ È£È¯¼º ¶§¹®¿¡ Ãß°¡µÇ¸é¼ ¹ß»ýÇÑ °ÍÀÌ´Ù. µû¶ó¼ ƯÁ¤ register¸¦ ¼±ÅÃÇϱâ
À§Çؼ WSRÀ» ÀÌ¿ëÇÏ¿© window¸¦ ¼±ÅÃÇϰí
register¿¡ accessÇÏ´Â °ÍÀÌ´Ù. ¶Ç
ÀÐ°í ¾²´Â °æ¿ì¿¡ µû¶ó¼µµ accessµÇ´Â address°¡
´Þ¶óÁö¹Ç·Î
ÁÖÀÇÇØ¾ß
ÇÑ´Ù. ÀÌ´Â °í±Þ
»ç¿ëÀÚ¿¡°Ô
¸Å¿ì Áß¿äÇÏ´Ù. ÀÚÄ©Çϸé
½Ç¼ö¸¦
ãÀ» ¼ö ¾ø±â
¶§¹®ÀÌ´Ù.
(2)
RALU
º¸Åë ¸¹Àº
register°¡
¾ø´Â CPU¿¡¼´Â ¿¬»êÀ»
À§Çؼ
memory·ÎºÎÅÍ
Accumulator·Î
data¸¦ °¡Á®¿Í¾ß ÇÑ´Ù.
±×·¯³ª
196¿¡¼´Â
º¯¼ö°¡ ³»ºÎ
RAM(register)¿¡ ÀÖÀ» °æ¿ì¿¡´Â ±×·² Çʿ䰡 ¾ø´Ù. Áï, register°¡ accumulatorÀÇ ¿ªÇÒÀ» ÇÑ´Ù.
¿¹¸¦ µé¾î
µ¡¼ÀÀ»
ÇÏ´Â °æ¿ì º¸ÅëÀÇ
CPU¿¡¼´Â
MOV
AX, 40H
MOV
BX, 50H
ADD
AX, BX
MOV
40H, AX
¶ó°í ÇØ¾ßÇÏÁö¸¸,
196KC¿¡¼´Â
ADD
40H, 50H
¶ó´Â ÇÑ
ÁÙ·Î
³¡³ª°Ô µÈ´Ù. (40H¿Í
50H°¡
³»ºÎ º¯¼ö¶ó¸é)
¶ÇÇÑ 196Àº
µ¡¼À°ú
»¬¼À, °ö¼À, ³í¸®
¿¬»ê
¸í·É¿¡ ¼¼ °³ÀÇ
operand°¡
Àֱ⠶§¹®¿¡, ¿¹¸¦
µé¾î
60H=40H-50H(40HÀÇ ³»¿ë¿¡¼ 50HÀÇ ³»¿ëÀ» »« ÈÄ 60H¿¡ ±× ³»¿ëÀ» ÀúÀåÇÑ´Ù.)ÀÇ °æ¿ì
SUB
60H, 40H, 50H
·Î ÇÑ
ÁÙ¿¡
³¡³¾ ¼ö°¡ ÀÖ´Ù.
ÀÌ
¶§¹®¿¡ °°Àº ¼ÓµµÀÇ
´Ù¸¥
CPUº¸´Ù ¿¬»ê¼Óµµ°¡ µÎ
¼¼¹è
»¡¶óÁö°í memory È¿À²Àº 10~30%Á¤µµ ÁÁ¾ÆÁú ¼ö
ÀÖ´Ù.
II. 196
Assember
II-I. Assembler¸¦
½ÃÀÛÇϱâ Àü¿¡
1. Assembler
±âÃÊ
¾î¼Àºí¸®¾î´Â
±âº»ÀûÀ¸·Î mnemonic + operand·Î ÇÑ
¸í·ÉÀÌ
±¸¼ºµÈ´Ù. ¿¹¸¦ µé¸é
´ÙÀ½°ú
°°´Ù.
START:
ADD
AX, #40H
label
mnemonic
operands (AX´Â
variable)
mnemonicÀ̶õ
¸í·ÉÀÇ Á¾·ù¸¦ ¸»ÇÏ´Â °ÍÀ̰í, operand¶õ ¸í·É ½ÇÇàÀÇ ´ë»óÀÌ µÈ´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø ÇÑ
¸í·É ´ÜÀ§´Â Assembler¿¡ ÀÇÇØ¼
OP code·Î º¯È¯µÇ¾î object
fileÀÌ
¸¸µé¾îÁø´Ù. ÀÌ´Â ´Ù½Ã
ROMÀ̳ª
RAM¿¡ µé¾î°¥ ¼ö
ÀÖ´Â
½ÇÇà °¡´ÉÇÑ
code(±â°è¾î)·Î
º¯È¯µÇ¾î ½ÇÇàµÇ°Ô
µÈ´Ù.
operand´Â
mnemonic¿¡ µû¶ó ´Þ¶óÁø´Ù. µÎ °³ÀÎ °Íµµ ÀÖ°í, ÇÑ
°³ÀÎ °Íµµ ÀÖ°í, ¾ø´Â
°Íµµ ÀÖ´Ù. ¶ÇÇÑ À̵éÀº
CPU¸¶´Ù ´Ù¸£´Ù. ±×·¯³ª ±×
±âº»ÀûÀÎ ±¸Á¶´Â ºñ½ÁÇϱ⠶§¹®¿¡ ÇÑ Á¾·ùÀÇ ¾î¼Àºí¸®¾î¸¦ ¾Ë°í ÀÖ´Ù¸é ´Ù¸¥ ¾î¼Àºí¸®¾î¸¦ ¹è¿ì±â´Â ±×¸® ¾î·ÆÁö ¾Ê´Ù.
ProgrammingÇÒ ¶§ Assembler¸¦ ¹Ýµå½Ã ¾²¶ó´Â ¹ýÀº ¾ø´Ù. C¸¦ ½áµµ
µÇ°í C++À» ½áµµ »ó°ü¾ø´Ù. ±×·¯³ª Hardware¿¡
Á¢±ÙÇϱâ
À§Çؼ´Â Assembler´Â ÇʼöÀ̰í, À̸¦ ¾Ë¾Æ¾ß¸¸ hardware¸¦ È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°í,
ÃÖÀûÀÇ code¸¦
¸¸µé ¼ö°¡ ÀÖ´Ù.
±×·¯¹Ç·Î
¼Óµµ¸¦ À§ÇÑ
hardware¶ó¸é Cº¸´Ù´Â assembler°¡ ´õ ÁÁÀ»
°ÍÀÌ´Ù.
ÇÑÆí °°Àº
CPU¶óµµ
¿©·¯ Á¾·ùÀÇ
assembler°¡ ÀÖÀ»
¼ö ÀÖ´Ù. ¹°·Ð
´ëºÎºÐÀº
ºñ½ÁÇϳª ¾à°£¾¿ ´Ù¸¥
Á¡µµ
ÀÖÀ¸¹Ç·Î ÀÚ½ÅÀÌ ¾î¶²
assembler¸¦
»ç¿ëÇÏ´ÂÁö ¾Ë°í »ç¿ëÇØ¾ß
ÇÑ´Ù.
¿¹¸¦ µé¾î
8x86°è¿À̶ó¸é MASM(Macro Assembler)ÀÌ À¯¸íÇÒ °ÍÀÌ´Ù.
ÀÌÈĺÎÅÍ´Â
intel¿¡¼ Á¦°øÇÏ´Â asm96À» ÀÌ¿ëÇÏ¿©
¾î¼Àºí¸®¾î ÇÁ·Î±×·¥ °³¹ß°úÁ¤¿¡ »ìÆìº¸°Ú´Ù. (196
assembler´Â
http://www.postech.ac.kr/downarea/asm/ic96.zip
¿¡¼
°¡Á®°¡±â ¹Ù¶÷.) ¾Æ·¡
±×¸²Àº
programÀÇ
°³¹ß °úÁ¤ÀÌ´Ù.
source programÀº ¾î¼Àºí¸®¾î¿¡ ÀÇÇØ¼
¸¸µé¾îÁö°í ÀÌ´Â ¾î¼Àºí·¯¿¡
ÀÇÇØ
AssembleµÈ´Ù.
¿©±â¼ list fileÀ»
¾òÀ» ¼ö
ÀÖ´Ù. ¿©±â¿¡¼ ¸¸µé¾îÁø
object file˼
oh³ª hex2binµîÀ»
ÅëÇØ¼ hex fileÀ̳ª
bin fileµîÀÇ
code·Î ¸¸µé¾îÁø´Ù.

2. 196
Assembler
¿ì¼± ÀϹÝÀûÀÎ
»çÇ׵鿡
´ëÇØ¼ »ìÆìº¸ÀÚ.
(1)
À̸§(Label, varible,...)À¸·Î »ç¿ëÇÒ
¼ö ÀÖ´Â
¹®ÀÚ
¸ðµç ASCII
¹®ÀÚ´Â »ç¿ë
°¡´ÉÇϰí, ´ë¼Ò¹®ÀÚÀÇ
±¸ºÐÀº ¾ø´Ù.
±×·¯³ª À̸§¿¡¼ ù
¹øÂ°
¹®Àڷδ 0~9ÀÇ ¼ýÀÚ¸¦
»ç¿ëÇÒ
¼ö ¾ø°í ´ÙÀ½
¹®ÀÚ´Â
Á¦ÇÑ ¾ø´Ù. ±æÀÌ´Â
ÃÖ´ë
31¹®ÀÚÀÌ´Ù.
(2)
¼ýÀÚ Ç¥±â
|
Áø¼ö |
Ãß°¡ »çÇ× |
example |
|
2
(binary) |
B (b) |
11000011B |
|
8
(oxta) |
O, Q (o,
q) |
145O |
|
10
(decimal) |
D, d ȤÀº ¾ø¾îµµ
µÊ |
95 |
|
16
(hexa) |
H, h |
9FH,
0F0H |
16Áø¼öÀÇ
°æ¿ì lableÀ̳ª À̸§°ú ¼ýÀÚ¸¦ ±¸º°Çϱâ À§Çؼ óÀ½¿¡ A~F·Î ½ÃÀÛÇÏ´Â °æ¿ì¿¡´Â ¾Õ¿¡ 0À»
Çϳª ´õ ½áÁØ´Ù.
(3)
¹®Àå
À§¿¡¼ ¼³¸íÇÑ
°Í°ú
°°´Ù.
LOOP:
ORB
TEMP, #'A'
; Temp¿¡ 'A'ÀÇ
ASCII °ª ´õÇÔ
lable
mnemoic
operands
comment
(4)
Lable, Variable, Number
1)
Lable
Lable˼
jump³ª callÇÒ ¶§ÀÇ subroutime ȤÀº addressÀÇ À̸§À̸ç
À§¿¡¼Ã³·³ µÚ¿¡ ':'À» ºÙÀδÙ.
±×·¸Áö ¾ÊÀ¸¸é assembler´Â lableÀ» ±¸º°ÇÒ ¼ö ¾ø´Ù.
2)
Variable
½ÇÁ¦ °ªÀÇ
À§Ä¡¸¦
³ªÅ¸³»±â À§ÇØ
»ç¿ëÇÑ´Ù.
¿¹) TEMP: DCB 155
TEMP1:
DSB
15
(C¿¡¼ÀÇ
º¯¼ö ¼±¾ð°ú °°À½ - int temp;)
3)
Number
¼ýÀڷμ
EQU(Equate)³ª
SETÀ» »ç¿ëÇÏ¿© Á¤ÀÇÇÏ°í ¾´´Ù.
¿¹) RADIUS EQU 450
(C¿¡¼
define°ú °°À½)
(5)
Asm96 Áö½Ã¾î
|
Áö½Ã¾î |
function |
example |
|
Module levelÀ» Á¤ÀÇÇÏ´Â Áö½Ã¾î |
|
MODULE |
module¿¡ ´ëÇÑ Á¤º¸
Á¦°ø |
ABC
MODULE
STACKSIZE(100) |
|
PUBLIC |
public symbolÀ» Á¤ÀÇ |
ACC |
|
EXTRN |
¿ÜºÎ ÂüÁ¶ symbolÀ» Á¤ÀÇ |
ACD |
|
END |
end of
program |
END |
|
Location
counter¸¦
Á¤ÀÇÇÏ´Â
Áö½Ã¾î |
|
CSEG |
code segment Á¤ÀÇ |
CSEG
AT
2080H |
|
DSEG |
data segment Á¤ÀÇ |
DSEG
AT
8000H |
|
RSEG |
overayµÇÁö ¾Ê´Â register segment Á¤ÀÇ |
RSEG
AT
0020H |
|
OSEG |
overayµÇ´Â register segment
Á¤ÀÇ |
OSEG
AT
0100H |
|
ORG |
½ÃÀÛ address¸¦ Á¤ÀÇ(Origin) |
ORG
8200H |
|
SymbolÀ» Á¤ÀÇÇÏ´Â Áö½Ã¾î |
|
EQU |
symbol Á¤ÀÇ (ÀçÁ¤Àǰ¡ ºÒ°¡´É)(Equate) |
ESC
EQU
0 |
|
SET |
symbol Á¤ÀÇ (ÀçÁ¤Àǰ¡ °¡´É) |
BEEP
SET
0¸ð |
|
Code¸¦ Á¤ÀÇÇÏ´Â Áö½Ã¾î |
|
DCB |
º¯¼ö¸¦ byte·Î Á¤ÀÇ(Define Code in
Byte) |
DCB
33H,
'HI' |
|
DCW |
º¯¼ö¸¦ word·Î Á¤ÀÇ(Define Code in
Word) |
DCW
4444H |
|
DCL |
º¯¼ö¸¦ long word·Î
Á¤ÀÇ(Define Code in Long
word) |
DCL
12345678H |
|
DCR |
º¯¼ö¸¦ ½Ç¼ö·Î Á¤ÀÇ(Define Code in
real) |
DCR
3.14159 |
|
Á¶°Ç ¾î¼Àºí¸® Áö½Ã¾î |
|
IF |
Á¶°Ç ¾î¼Àºí¸® ºí·° ½ÃÀÛ |
|
|
ELSE0 |
Á¶°Ç ¾î¼Àºí¸® ºí·°À» ´ëü |
|
|
ENDIF |
Á¶°Ç ¾î¼Àºí¸® ³¡ |
|
196
¾î¼Àºí·¯´Â ¸í·É(mnemonic)ÀÇ ±â´É¿¡ µû¶ó ¸î¸î ¸í·É±ºÀ¸·Î ³ª´©¾î º¼ ¼ö°¡ ÀÖ´Ù. ÀÌ¿¡ µû¶ó ³ª´©¾î º¸¸é ´ÙÀ½°ú °°´Ù.
µ¥ÀÌÅÍ
Àü¼Û
¸í·É
»ê¼ú
¿¬»ê
¸í·É
³í¸®
¿¬»ê
¹× shift ¸í·É
branch
¸í·É
Stack°ú
subroutine ¹×
system Á¦¾î ¸í·É
¶Ç Bit,
Byte, Word, Long word¿¡ µû¶ó ¸í·Éµµ ¾à°£¾¿ ´Þ¶óÁö¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù.
´ÙÀ½ ½Ã°£ºÎÅÍ´Â
ÀÌ
¼ø¼¿¡ µû¶ó ¾î¼Àºí¸®¾î¸¦
¹è¿ìµµ·Ï
ÇÏÀÚ.
´ÙÀ½Àº
¿¹Á¦ÀÌ´Ï
Àо°í À§¿¡¼ ¹è¿î
°ÍµéÀ»
Âü°íÇÏ¿© ºÐ¼®Çغ¸ÀÚ.
(¾ÕÂÊ
»ý·«)
north
equ
40h
; ¹æÇâÁ¤º¸
west
equ
0
east
equ
80h
south
equ
0c0h
CSEG
AT
8004H
; AD interrupt
ljmp
AD_SERVICE
CSEG
AT
800CH
; HSO interrupt
ljmp
HSO_SERVICE
CSEG
AT
8014H
; Software timer
interrupt
ljmp
SOFT_TIMER
;CSEG
AT
801CH
; extint
;
LJMP
EXTI_SERVICE
CSEG
AT
8030H
; Timer2 overflow
interrupt
ljmp
timer2_service
CSEG
AT
8200H
START:
LDB
IOC0, #00000000B ; all hsi unit is disable,
select P2.3, P2.5
LDB
IOC1, #01111010B ; HSO4, HSO5 enable,
select ACH7 as exint1 input,
; timer2
overflow interrupt enable
LDB
IOC2, #10010100B ; Fast mode AD enable,
timer2 normal increasing mode
LDB
WSR, #1
LDB
IOC3, #000000001B ; timer2 clock source
internal
CLRB
WSR
CLRB
IOPORT1
; port initialize
CLRB
IOPORT2
ldb
ax, #0ffh
; º®
Á¤º¸ ÃʱâÈ
clrb
ch
clrdl:
stb
ch, data_location[ax]
djnzw
ax, clrdl
EI
restart:
ldb
current_dir, #north ; set direction (forward,
absolute)
ldb
current_xy, #0
; set current coordinate (x, y = 0,
0)
ldb
target_xy, #44h ; set
destination
(µÚÂÊ»ý·«) |