版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
RCX手冊(cè)
目錄
L簡(jiǎn)介
2.H8/3292微型控制器
3.RCX:CPU、存儲(chǔ)器和輸入/輸出設(shè)備
3.1RCX的CPU
3.2RCX的存儲(chǔ)器
3.3RCX的輸入/輸出設(shè)備
3.3.1訪問(wèn)RCX的設(shè)備寄存器
3.3.2RCX中斷和中斷處理
3.3.3按鈕
3.3.4RCX輸入口和傳感器
3.3.5紅外發(fā)射/接收
3.3.6LCD顯示屏
3.3.7揚(yáng)聲器
3.3.8RCX輸出口和執(zhí)行器件
4.RCX預(yù)置程序(指出廠時(shí),ROM里預(yù)先燒好的程序)
5.與RCX預(yù)置程序通信
5.1請(qǐng)求/應(yīng)答協(xié)議
5.2字節(jié)協(xié)議
5.3位協(xié)議
5.4連接在RS232口的紅外發(fā)射/接收(發(fā)射塔)
5.5一個(gè)與RCX通信的用戶程序
6.RCX預(yù)置程序提供底層服務(wù)
6.1LCD子程序
7.為RCX編譯程序
7.1如何安裝交叉匯編器和交叉編譯器
7.2編譯匯編語(yǔ)言程序
7.3編譯C語(yǔ)言程序
8.程序下載
9.參考文獻(xiàn)
介紹
使用樂(lè)高M(jìn)indStorms機(jī)器人開(kāi)發(fā)系統(tǒng)您可以搭建一輛能避開(kāi)障礙走出迷宮的小車或
組裝一個(gè)能顯示最小值、最大值和平均值的數(shù)字溫度計(jì)。RCX是一個(gè)可編程控制
器,MindStorms系統(tǒng)的一個(gè)組件。RCX可裝在小車或數(shù)字式溫度計(jì)上來(lái)控制小車的行為和溫
度計(jì)的溫度采樣與測(cè)量。
RCX使用的微型控制器,是日立H8/3292系列的H8/300單片機(jī)。本質(zhì)上是單片機(jī)在執(zhí)行
控制程序,通過(guò)H8/3292的設(shè)備控制器來(lái)訪問(wèn)RCX的輸入/輸出設(shè)備如按鈕、揚(yáng)聲器,LCD
顯示屏。此外,傳感器如接觸傳感器或溫度傳感器可以連接到RCX輸入口,給控制程序提
供輸入值,然后控制程序再驅(qū)動(dòng)執(zhí)行器件如電機(jī)。交互過(guò)程:來(lái)自環(huán)境的刺激--小車碰到
障礙——可由傳感器如接觸傳感器感知,變換成輸入值。引起的反應(yīng)一小車轉(zhuǎn)向一控制
程序輸出值到執(zhí)行器件使電機(jī)完成轉(zhuǎn)向。
RCX配備有以下輸入/輸出設(shè)備:
輸入設(shè)備
四個(gè)標(biāo)有Run,OnOff,View,Prgm的按鈕
三個(gè)標(biāo)有1,2,3的輸入口
電量
定時(shí)器
紅外接收謂
輸出設(shè)備
顯示屏
揚(yáng)聲器
三個(gè)標(biāo)有A,B,C的輸出口
紅外發(fā)射器
RCX就是通過(guò)這些輸入/輸出設(shè)備和連接到RCX輸入/輸出口的傳感器/執(zhí)行器件與環(huán)境
交互。
可以使用的傳感器/執(zhí)行器件有:
傳感器應(yīng)用舉例
接觸傳感器遇到障礙后,在按鈕上產(chǎn)生一個(gè)信號(hào)
光電傳感器顏色分辨,檢測(cè)環(huán)境光亮度
角度傳感器輪子轉(zhuǎn)過(guò)的角度,軸的運(yùn)動(dòng)
溫度傳感器測(cè)量體溫,室外溫度
執(zhí)行器件應(yīng)用舉例
電機(jī)驅(qū)動(dòng)小車,電梯的升降
燈閃光,紅色報(bào)警光
聲音蜂聲
在主機(jī)上編寫好程序后,可通過(guò)串口下載到RCX中。程序可用不同的開(kāi)發(fā)環(huán)境來(lái)開(kāi)發(fā),
如LEGO提供的圖形化開(kāi)發(fā)工具:ROBOLAB,還有用VB來(lái)開(kāi)發(fā)程序的軟件開(kāi)發(fā)包(參見(jiàn)典
MindStorms),它可以下載低級(jí)的機(jī)器代碼。
這本手冊(cè)敘述UNIX主機(jī)上一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境。程序既可以用C語(yǔ)言也可用H8/300
的匯編語(yǔ)言來(lái)編寫,然后通過(guò)交叉匯編器和交叉編譯器生成H8/300的機(jī)器碼,通過(guò)由片內(nèi)
ROM常駐程序提供的一個(gè)簡(jiǎn)單協(xié)議下載到RCX中,常駐程序在上電和復(fù)位后就會(huì)自動(dòng)運(yùn)行。
下載的程序運(yùn)行后,RCX的預(yù)置程序提供基本的I/O服務(wù)(如訪問(wèn)LCD屏),這本手冊(cè)
同時(shí)也提供直接操作輸入/輸出設(shè)備的細(xì)節(jié),直接操作是通過(guò)與單片機(jī)的設(shè)備控制器和內(nèi)存
分配的協(xié)調(diào)應(yīng)用實(shí)現(xiàn)的。
這本手冊(cè)和UNIX編程環(huán)境可作為為RCX開(kāi)發(fā)簡(jiǎn)單程序的工具,也可作為開(kāi)發(fā)實(shí)時(shí)操作
系統(tǒng)的工具。
H8/3292微型控制器
RCX使用的是日立的H8/3292單片機(jī),屬于H8/3297系列。芯片具有計(jì)算機(jī)的三個(gè)主要
功能:H8/300微處理器、存儲(chǔ)器和輸入/輸出。它們通過(guò)芯片內(nèi)的地址/數(shù)據(jù)/控制總線連接
在一起。
H8/300CPU采用通用寄存器結(jié)構(gòu)。指令集包括暫存器-暫存器運(yùn)算和邏輯操作。尋址方
式包括大多數(shù)常見(jiàn)的尋址方式如寄存器直接尋址,寄存器間接尋址,程序計(jì)數(shù)器和存儲(chǔ)器間
接尋址。最大尋址空間是16位(64K),為程序和數(shù)據(jù)所共用。
芯片存儲(chǔ)器包括16K加密可編程ROM和512個(gè)字節(jié)的RAM。其中128字節(jié)片內(nèi)寄存
器用作與片內(nèi)的輸入/輸出電路的接口。存儲(chǔ)器空間的分配決定片內(nèi)存儲(chǔ)空間和外擴(kuò)空間的
如何與16位地址對(duì)應(yīng)??臻g分配與cpu的MD1和MDO引腳設(shè)置有關(guān),這兩個(gè)引腳決定處理
器的工作模式(共有1,2或3三種)。在所有模式下片內(nèi)RAM和片內(nèi)寄存器都使用相同的
地址。模式1和2,叫外擴(kuò)模式,這兩種模式允許通過(guò)片內(nèi)的地址/數(shù)據(jù)總線訪問(wèn)外擴(kuò)的空間。
模式3,稱單片模式、只有片內(nèi)ROM和RAM可以使用。當(dāng)使用外擴(kuò)存儲(chǔ)器時(shí),可以用外擴(kuò)邏
輯為其空間分配地址。
片內(nèi)輸入/輸出包括三種定時(shí)器(16位自由定時(shí)器、8位定時(shí)器和監(jiān)視跟蹤定時(shí)器
—watchdog),一個(gè)串行通信接口,A/D轉(zhuǎn)換和一些輸入/輸出口。定時(shí)器可以脫離外部電
路使用。串行通信接口可作為外部串口發(fā)射/接收的設(shè)備控制器。同樣,10位A/D轉(zhuǎn)換可作
為八個(gè)模擬通道的設(shè)備控制器。連接在A/D轉(zhuǎn)換8個(gè)引腳的外部模擬信號(hào)由內(nèi)部的采樣-保
持電路采樣后,轉(zhuǎn)換成10位的值。內(nèi)部模擬通道有單路和掃瞄兩種工作模式。
掃瞄模式允許多路通道連續(xù)轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果保存到不同的設(shè)備寄存器里。片內(nèi)輸
入/輸出口可和外部的輸入/輸出線相連,此時(shí)處理器就可從設(shè)備寄存器讀出8位輸入線上
的值。在沒(méi)有外部電路的情況下,按鈕可以和一個(gè)輸入引腳直接連接,并將其值讀入。當(dāng)
處理器向8位輸出口的設(shè)備寄存器寫值時(shí),其值可由輸出口輸出并直接驅(qū)動(dòng)外部電路如直
接驅(qū)動(dòng)發(fā)光二極管LEDo
片內(nèi)中斷控制器可響應(yīng)內(nèi)部和外部的中斷源。片內(nèi)輸入/輸出事件對(duì)應(yīng)內(nèi)部中斷源。每
個(gè)事件(如A/D轉(zhuǎn)換結(jié)束、定時(shí)器溢出)對(duì)應(yīng)一個(gè)中斷向量。外部事件對(duì)應(yīng)外部中斷源。所
有中斷都可以被屏蔽或開(kāi)啟(除了NMI——不可屏蔽中斷)。
3.RCX:CPU、存儲(chǔ)器和輸入/輸出設(shè)備
RCX是一個(gè)具有計(jì)算機(jī)三個(gè)主要功能(處理器、存儲(chǔ)器,和輸入/輸出設(shè)備)的可編程積
木塊。
從物理上看,RCX的內(nèi)部電路包括一塊印制電路板和9V電源。H8/3292單片微型控制
器,32K的RAM,電機(jī)控制芯片,LCD屏和LCD控制器芯片,揚(yáng)聲器,四個(gè)按鈕等通過(guò)電路
板連接在一起。RCX的拆卸圖以及詳細(xì)元件清單請(qǐng)參考RCXInternals。
從邏輯結(jié)構(gòu)上說(shuō),RCX控制器可看作一臺(tái)低端個(gè)人計(jì)算機(jī),它通過(guò)一條總線把處理器、
存儲(chǔ)器和輸入/輸出設(shè)備連接起來(lái)。輸入/輸出口都分配了確定的地址。每個(gè)設(shè)備包括兩部
分:一部分是通過(guò)總線與設(shè)備連接的接口電路,另一部分是組成設(shè)備的機(jī)械裝置和電路元
件。按鈕、LCD屏、揚(yáng)聲器,傳感器和執(zhí)行器件都屬于設(shè)備。接口部份通常專指設(shè)備控制器,
當(dāng)然,設(shè)備與接口并沒(méi)有明顯的界線。
當(dāng)對(duì)RCX編程時(shí),主要考慮它的邏輯結(jié)構(gòu)。我們將從程序員的角度來(lái)描述它的邏輯結(jié)
構(gòu)。
3.1RCX的CPU
RCX的處理器是H8/300CPU。工作頻率16兆赫。CPU有八個(gè)通用16位寄存器(r0-r7,
r7作為堆棧指針(sp)使用),16位程序寄存器(pc),和一個(gè)8位狀態(tài)寄存器(cc)。狀態(tài)
寄存器顯示算術(shù)狀態(tài)(如進(jìn)位,溢此和零)和中斷屏蔽與使能。指令集包括暫存器-暫存器
運(yùn)算,如16位加法、16位減法、8位乘法和16位/8位除法),及常見(jiàn)的邏輯操作如異
或,或,與,非,移位,位操作,子程序的調(diào)用與返回和使RCX進(jìn)入節(jié)電模式的sleep指令。數(shù)
據(jù)類型包括位、4位BCD碼,字節(jié),和字(2個(gè)字節(jié))。尋址方式有:
尋址模式匯編語(yǔ)言
寄存器直接尋址Rn
寄存器間接尋址@rn
長(zhǎng)轉(zhuǎn)移尋址@(d:16,rn)
增量后寄存器間接尋址@rn+
增量前寄存器間接尋址@rn
絕對(duì)地址尋址(8或16位)@aa:8,@aa:16
立即尋址(8或16位)#aa:8,#aa:16
pc指針尋址@(d:pc)
存儲(chǔ)器間接尋址@@aa:8
3.2RCX存儲(chǔ)器
RCX的H8/3292芯片工作在摸過(guò)2下。模式的值可通過(guò)訪問(wèn)位于地址0xffc5的模式控
制寄存器而得到。在模式2下,片內(nèi)ROM、片內(nèi)RAM,32K外擴(kuò)RAM統(tǒng)一編址。
空間分配由工作模式和外部地址編碼共同決定。具體為:
地址范圍存儲(chǔ)器類型內(nèi)容
0x000-Ox3fff片內(nèi)加密可編程ROMH8/3292中斷向量,RCX預(yù)置程序
0x8000-Oxefff片外RAM程序/數(shù)據(jù)
OxfOOO片外寄存器RCX輸出口設(shè)備寄存器
0xfd80-Oxff7f片內(nèi)RAM片X中斷向量/程序/數(shù)據(jù)
0xff88-Oxffff片內(nèi)寄存器一^8/3292設(shè)備寄存器
3.3RCX輸入/輸出設(shè)備
RCX輸入/輸出設(shè)備包括兩部分:輸入/輸出設(shè)備控制器和輸入/輸出設(shè)備本身。從內(nèi)部
看到的是設(shè)備控制器,從外面看到的是設(shè)備本身。比如四個(gè)按鈕,從內(nèi)部來(lái)看,是兩個(gè)具有
確定地址的輸入/輸出口;從外面看,是RCX外殼的四個(gè)塑料按鈕。因?yàn)槲覀兪菑木幊痰慕?/p>
度看設(shè)備,所以將主要描述RCX設(shè)備控制器部分。
運(yùn)行在RCXCPU上的程序通過(guò)設(shè)備寄存器和中斷來(lái)與設(shè)備通信和保持同步。通信和同
步的接口是由RCX設(shè)備控制器提供的設(shè)備寄存器和RCX中斷。
大多數(shù)設(shè)備控制器是基于H8/3292輸入/輸出元件的。H8/3292輸入/輸出元件的地址
分配寄存器是設(shè)備寄存器的一部分。同樣輸入/輸出中斷源也是RCX設(shè)備中斷的一部分。RCX
輸出口是唯一的例外。RCX輸出口控制器并不使用H8/3292輸入/輸出元件也就不使用片內(nèi)
寄存器。因此,RCX輸出口的設(shè)備寄存器不在片內(nèi)寄存器地址范圍內(nèi)。
基于H8/3292元件的設(shè)備控制器如下:
RCX設(shè)備控
設(shè)備寄存器中斷
制
1/0port4和7的設(shè)備寄存器。RUN連接在IRQO,OnOff在
按鈕
IRQO,IRQ1設(shè)備寄存器IRQ1
A/D轉(zhuǎn)換和1/0port6的設(shè)備寄存器。有三條線與
輸入口A/D中斷
port6相連
電量A/D轉(zhuǎn)換設(shè)備寄存器A/D中斷
定時(shí)器定時(shí)器設(shè)備寄存器定時(shí)器中斷
紅外發(fā)射/SCI設(shè)備寄存器,1/0port4和定時(shí)器loport4與
SCI中斷,定時(shí)器1中斷
接收一條線相連
(LCD1/0port6設(shè)備寄存器。使用port6的兩條線沒(méi)有中斷
1/0port6設(shè)備寄存器和定時(shí)器0o使用port6的
揚(yáng)聲器定時(shí)器。中斷
一條線
輸出口設(shè)備寄存器在外擴(kuò)地址空間沒(méi)有中斷
3.3.1訪問(wèn)RCX的設(shè)備寄存器
RCX設(shè)備寄存器的值可由匯編語(yǔ)言或C語(yǔ)言的位操作來(lái)訪問(wèn)。我們將用C語(yǔ)言來(lái)解釋某
一位是如何被清除或置位的。為了方便,我們定義一些變量:
typedefunsignedcharbyte;
typedefunsignedshortintword;
/*A/D轉(zhuǎn)換*/
/*A/D控制/狀態(tài)寄存器*/
#defineADCSR*((volatilebyte*)0xffe8)
#defineADF(1?7)/*A/DFlag,bit7*/
#defineADST(1?5)/*A/DStart,bit5*/
/*A/D數(shù)據(jù)寄存器A*/
#defineADDRA*((volatileword*)OxffeO)
第一個(gè)預(yù)定義用來(lái)把地址常量變成一個(gè)指向字節(jié)型地址的指針。*(...)表示取地址里的內(nèi)
容,動(dòng)態(tài)的限制可防止設(shè)備寄存器的值在改變前被讀出。可使用這些定義在通道。啟動(dòng)A/D
轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后可從數(shù)據(jù)寄存器A讀出10位的數(shù)據(jù):
ADCSR=0;
ADCSR|=ADST;/*起動(dòng)轉(zhuǎn)換*/
while(!(ADCSR&ADF));/*等待轉(zhuǎn)換結(jié)束*/
ADCSR&="ADF;/*讀寄存器,清除ADF*/
Port3=((ADDRA?6)&0x03ff);/*移位后成為0-1023的整數(shù)*/
3.3.2RCX中斷和中斷處理
在H8/3292向量表里第一個(gè)向量的地址是0x0000,最后一個(gè)在地址0x0048。向量表
的入口由片內(nèi)ROM管理。每一個(gè)入口包含一個(gè)指向一個(gè)片內(nèi)ROM中斷調(diào)度程序的地址。一
個(gè)中斷向量對(duì)應(yīng)一個(gè)調(diào)度程序。對(duì)應(yīng)于每一個(gè)中斷調(diào)度程序,在片內(nèi)RAM都有一個(gè)用來(lái)指
向中斷服務(wù)程序地址的入口。這些人口保存在一張表格里。表格也可用來(lái)存放本來(lái)由
H8/3292的硬件處理的中斷程序。這樣,片內(nèi)ROM的內(nèi)容和RCX中斷向量就把H8/3292的硬
件中斷機(jī)制變成了RCX的中斷機(jī)制。描述如下(對(duì)比):
H8/3292中斷向量地址:中斷調(diào)度程序地址
H8/3292中斷調(diào)度程序:pushr6
mov@RCXinterruptvectoraddress,r6
jsr@r6
popr6
rte
RCX中斷向量地址:RCX中斷管理程序地址
RCX中斷管理程序:保存寄存器的值(壓棧)
處理中斷
取出寄存器的值(出棧)
(rts)返回
堆棧的內(nèi)容由H8/3292的中斷機(jī)制和中斷調(diào)度程序確定。具體如下:
地址內(nèi)容
sp返回到調(diào)度程序
sp-2r6寄存器的值
sp-4cc寄存器的值
sp-6pc指針的值
此外,在RCX中斷管理程序?qū)c的中斷位清除并執(zhí)行rte指令前,中斷管理程序不會(huì)
響應(yīng)新的中斷。因?yàn)镽CX沒(méi)有使用不可屏蔽中斷,所以當(dāng)中斷位沒(méi)有清除前,RCX中斷管理程
序是不會(huì)被打斷的。
RCX中斷管理程序可用匯編語(yǔ)言和C語(yǔ)言編程。我們將使用C語(yǔ)言說(shuō)明如何為RUN按鈕
寫一個(gè)中斷管理程序。為了簡(jiǎn)單做如下定義:
ttdefineInt_Handler(RCX_Vector_Addr)(*(void(**)(void))(RCX_Vector_Addr))
ttdefineIRQ0_Addr0xfd94/*RCXIRQOInterruptVectorAddress*/
^defineRun_Button_Interrupt_HandlerInt_Handler(IRQ0_Addr)
定義把RCX_Vector_Addr變成一個(gè)指向沒(méi)有參數(shù)和返回值子程序的指針。最后一個(gè)定
義將Runlnt用作RUN按鈕的中斷管理程序(Run_Button_Interrupt_Handler=Runlnt);
Runlnt定義如下:
intl6Count;
voidRunlnt(void)
asm("push
push
push
push
push
push
”);
/*Run按一下,Count增加1*/
Count=Count+1;
asm("popr5
POPr4
popr3
popr2
poprl
POPrO
”);
)
為了打開(kāi)RUN按鈕的中斷和定義觸發(fā)中斷的事件,需要訪問(wèn)IRQ設(shè)備寄存器:
/*IRQSenseControlRegisterandIRQEnableRegister*/
#defineISCRaddr0xffc6
#definelERaddr0xffc7
^defineISCR?((byte?)ISCRaddr)
#defineIER*((byte*)lERaddr)
為了使RUN按鈕的下降沿觸發(fā)一個(gè)中斷,并打開(kāi)按鈕的中斷,設(shè)備寄存器應(yīng)該如下初始
化:
ISCR=1;IER=1;
3.3.3按鈕
在RCX的上邊有四個(gè)按鈕:VIEW,ON/OFF,Prgm和RUN。
四個(gè)按鈕
四個(gè)按鈕連接在H8/3292輸入/輸出口的四條輸入線上。其中兩個(gè)按鈕可觸發(fā)外部中
斷。具體為:
按鈕輸入口地址第幾位中斷
RUNport40xffb7第2位IRQ0
OnOffport40xffb7第1位IRQ1
VIEWport?Oxffbe第6位沒(méi)有中斷
Prgmport?Oxffbe第7位沒(méi)有中斷
按鈕按下時(shí)值為0,按鈕松開(kāi)時(shí)值為1。
通過(guò)位操作可以直接從設(shè)備寄存器獲取各個(gè)按鈕的值。我們將用C語(yǔ)言說(shuō)明如何使用
按鈕的輸入。我們定義以下符號(hào)簡(jiǎn)化這個(gè)過(guò)程。比如要讀RUN按鈕的狀態(tài):
#defineport4_addr0xffb7
#defineport4?((volatilebyte*)port4_addr)
#defineRun!(port4&(1?2))
最后一個(gè)定義可使RUN作為表達(dá)式來(lái)使用。RUN的值可用來(lái)停止一個(gè)循環(huán):
while(!Run){
)
3.3.4RCX輸入口和傳感器
可連接傳感器的三個(gè)輸入口(標(biāo)有1,2和3):
三個(gè)輸入口
傳感器有兩種類型:被動(dòng)和主動(dòng)。被動(dòng)傳感器有接觸傳感器和溫度傳感器。主動(dòng)傳感
器有光電和角度傳感器。兩種類型的編程方法是不同的。
lighttemperature
,touch
withrenx>veableleads
/touch
五個(gè)標(biāo)準(zhǔn)LEGO傳感器
傳感器的正確使用首先需要正確理解傳感器的電路和輸入口。詳細(xì)的描述請(qǐng)參考輸入
口和傳感器Internals。此外,也需要如何從傳感器取值的知識(shí)。具體描述如下:
從一個(gè)被動(dòng)傳感器取值,只需使用A/D轉(zhuǎn)換。從一個(gè)主動(dòng)傳感器如光電傳感器還必須
點(diǎn)亮LED二極管,可由輸出線I/Oport6的其中一路提供。角度傳感器也包含LED二極管,
使用時(shí)需點(diǎn)亮。它們包裝在一塊藍(lán)色LEGO積木塊里,從外部并不能看見(jiàn)。
連接在A/D轉(zhuǎn)換通道上的三個(gè)RCX輸入口和I/Oport6輸出線如下:
輸入口A/D通道輸出線
T模擬輸入引腳2(AN2)|port6,第2位
2模擬輸入引腳1(ANDpcrt6?第1位
3"模擬輸入引腳0(ANO)port6,第。位
兩種類型傳感器的輸入值都須通過(guò)A/D轉(zhuǎn)換。A/D轉(zhuǎn)換的設(shè)備寄存器用來(lái)初始化,檢測(cè)
轉(zhuǎn)換的結(jié)束和訪問(wèn)10位轉(zhuǎn)換結(jié)果。A/D控制/狀態(tài)寄存器用來(lái)開(kāi)始轉(zhuǎn)換和標(biāo)志轉(zhuǎn)換的結(jié)束。
轉(zhuǎn)換結(jié)束可觸發(fā)A/D結(jié)束中斷。A/D數(shù)據(jù)寄存器存放轉(zhuǎn)換的結(jié)果,其值為16位的高10位。
數(shù)據(jù)寄存器與A/D通道連接,轉(zhuǎn)換的值可以從以下地址讀?。?/p>
輸入口A/D通道寄存器簡(jiǎn)稱地址
1AN2A/D數(shù)據(jù)寄存器AADDRC0xffe4
2AN1A/D數(shù)據(jù)寄存器BADDRB0xffe2
3AN0A/D數(shù)據(jù)寄存器CADDRAOxffeO
A/D控制/狀態(tài)寄存器(ADCSR)是位于地址0xffe8的8位設(shè)備寄存器。具體如下:
位名字簡(jiǎn)稱意思
7A/D結(jié)束標(biāo)志ADF轉(zhuǎn)換結(jié)束后置位,可由程序清除
6A/D結(jié)束中斷使能ADIE0:中斷屏蔽;1:中斷使能
5A/D開(kāi)始ADST0:轉(zhuǎn)換停止;1:開(kāi)始轉(zhuǎn)換
4掃瞄模式SCAN0:?jiǎn)温纺J?1:掃瞄模式
3|時(shí)鐘選擇CKS0:慢速轉(zhuǎn)換;1:快速轉(zhuǎn)換
2到0通道選擇CH2toCHO選擇通道
單路模式下,通道選擇位用來(lái)選擇三個(gè)輸入口中的一路。也可以使用多路(掃瞄模式):
輸入口CH2到CHO模式
010單路
2001單路
000單路
1,2,3010掃瞄
頭文件皿L含有一個(gè)A/D轉(zhuǎn)換的簡(jiǎn)單例子。頭文件InputPorts,h包含一些被動(dòng)和主
動(dòng)傳感器的例子。在RCX編程,第一節(jié)解釋了光電傳感器如何識(shí)別不同的顏色。
3.3.5紅外發(fā)射/接收
RCX使用IR(紅外光)與主機(jī)或其他RCX通信。
紅外發(fā)射
IR發(fā)射/接收基于片內(nèi)串行通信接口(SCI)。SCI是紅外通信的一個(gè)設(shè)備控制器。信息
以38.5千赫的紅外光作為載波來(lái)傳送:0代表紅外光開(kāi)啟,1代表關(guān)閉。38.5千赫的載波頻
率是由定時(shí)器1提供的。紅外傳輸有短和長(zhǎng)兩個(gè)模式,port4的引腳。決定傳輸模式:1為
短距離:0為長(zhǎng)距離.紅外光不僅會(huì)由其它IR接收器接收也會(huì)由正在發(fā)射紅外光的RCX接
收。這意味著RCX有檢測(cè)沖突的機(jī)制。每?jī)晌粩?shù)據(jù)的間隔時(shí)間與SCI選擇的波特率有關(guān)。
2400位/每分的波特率間隔時(shí)間是417微秒=1位/2400位/每分。SCI的設(shè)備寄存器決定
串行通信的通信格式。用C語(yǔ)言所作的一個(gè)設(shè)備寄存器的聲明包含在模塊SCLh中。
IR發(fā)射/接收有程序驅(qū)動(dòng)和中斷驅(qū)動(dòng)兩種方式,具體請(qǐng)參考&fa。在RCX編程,第3
芭有一個(gè)例子可供參考
3.3.6LCD顯示屏
LCD顯示一個(gè)LEGO人在走動(dòng)
LCD屏幕包含43個(gè)元素,一個(gè)元素可以是一個(gè)小點(diǎn)、箭頭或一個(gè)小LEGO人的腿。每
個(gè)元素都是單獨(dú)控制的,可讓它顯示或隱藏。這是通過(guò)LCD控制器實(shí)現(xiàn)的。有兩根串口線
與LCD控制器通信。這兩根線連接在I/Oport6的第5位和第6位。RCX就是通過(guò)對(duì)這兩根
線的讀寫來(lái)控制LCD的。RCX預(yù)置程序通過(guò)一個(gè)協(xié)議實(shí)現(xiàn)對(duì)LCD的高級(jí)操作:LCD每一個(gè)元
素的一位值暫存在儲(chǔ)器器的緩沖區(qū)里;RCX用戶程序向緩沖區(qū)寫值,調(diào)用預(yù)置程序,刷新,然
后屏幕上的元素就根據(jù)緩沖區(qū)里的值顯示或隱藏。具體請(qǐng)參考:RCXInternalso
3.3.7揚(yáng)聲器
揚(yáng)聲器由I/Oport6的第4位控制。在揚(yáng)聲器使用前,I/Oport6的數(shù)據(jù)方向寄存器應(yīng)
該如下設(shè)置:
^defineP6DDR?((volatilebyte*)0xffb9)
#defineP6DDR_R0M?((volatilebyte*)0xfd85)
#defineP6DR?((volatilebyte*)Oxffbb)
#definebit4(1?4)
#defineSpeakerHighP6DR|=bit4
#defineSpeakerLowP6DR&=~bit4
/*把port6的第4位初始化成輸出*/
P6DDR_R0M|=bit4;P6DDR=P6DDR_R0M;
要發(fā)出聲音,需要以適當(dāng)?shù)拈g隔時(shí)間對(duì)port6的第4位寫值。如發(fā)出500赫的聲音:
SpeakerHigh;
Waitonemsec;
SpeakerLow;
Waitonemsec;
port6的第4位也可由定時(shí)器0控制。
3.3.8RCX輸出口和執(zhí)行器件
RCX有標(biāo)有A、B和C的三個(gè)輸出口。各種各樣的執(zhí)行器件可連接到輸出口。如電機(jī),
燈和發(fā)聲器件。一個(gè)輸出口可驅(qū)動(dòng)一個(gè)或多個(gè)執(zhí)行器件。如電機(jī)和燈可接在一個(gè)輸出口上,
電機(jī)轉(zhuǎn)動(dòng)時(shí)燈就會(huì)跟著一起亮。
三個(gè)RCX輸出口A、B和C
輸出口由9V電源產(chǎn)生的電流驅(qū)動(dòng)。流經(jīng)執(zhí)行器件的電流狀態(tài)由位于地址OxfOOO的設(shè)
備寄存器的值決定。每一個(gè)輸出口由8位設(shè)備寄存器中的兩位控制。
輸出口ABC
位第7、6位第3、2位第1、0位
這些輸出口的控制位的值可在設(shè)備寄存器地址獲取。用如下c語(yǔ)句可將A口的狀態(tài)設(shè)
成2(見(jiàn)下表的四種狀態(tài)):
#defineOutputPorts*((volatilebyte*)OxfOOO):
^defineAmaskOxcO
bytetemp;
temp=OutputPorts;
temp&=~Amask;
temp|=(2?6);
OutputPorts=temp;
兩位值(有4種組合)對(duì)應(yīng)于電流的四種不同模式。01和10表示電流的兩種流動(dòng)方向。
00將執(zhí)行器件從電源斷開(kāi)。11將執(zhí)行器件的兩個(gè)端子連接到電源的同極性。具體請(qǐng)參考
InternalsofOutputPortsandActuators
為了更容易地控制執(zhí)行器件,我們用c語(yǔ)言舉例如下(控制A口):
^defineFloat0
ttdefineOnPos1
#defineOnNeg2
ttdefineBrake3
voidPortA(bytestate)
(
bytetemp;
temp=OutputPorts;
temp&=~Amask;
temp|=(state?6);
OutputPorts=temp;
)
經(jīng)過(guò)以上設(shè)置,四種狀態(tài)(Float,OnPos,OnNeg,andBrake)分別對(duì)應(yīng)0、1、2、3。
請(qǐng)參考OutputPorts.h。
執(zhí)行器件在四種狀態(tài)下的具體表現(xiàn)見(jiàn)下表:
閃
輸出位電機(jī)燈聲音
光
00自由運(yùn)行沒(méi)有光沒(méi)有光沒(méi)有聲音
01在某一方向轉(zhuǎn)動(dòng)有光閃爍發(fā)聲
10在另一方向轉(zhuǎn)動(dòng)有光閃爍發(fā)聲
11剎車沒(méi)有光沒(méi)有光沒(méi)有聲音
對(duì)于有兩個(gè)電機(jī)連接在A口和C口上的一輛小車(我們?nèi)匀灰訤loat,OnPos,OnNeg,
andBrake表示自由運(yùn)行,前進(jìn),后退,剎車)。狀態(tài)OnPos和OnNeg將根據(jù)輸出口和電
機(jī)導(dǎo)線的連接使電機(jī)順時(shí)針或逆時(shí)針旋轉(zhuǎn)。從狀態(tài)OnPos或OnNeg變到Float和Brake對(duì)
正在運(yùn)動(dòng)的小車會(huì)有很大的影響:Brake會(huì)使小車立刻停下。Float允許電機(jī)自由地轉(zhuǎn)動(dòng)并
逐漸停止。
電機(jī)連接在A口和C口
宏P(guān)ortA、PortB和PortC允許我們用物匏動(dòng)來(lái)控制輸出口。用下面的語(yǔ)句可使連接
在A口上的燈閃爍:
PortA(OnPos);
Waitonemsec;
PortA(Float);
Waitonemsec;
這些宏也可以控制小車的運(yùn)動(dòng)。如:
/*如實(shí)際運(yùn)動(dòng)方向與程序不符,請(qǐng)改變電機(jī)的連接方向*/
^defineAbackOnNeg
#defineAforwardOnPos
#defineCbackOnNeg
ttdefineCforwardOnPos
voidCarCoast(void)
(
PortA(Float);PortC(Float);
}
voidCarBrake(void)
(
PortA(Brake);PortC(Brake);
)
voidCarGoForward(void)
PortA(Aforward);PortC(Cforward);
)
voidCarGoBackward(void)
(
PortA(Aback);PortC(Cback);
}
voidCarSpinClockwise(void)
(
PortA(Aforward);PortC(Cback);
}
voidCarSpinCounterClockwise(void)
(
PortA(Aback);PortC(Cforward);
輸出狀態(tài)以足夠快的速度改變,如以1毫秒的間隔,如果是燈,它的亮度就沒(méi)有一直供
電那么亮。這叫做PWM控制。每一個(gè)供電脈沖叫作脈沖的篦蜃控制脈沖寬度和脈沖的形
式就能控制傳遞到執(zhí)行器件的能量。我們可用H8/3292的定時(shí)器TO產(chǎn)生的定時(shí)器中斷實(shí)現(xiàn)
對(duì)輸出口的PWM控制(時(shí)間間隔為1毫秒)。這些中斷可用來(lái)調(diào)用預(yù)先設(shè)好占空比的子程
序。一個(gè)PWM控制A口和C口的例子見(jiàn)MotorControl.h,共有16個(gè)能級(jí)可供使用。C語(yǔ)言
的例子見(jiàn)RCX編程,第2節(jié)。
4.RCX預(yù)置程序(指出廠時(shí),ROM里預(yù)先燒好的程序)
當(dāng)RCX上電或復(fù)位后,ROM里的預(yù)置程序就開(kāi)始運(yùn)行并控制RCX。此時(shí)通過(guò)紅外發(fā)射/
接收,其它計(jì)算機(jī)就可與RCX通信了。預(yù)置程序可提供一個(gè)簡(jiǎn)單協(xié)議從其它計(jì)算機(jī)下載用
戶程序到RCX中。當(dāng)程序下載后,可由預(yù)置程序啟動(dòng)。用戶程序運(yùn)行時(shí),預(yù)置程序提供對(duì)RCX
輸入/輸出設(shè)備的訪問(wèn)等服務(wù)。
5.與RCX預(yù)置程序的通信
預(yù)置程序通過(guò)一個(gè)簡(jiǎn)單的請(qǐng)求/應(yīng)答協(xié)議與其它計(jì)算機(jī)通信:計(jì)算機(jī)送出請(qǐng)求;預(yù)置程
序響應(yīng)請(qǐng)求并發(fā)回應(yīng)答。應(yīng)答可能包含數(shù)據(jù)如版本號(hào),但應(yīng)答常常用來(lái)表明請(qǐng)求已滿足或通
信一切正常。
5.1請(qǐng)求/應(yīng)答協(xié)議
可發(fā)送的請(qǐng)求有:
Alive:驗(yàn)證預(yù)置程序是否運(yùn)行并且RCX是否與電腦連接。
GetVersions:預(yù)置程序和固件版本號(hào)。
EnterDownloadMode:如果有程序運(yùn)行將被停止。預(yù)置程序進(jìn)入下載模式
BeginDownload:預(yù)置程序?yàn)橄螺d程序做準(zhǔn)備。
DownloadBlock:下載字節(jié)塊到RCX存儲(chǔ)器。
RunProgram:運(yùn)行下載的程序。只有下載的程序含有"Doyoubyte,whenIknock?”程序
才會(huì)被執(zhí)行。
每一個(gè)請(qǐng)求/應(yīng)答都是作為數(shù)據(jù)幀發(fā)送的。數(shù)據(jù)幀包含請(qǐng)求/應(yīng)答、幀頭、幀尾:
數(shù)據(jù)幀:幀頭請(qǐng)求/應(yīng)答幀尾
在這里,幀頭二0x55Oxff;請(qǐng)求/應(yīng)答二字節(jié)序列;幀尾=校驗(yàn)和。校驗(yàn)和是請(qǐng)求/應(yīng)答的最
低有效字節(jié)。
請(qǐng)求是一個(gè)字節(jié)序列。第一個(gè)字節(jié)是請(qǐng)求代碼,接下來(lái)的字節(jié)包含請(qǐng)求數(shù)據(jù)。應(yīng)答有一
個(gè)相似的結(jié)構(gòu),第一個(gè)字節(jié)是應(yīng)答代碼,接下來(lái)的字節(jié)是應(yīng)答數(shù)據(jù)。應(yīng)答代碼是請(qǐng)求代碼
的補(bǔ)碼。每一個(gè)請(qǐng)求有兩個(gè)請(qǐng)求代碼,區(qū)別是兩個(gè)代碼的第4位的值不同。這一位是順序控
制位:預(yù)置程序只執(zhí)行相同請(qǐng)求代碼中的第一個(gè),給第二個(gè)請(qǐng)求及以后的發(fā)送的應(yīng)答其效果
是相同的。所以為了使同樣的請(qǐng)求連續(xù)執(zhí)行兩次,就需要給順序控制位不同的值。
下面是請(qǐng)求/應(yīng)答的一個(gè)詳細(xì)描述。
應(yīng)答代
請(qǐng)求請(qǐng)求代碼請(qǐng)求數(shù)據(jù)應(yīng)答數(shù)據(jù)
碼
Live10/18無(wú)ef/e7無(wú)
GetVersions15/ldKeyea/e2程序、固件版本
EnterDownloadMode65/6dKey9a/92無(wú)
程序入口、校驗(yàn)和、
BeginDownload75/7d8a/82結(jié)果
零
數(shù)據(jù)包號(hào)碼,長(zhǎng)度,
DownloadBlock45/4d數(shù)據(jù)包,數(shù)據(jù)包校驗(yàn)ba/b2結(jié)果
和
RunPrograma5/adRunKey5a/52文本
Key:五個(gè)字節(jié)表示的十進(jìn)制數(shù)1,3,5,7,11.Key可防止一個(gè)正在運(yùn)行的程序被非法
停止。
ROMVersion:BCD碼表示的ROM預(yù)置程序的版本號(hào)。
ProgramVersion:BCD碼表示的固件的版本號(hào)。沒(méi)有固件時(shí),BCD碼是0。
ProgramEntryPoint:兩字節(jié)表示的16位地址。這是用戶程序下載的地址。
ProgramChecksum:兩字節(jié)表示的16位無(wú)符號(hào)整型。已下載程序的字節(jié)數(shù)。
Zero:填充0o
BlockSequenceNumber:兩字節(jié)表示的數(shù)據(jù)包序列號(hào)。從1開(kāi)始,每接收一個(gè)加L0表示
請(qǐng)求結(jié)束。
BlockLength:下一個(gè)DataBlock的字節(jié)數(shù)。用兩字節(jié)16位無(wú)符號(hào)整型表示。
DataBlock:數(shù)據(jù)包;長(zhǎng)度為BlockLength的所定義的長(zhǎng)度。
BlockChecksum:最新的DataBlock的校驗(yàn)和。
RunKey:五個(gè)ASCH值76,69,71,79,174表示的五個(gè)字符“LEGO?"。
Text:26個(gè)ASCII值表示的一條語(yǔ)句"Justabitoftheblock!*<.
Result:一個(gè)字節(jié)。0表示通信正常。非零表示發(fā)生了錯(cuò)誤。
錯(cuò)誤有以下幾種:
1:空間不足
2:格式不正確
3:數(shù)據(jù)包校驗(yàn)和錯(cuò)誤
4:程序校驗(yàn)和錯(cuò)誤
6:未進(jìn)入下載模式
5.2字節(jié)協(xié)議
請(qǐng)求/應(yīng)答作為字節(jié)組成的數(shù)據(jù)包在計(jì)算機(jī)和RCX之間的一條串行通信線間傳送。這條
通信線包括兩個(gè)紅外發(fā)射/接收設(shè)備,一個(gè)通過(guò)RS232通信端口連接到計(jì)算機(jī),另一接入RCX。
波特率是2400,即每秒傳送2400位。為標(biāo)記每個(gè)字節(jié)的開(kāi)始和結(jié)束,字節(jié)含有一個(gè)起始位
和結(jié)束位,同時(shí)增加一位奇偶位,保證第9位是奇數(shù)。因此每一個(gè)字節(jié)作為11位來(lái)發(fā)送。
字節(jié)除了第一個(gè),如0x55,都被作為兩個(gè)字節(jié)發(fā)送:字節(jié)本身和它的補(bǔ)碼。結(jié)果是每一個(gè)數(shù)
據(jù)包都有相等的0位和1位(幀頭0x55同樣有相等的。位與1位)。這可使紅外接收器消除
周圍光線造成的影響。除了第一個(gè)字節(jié),其他都是作為22[2*(起始位+一個(gè)字節(jié)+奇偶位+
結(jié)束位)位發(fā)送的。波特率為2400時(shí),需時(shí)9亳秒。
5.3位協(xié)議
一串由0,1組成的數(shù)據(jù)以2400位/每分的速率傳輸。傳。時(shí),紅外光開(kāi)啟,傳1時(shí),
紅外光關(guān)閉。紅外光的頻率是38kHz。傳輸一位的時(shí)間是417useco
5.4與RS232連接的紅外發(fā)射/接收(指發(fā)射塔)
發(fā)射塔將電腦要發(fā)送的數(shù)據(jù)發(fā)出,同時(shí)接收來(lái)自RCX的數(shù)據(jù)包。
5.5一個(gè)和預(yù)置程序通信的用戶程序
一個(gè)簡(jiǎn)單的程序:RCXRequestReply.c(需預(yù)先編譯)可用來(lái)在UNIX主機(jī)和RCX預(yù)
置程序之間通信。紅外發(fā)射/接收應(yīng)該連接到一個(gè)串口并將串口名賦給DEFAULT_RCX_IR。也
可以使用環(huán)境變量RCX_IR代替缺省設(shè)置。
用戶程序向RCX預(yù)置程序發(fā)出請(qǐng)求(十六進(jìn)制表示的字節(jié)序列),然后等待應(yīng)答。一
會(huì)兒,可得到一個(gè)正確應(yīng)答或是發(fā)生錯(cuò)誤。接著用戶程序以十六進(jìn)制表示的字節(jié)序列輸出
正確的應(yīng)答或發(fā)生錯(cuò)誤。
為了檢查和RCX的連接,我們使用如下命令:
RCX_Request_Reply10
0000:ef
發(fā)送Alive(代碼10)請(qǐng)求,應(yīng)答是ef,表明通信正常。
如下可獲得程序的版本號(hào):
RCX_Request_Rep1y151357b
0000:ea0003000100000000
預(yù)置程序的版本是3.1且沒(méi)有固件。
現(xiàn)在我們要下載和運(yùn)行下面一個(gè)簡(jiǎn)單的匯編語(yǔ)言程序。請(qǐng)注意"D。youbyte,whenI
knock?”這條語(yǔ)句是如何使用的。
.section.text
.align1
.global_start
_start:
mov.w00,rO
jsr@r0
.section.data
.string“Doyoubyte,whenIknock?*
.end
首先把它變成16進(jìn)制表示的程序
mov.w@0,rO6b000000
jsr@r05d00
Do446f20
you796f7520
byte,627974652c20
when7768656e20
I4920
knock?6b6e6f636b3f
然后我們需要計(jì)算Programchecksum和BlockChecksumo
如下下載程序:
EnterDownloadMode:
RCX_Request_Reply651357b
0000:9a
BeginDownload,ProgramEntryPoint=8000,ProgramChecksum=09a8,Zero=0:
RCX_Request_Reply750080a80900
0000:8a00
DownloadBlock,BlockSequenceNamber=0,BlockLength=0022,DataBlock=6b00...
3f0000,BlockChecksum=a8:
RCX_Request_Rep1y4d000022006b00....3f0000a8
0000:b200
RunProgram,RunKey=4c45474fae(hex):
RCX_Request_Replya54c45474fae
0000:5a4a757374206120626974206f666620
0010:74686520626c6f636b21
應(yīng)答包含用十六進(jìn)制表示的"Justabitofftheblock!”語(yǔ)句。表明一切正常并且程
序正確運(yùn)行了。一會(huì)兒,程序執(zhí)行兩條指令跳轉(zhuǎn)到復(fù)位地址,將控制權(quán)還給預(yù)置程序。
6.使用RCX預(yù)置程序提供的底層服務(wù)
用戶程序可使用由預(yù)置程序提供的服務(wù),如對(duì)LCD屏幕的高級(jí)操作。在這個(gè)部分我們將
給出一些有用的服務(wù)程序并將描述怎樣通過(guò)匯編和C語(yǔ)言使用這些服務(wù)。具體請(qǐng)參考
RCXInternalso
我們將以一個(gè)簡(jiǎn)單的例子開(kāi)始:16位有符號(hào)整數(shù)的乘法??赏ㄟ^(guò)對(duì)地址0x0130的操
作實(shí)現(xiàn),乘法子程序可用匯編語(yǔ)言調(diào)用:
jsr@0x0130
兩個(gè)操作數(shù)傳遞到寄存器r5,r6里,結(jié)果存在r6里。如計(jì)算51*72:
mov.w#51,r5
mov.w#72,r6
jsr00x0130
r6的值是3672=51*72。
我們可以把匯編調(diào)用嵌入到C語(yǔ)言程序里:
intl6imul(intl6a,intl6b)
(
intres;
asm("mov.w%1,r5
mov.w%2,r6
jsr0x0130;callimul
mov.wr6,%0
:=r(res)
:"r〃(a),(b)
:"rO","rl","r5","r6"
);
returnres;
)
這個(gè)C函數(shù)可像其他函數(shù)一樣調(diào)用:
intl6p;
p=imul(51,72);
像上面的乘法程序那樣,我們也可以嵌套別的語(yǔ)句,實(shí)現(xiàn)其他功能。這些嵌套程序模
塊可與數(shù)據(jù)類型、常數(shù)和全局變量放在一個(gè)頭文件里,如RCXRTE.ho這個(gè)頭文件也包含
H8/300的主要數(shù)據(jù)類型如字節(jié)、詞,語(yǔ)句"Doyoubyte,whenIknock?”和復(fù)位程序??捎?/p>
#include"RCX_RTE.h"包含在你的c語(yǔ)言程序里。
上面只是一個(gè)預(yù)置程序的簡(jiǎn)單應(yīng)用。下面將詳細(xì)描述預(yù)置程序?qū)Σ僮鱈CD提供的服務(wù)。
6.1LCD子程序
在預(yù)置程序中有一些預(yù)先寫好的子程序,它可以讓我們忽略控制LCD的H8/3292I/O
port6的底層細(xì)節(jié)。也隱藏了元素在屏幕怎樣顯示的細(xì)節(jié)。有兩個(gè)子程序可以顯示或隱藏屏
幕上的圖標(biāo)。一個(gè)圖標(biāo)是一個(gè)或多個(gè)元素。此外,還有一個(gè)子程序用來(lái)在屏幕上顯示數(shù)字。
所有子程序通過(guò)操作LCD在存儲(chǔ)器的緩沖內(nèi)容來(lái)實(shí)現(xiàn)其各自功能。存儲(chǔ)器的緩沖內(nèi)容的變
動(dòng)對(duì)屏幕沒(méi)有影響除非有一個(gè)執(zhí)行程序不斷對(duì)LCD的緩沖操作。在下表中我們假設(shè),LCD緩
沖由一個(gè)執(zhí)行程序不斷更新。
調(diào)用地
LCD子程序描述參數(shù)名和類型
址
refresh更新屏幕內(nèi)容0x27c8沒(méi)有參數(shù)
clear清屏0x27ac沒(méi)有參數(shù)
show_icon使圖標(biāo)可見(jiàn)0xlb62圖標(biāo)(16位)
hide_icon隱藏圖標(biāo)0xle4a圖標(biāo)(16位)
根據(jù)格式和最小分度顯示格式(16位),值(16位),最小分度(16
show_number0xlff2
整數(shù)位)
子程序的第一個(gè)參數(shù)傳到寄存器r6里,剩余的參數(shù)傳到堆棧:第三個(gè)參數(shù)是最先被壓
棧的,接著是第二個(gè)參數(shù)壓棧。參數(shù)的意思如下:
圖標(biāo):可調(diào)用的16位代碼,如站立或走動(dòng)的LEGO人圖標(biāo)。圖標(biāo)有:
16位代碼描述
0x3006站立圖標(biāo)
0x3007走動(dòng)圖標(biāo)
0x3008選擇觀測(cè)傳感器0
0x3009傳感器0激活
0x300a選擇觀測(cè)傳感器1
0x300b傳感器1激活
0x300c選擇觀測(cè)傳感器2
|0x300d傳感器2激活
0x300e選擇觀測(cè)電機(jī)0
辰300f電機(jī)0后退箭頭
0x3010電機(jī)0前進(jìn)箭頭
0x3011選擇觀測(cè)電機(jī)1
0x3012電機(jī)1后退箭頭
0x3013電機(jī)1前進(jìn)箭頭
0x3014選擇觀測(cè)電機(jī)2
0x3015電機(jī)2后退箭頭
0x3016電機(jī)2前進(jìn)箭頭
(0x3018datalog顯示
(0x3019下載中
0x301a上載中
0x301b電量低
0x301c低能量(指紅外發(fā)射)
|0x301d高能量(同上)
0x3020所有元素
重覆調(diào)用代碼0x3018、0x3019和0x301a可在屏幕顯示簡(jiǎn)單的動(dòng)畫(huà)。
格式:show_mimber子程序操作屏幕的六個(gè)位置:
符號(hào)數(shù)字3數(shù)字2數(shù)字1數(shù)字0數(shù)字(中間的空白是顯示小人的地方)
符號(hào)位可顯示一個(gè)減號(hào)(一)或是留空。其它五個(gè)位置可顯示十進(jìn)制數(shù)0,1...9和減號(hào)
(一),或是留空。在數(shù)字3和數(shù)字2、數(shù)字2和數(shù)字1或在數(shù)字1和數(shù)字。之間,可顯示小數(shù)
點(diǎn)。格式(見(jiàn)下表)控制16位值如何作為第二個(gè)參數(shù)傳遞和在屏幕顯示。
格式意思
16位值作為四個(gè)十進(jìn)制數(shù)的存方學(xué)類整數(shù)在位置3,2,1,0顯示。如果值小于
0x3001
-9999,顯示-9999,如果值大于9999,顯示9999
0x3017如果16位值在范圍0..9(即十進(jìn)制)將顯示在數(shù)字位置。否則什么也不顯示。
16位值作為四個(gè)十進(jìn)制數(shù)的無(wú)符號(hào)型整數(shù)在位置3,2,1,0顯示。如果值大于9999,
0x301f
顯示9999o
最小分度:確定小數(shù)點(diǎn)的位置。只適用于0x3001和0x301f兩種格式。
最小分度Scalefactor
(0x30021
(0x30030.1
0x30040.01
(0x30050.001
這些功能可集成在c語(yǔ)言的頭文件里,見(jiàn)RCXRTEh及RCXRIE.h描述。各個(gè)子程
序?qū)CD緩沖區(qū)更新后都調(diào)用了刷屏程序。為了讓使用更加方便,顯示數(shù)字的子程序包含
在了RCX_RTE.h里,如lcd_show_intl6和lcd_show_digito
7.為RCX編譯程序
我們已經(jīng)看到一個(gè)簡(jiǎn)單的匯編語(yǔ)言程序如何手工地翻譯成十六進(jìn)制表示的H8/300機(jī)器
代碼,這些字節(jié)怎么下載到RCX中,以及下載的程序如何起動(dòng)。但是,這個(gè)過(guò)程是非常繁瑣
和極易出錯(cuò)的。在本節(jié)及下面我們描述如何使用工具來(lái)簡(jiǎn)化這個(gè)過(guò)程。在本節(jié)我們描述一
個(gè)交叉匯編器和一個(gè)交叉編譯器將匯編語(yǔ)言程序和C語(yǔ)言程序翻譯成一系列用S碼表示的
H8/300機(jī)器碼。在下一節(jié),將描述RCX.Download程序如何將S碼變成字節(jié)序列,向RCX預(yù)
置程序發(fā)送請(qǐng)求,下載并且起
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版企業(yè)ERP合同簽訂的財(cái)務(wù)審計(jì)要求解析3篇
- 二零二五年度濕地修復(fù)項(xiàng)目科技成果轉(zhuǎn)化合同3篇
- 2025年蔬菜種植基地與加工企業(yè)銷售合作協(xié)議3篇
- 二零二五年知識(shí)產(chǎn)權(quán)服務(wù)股權(quán)互換合同范本3篇
- 2025招標(biāo)師考試合同管理考點(diǎn)之擔(dān)保合同
- 2025年貨運(yùn)司機(jī)職業(yè)健康管理與防護(hù)協(xié)議3篇
- 廣告公司材料采購(gòu)合同
- 合伙經(jīng)營(yíng)門店合同范本
- 2025關(guān)于工程專業(yè)分包的合同范本
- 標(biāo)準(zhǔn)離婚協(xié)議書(shū)格式范文
- 100個(gè)超高難度繞口令大全
- 《鄭伯克段于鄢》-完整版課件
- (日文文書(shū)模板范例)請(qǐng)求書(shū)-請(qǐng)求書(shū)
- 土壤肥料全套課件
- 畢業(yè)生延期畢業(yè)申請(qǐng)表
- 學(xué)校6S管理制度
- 肽的健康作用及應(yīng)用課件
- T.C--M-ONE效果器使用手冊(cè)
- 8小時(shí)等效A聲級(jí)計(jì)算工具
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)計(jì)算題300道
- 社會(huì)實(shí)踐登記表
評(píng)論
0/150
提交評(píng)論