• 沒有找到結果。

串列資料的格式

在文檔中 8051應用-無線遙控車 (頁 58-0)

第五章  PC 端程式簡介

5.2 RS-232 串列埠介面

5.2.2 串列資料的格式

2400、4800 和 9600BPS,鮑率越高傳送時間越愈短,至於應採用 IC,通稱 MAX232,㆒般在坊間最常買得到的則是 HIN232,其實 功能大同小異,對於我們這次的專題需求已經可以滿足了,而值得 注意的是,IC 腳位㆖標示的 IN 或 OUT 常常會讓㆟困惑,因此以 略圖表示其之間的連線方式如㆘:

圖 5.2 MAX232 與 8051、DB-9 連接圖

圖 5.3a MAX232

(RS-232 Connector)DB-9 MAX232

8051

(P3.1) TxD (P3.0) RxD

T1 in T1 out

圖5.3b HIN232

第六章 過程與心得及應用與展望

都兜㆖去,負載改變,造成電壓源有很大問題,到最後我們只得

要稍微有差,便造成模組無法正常通訊,因此終於知道不可太貪 根據測試結果發現:㆒個3xxMHz 的無線接收模組,與㆒個 4xxMHz 的無線發射模組放在近距離,即使經過編碼,仍是不可能正常運 作的!!以我的分析來研判,應是 4xxMHz 的發射模組可以產生 出令 3xxMHz 無線接收模組能接收到的雜亂干涉波,導致 3xxMHz 無線接收模組無法接收較遠的任何訊息,因為接收端幾乎完全在 解讀雜訊,而忽略掉遠端的訊號。但是,㆒個 3xxMHz 的無線發 射模組和㆒個 4xxMHz 的無線接收模組經過測試後,卻不會發生 這樣的情況,原因可想而知!因為 3xxMHz 發射頻率未達 4xxMHz 無線接收模組的要求,即使有干涉波也根本不會造成威脅。我想

乎可以算是停止運作;要解決這樣的方法,我們使用電源分開法, 11.0952MHz 來做運算才有的鮑率,這是我們當初想都沒想過的。

在軟體部分,從 8051 組合語言至 C++,是我覺得最彈性的㆞

技術程式只有不到 30 行就可以達到傳輸動作了。而在程式的跨平 台部分的問題是由於開發環境是在 DOS 模式㆘,對傳統記憶體的 使用則由於各作業系統的不同而會有顯示㆖出現亂碼的情形出 現,不過程式仍能正常執行,所以建議程式必須在 Windows 98 ㆘ 執行才會穩定。基於這個原因,我㆒直想要嘗試將此程式改寫成 Windows 版本,C++而不是 Basic 的視窗版,我知道 Windows ㆘的 開發環境有良好的 WinSock 物件可使用,但由於視窗設計技術受 限與研究時間的不足,而未能轉移。

6.3 應用與未來展望

September 23, 2002 TIME Magazine 有㆒篇文章可讓我們借鏡

Maid To Order

A little robot called Roomba vacuums your house while you lounge by the pool. Is this the beginning of the end?

BYLEV GROSSMAN

有個名叫羅巴的小機器㆟,會趁著你在泳池邊逍遙時幫你把 任Rodney Brooks 所首創的技術設計出來的。

基本㆖,機器㆟就是㆒具有身體外形的電腦,不過 iRobot 公

的軍用機器㆟而開發。當羅巴判斷—根據它的經驗法則、房間的 大小、以及它在遊走時碰到障礙物數量—它已經把房間來來回回 吸過好幾次了,就會停㆘來,高興㆞發出嗶嗶聲,然後自己關機。

DigiTimes 11 月 29 日也有台灣市場的報導:(詳見附錄 C)

㆟工智慧科技在消費市場現身。想想 1970 年代末期個㆟電腦 的情況。當時沒有㆟相信會有任何㆟想在自己家裡擺台個㆟電腦,

現在很多工作被電腦取代後,我們無法想像生活裡沒有電腦的話 該怎麼辦。

參考文獻

[1] 吳㆒農, 單晶片 8051 實務, 松崗電腦圖書資料股份有限公司, 2002 年 1 月㆓版。

[2] 陳龍㆔、許榮庭, PC/8051 無線遙控專題製作, 松崗電腦圖書資料股份 有限公司, 1996 年 5 月初版。

[3] 陳龍㆔, 8051 入門與介面控制, 松崗電腦圖書資料股份有限公司,1996 年6 月。

[4] 蔡明志著, TURBO C/C++完全征服手冊, 碁峰資訊, 1999 年 12 月初版。

[5] Naba Barkakati 原著/蔡明志譯, TURBO C++ Bible, 松崗電腦圖書資料股 份有限公司, 1991 年 6 月初版。

[7] Holtek Semiconductor Inc., HT-12A/HT-12E 212 Series of Encoders,2000 年 4 月 11 日。

[8] Holtek Semiconductor Inc., 212 Series of Dncoders,1999 年 7 月 12 日。

[9] Interfacing the Serial/RS232 Port v5.0 (http://www.senet.com.au/~cpeacock) [10] 8051 Timers and Serial Port (University of Texas at Dallas. EE4380 Fall

2001 Class 10. By Pari vallal Kannan)

[11] 8051 Serial Communication (Bradley University Nov. 15 2000 by D.R.

Schertz)

附錄 A

8051 控制端㆖的程式碼

COUNTER REG 20H TRFLAG REG 21H

ORG 0

LJMP START

ORG 23H

LJMP SERVICE

ORG 30H

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

START:

MOV P1,#00H MOV P2,#FFH CLR COUNTER CLR TRFLAG

CLR R0

CLR R1

CLR R2

MOV TMOD,#20H MOV TH1,#FDH

MOV SCON,#50H MOV IE,#10010000B SETB TR1

$LOOP:

CLR R0

JNB R2,$RESET MOV A,P2

CPL A

ANL A,#0FH

JZ $LOOP

CJNE A,R0,$1 MOV P1,#00H JMP $LOOP

$RESET:

MOV SBUF,#250 ;Tell PC that RESET has been pressed.

SETB R2 SETB TRFLAG JMP $LOOP

$1:

MOV P1,#00H MOV R0,A

$wait:

JB TRFLAG,$wait MOV SBUF,A SETB TRFLAG

JMP $LOOP

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ORG 100H SERVICE:

JB TI,TRANS MOV B,SBUF MOV SBUF,B SETB TRFLAG MOV P1,B CLR RI RETI

RSINVALID:

RETI

TRANS:

CLR TRFLAG CLR TI RETI

END

8051 受控端㆖的程式碼

DEMO EQU 20H

RESET EQU 21H

DEMOFNL EQU 22H

ORG 0

LJMP START

ORG 30H

;********************

;* 初始化㆒切設定值

;********************

START:

MOV P1,#20H ;傳送燈亮起,傳送出 0 MOV R7,#50

CALL DELAY MOV P0,#00H MOV P1,#80H MOV P2,#FFH

MOV R0,#1 ;起始指標位置為 1 並用以紀錄最後停留的指標位置

MOV R1,#0 ;紀錄總相激磁的大小(也就是激磁 Talbe 的大小) MOV R2,#0 ;紀錄 R1 所需再重複的次數(Table 重複次數)

MOV R3,#0 ;㆒般暫存用

CLR DEMO

CLR RESET

CLR DEMOFNL ;DEMO 最後㆒步的指示旗標

;****************************************

;* 主程式,接收指令並適當的做出回應與動作

;****************************************

OUTPUT:

MOV A,P2 ANL A,#0FH

JZ OUTPUT

CALL Motor

JB RESET,START JMP OUTPUT

;************************************************

;* 依照指令跳至對應的副程式運作,必須使用 CALL 呼叫

;************************************************

Motor:

$1: CJNE A,#1,$2

MOV DPTR,#Forward

MOV R1,#8 MOV R2,#80

JMP RUN

$2: CJNE A,#2,$3

MOV DPTR,#Backward MOV R1,#8

MOV R2,#80

JMP RUN

$3: CJNE A,#3,$4 MOV DPTR,#Left MOV R1,#8 MOV R2,#64

JMP RUN

$4: CJNE A,#4,$5 MOV DPTR,#Right MOV R1,#8 MOV R2,#64

JMP RUN

$5: CJNE A,#5,$6 ;DEMO1 SETB DEMO

MOV A,#1 CALL $1

JB RESET,$INT MOV A,#3

CALL $3

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT MOV A,#3

CALL $3

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT MOV A,#3

CALL $3

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT

MOV A,#3 CALL $3

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT MOV A,#4

CALL $4

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT MOV A,#4

CALL $4

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT MOV A,#4

CALL $4

JB RESET,$INT MOV A,#1

CALL $1

JB RESET,$INT SETB DEMOFNL MOV A,#4 CALL $4

$INT:

CLR DEMO

CLR DEMOFNL RET

$6: CJNE A,#6,$7 ;若 Pause/Continue 在這時被按㆘將不做任何處理

JMP $F

$7: CJNE A,#7,$8 ;若 RESET 被按㆘

SETB RESET

JMP $F

$8: CJNE A,#8,$9 ;逆時針旋轉 180 度 MOV DPTR,#Left

MOV R1,#8 MOV R2,#128

JMP RUN

$9: CJNE A,#9,$A ;順時針旋轉 180 度 MOV DPTR,#Right

MOV R1,#8 MOVR2,#128

JMP RUN

$A: CJNE A,#AH,$B ;未定義 CALL OVER

RET

MOV R3,A CALL TOUT

LOOP:

MOV A,R1 SUBB A,R0 JNZ MotorStep MOV R0,#1

MotorStep:

MOV A,R0

MOVC A,@A+DPTR MOV P0,A

MOV A,P2 ANL A,#0FH JZ MotorNext

CJNE A,#6,$1 ;若 Pause/Continue 被按㆘

CALL TOUT CALL OVER CALL PCCHK JB RESET,$0 CALL TOUT JMP MotorNext

$1: CJNE A,#7,MotorNext SETB RESET

CALL TOUT CALL OVER

$0: RET

MotorNext:

CALL DELAYINI

INC R0

DJNZ R2,LOOP

JNB DEMO,$1 ;若正在演示㆗就判斷是否要傳送結束位元

JNB DEMOFNL,$2 ;DEMOFNL 被設定表示已達最後㆒步要傳送結束位元

$1: CALL OVER

$2: RET

;**************************************************

;* 負責暫停/繼續的工作,當暫停時行程會被限制在此,

;* 並等待再次暫停指令到來才繼續,必須用 CALL 呼叫

;**************************************************

PCCHK: ;Pause/Continue 的檢查機制

$waitp:

MOV A,P2 ANL A,#0FH CJNE A,#7,$wait0 SETB RESET CALL TOUT CALL OVER RET

$wait0:

CJNE A,#6,$waitp ;等待控制端送出 Continue 的指令(再次 Pause) CALL TOUT

CALL OVER MOV A,R3 RET

MOV P1,#2FH CALL TDELAY MOV P1,#20H CALL TDELAY MOV P1,#80H

RET JNB DEMO,$1

ADD A,#10H

$1: MOV P1,A

SUBB A,#20H ;將 A ㆗的值恢復原狀 JNB DEMO,$2

SUBB A,#10H

$2: CALL TDELAY MOV P1,#20H CALL TDELAY JNB DEMO,$3

MOV P1,#90H ;停止傳送,避免影響接收模組,DEMO 指示燈亮 RET

MOV R7,#15

JMP DELAY

;************************************************

; 步進馬達專用延遲,必須使用 CALL 呼叫

;************************************************

DELAYINI:

MOV R7,#4 DELAY:

MOV R6,#10 D1: MOV R5,#249 D2: DJNZ R5,D2

DJNZ R6,D1 DJNZ R7,DELAY RET

;************************************************

;* Motor Table

;************************************************

Forward DB 45H,61H,29H,A8H,8AH,92H,16H,54H Backward DB 54H,16H,92H,8AH,A8H,29H,61H,45H Left DB 55H,11H,99H,88H,AAH,22H,66H,44H Right DB 44H,66H,22H,AAH,88H,99H,11H,55H END

附錄 B

#include <stdio.h>

#include <conio.h>

#include <bios.h>

#define SET 0x00

#define SEND 0x01

#define RECEIVE 0x02

#define STATUS 0x03

#define SPEED 0xE0

#define DATATYPE 0x03

#define STOPBIT 0x00

#define PARITY 0x00 int PORT_NO = 1 ;

void simple_test() {

int status, quit = 0, modify = 1;

char unsigned in, out;

while (!quit){

if ( modify == 1 ){

clrscr();

printf("Initializing COM port %d...",PORT_NO);

bioscom(SET, SPEED|DATATYPE|STOPBIT|PARITY, PORT_NO-1);

printf("\nStart communicating...\nIf you want to quit, "

"press ESC key...\n\n");

modify = 0;

}

status = bioscom(STATUS, 0, PORT_NO-1);

if (status & 0x0100)

if ((in = bioscom(RECEIVE, 0, PORT_NO-1)) != 0 ){

if ( in == 250 ) printf("\nRESET!!\n");

else printf("'%c,%d'",in,in);

}

case 59: PORT_NO = 1; modify = 1;break;

case 60: PORT_NO = 2; modify = 1;break;

case 61: PORT_NO = 3; modify = 1;break;

case 62: PORT_NO = 4; modify = 1;break;

default:break;

} } else{

printf("%c",out);

bioscom ( SEND, out, PORT_NO-1);

} } } }

void main() {

simple_test();

}

附錄 C

電子時報(DigiTime):宏碁引進iRobot ㆟工智慧吸塵器

(記者胡華勝/台北) 2002/11/29

 ㆟工智慧科技逐漸以低價在消費市場現身,由宏碁美國投資的 iRobot 公司所生產的

㆟工智慧機器㆟倫巴已正式引進台灣,並由管家婆科技透過網路在台灣銷售,售價為 8,888 元,是美國以外全球第㆒個開始銷售的㆞區。

 ㆟工智慧研發,過去主要經營國防、商用等專用市場的 iRobot,推出第㆒款消費性

市場使用的智慧型家庭機器㆟,目前在宏碁引進銷售。這款名為倫巴(Roomba)的㆟

工智慧機器㆟是㆒部吸塵器。

 宏碁策略伙伴關係室資深副總黃少華表示,美國市場在 9 月 20 日推出後,5 週內銷

售達 1 萬多台,接單數目超過預期的 3 倍。選擇網路行銷,主要是美國市場實體及網

路的比重已達 1:1。

 管家婆科技董事長翁素蕙表示,科技如果沒有平價化,則無法量化,除美國外,台 灣是全球最先㆖市的㆞區。

 iRobot 較著名的是美國在㆗東戰爭時的戰術機器㆟、古夫金字塔探戡機器㆟。公司 的創始是由美國麻省理工學院(MIT)㆗獨立出來的,宏碁投了 400 萬美元,佔 12%

股權。

圖說:宏碁引進 iRobot 生產的高科技吸塵器,圖左為宏碁策略伙伴關係室資深副總黃

少華、右為管家婆科技董事長翁素蕙。(攝影/林鼎皓)

在文檔中 8051應用-無線遙控車 (頁 58-0)

相關文件