RM新时代网站-首页

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduinos上的BASIC解釋器

Arduinos上的BASIC解釋器

2022-10-18 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

最初的想法

Steve Wozniak 曾說過,創(chuàng)建 Apple 1 整數(shù)基本解釋器是他一生中最大的職業(yè)挑戰(zhàn)。我試著做史蒂夫所做的事情,從頭開始編寫一個(gè) BASIC 解釋器,而不使用任何其他人的任何代碼。我想要在一臺(tái)非常小的計(jì)算機(jī)上有用的東西。事實(shí)證明,它可能是 Arduino 的一個(gè)不錯(cuò)的工具。對(duì) I/O 功能的交互式訪問使測試電子設(shè)備變得容易。可以使用 BASIC 命令控制所有引腳。程序和數(shù)據(jù)可以存儲(chǔ)在 EEPROM 中。我實(shí)現(xiàn)了大部分標(biāo)準(zhǔn) BASIC 語言,包括字符串、浮點(diǎn)數(shù)和大部分 Dartmouth 語言集。

查看我的 github 頁面以找到代碼https://github.com/slviajero/tinybasic

下載并編譯 BASIC 解釋器

下載 TinybasicArduino 中的代碼并將其與 hardware-arduino.h 和 basic.h 一起導(dǎo)入您的 Arduino IDE。打開代碼并查看代碼最開頭的設(shè)置部分。對(duì)于像上面提到的那些標(biāo)準(zhǔn)的 8 位 AVR 系統(tǒng),初始部分需要看起來像這樣

#undef MINGW
#undef MSDOS
#undef

除非您想為 MSDOS 或 Windows 編譯,否則不要更改此設(shè)置。作為下面的語言功能部分,這些設(shè)置可以是

#undef	BASICFULL
#undef	BASICINTEGER
#define	BASICSIMPLE
#undef	BASICMINIMAL
#undef	BASICTINYWITHFLOAT

如果您使用 Arduino UNO 為 am Integer BASIC 定義 BASICSIMPLE 宏,并使用包含字符串、數(shù)組和全套 BASIC 控制結(jié)構(gòu)的合理語言集。

對(duì)于閃存較大的 Arduino,可以使用 BASICFULL。這將在 MEGA 或 NANO Every 等 8 位平臺(tái)上生成 36 kB 的可執(zhí)行文件。

打開硬件-arduino.h。在硬件定義部分,除了

#define ARDUINOEEPROM

使用這些設(shè)置編譯代碼并查看內(nèi)存消耗。對(duì)于 UNO,這應(yīng)該是一個(gè) 24 kB 的可執(zhí)行文件,并且在編譯后應(yīng)該有 1.4 kB 的可用 RAM 報(bào)告。上傳代碼。

試試看!

使用具有以下設(shè)置的 Arduino IDE 的串行監(jiān)視器 * 波特率 9600 * 換行

poYBAGNOSJiARYQ2AAA1tTI50Ys736.png
?

解釋器應(yīng)該顯示一條啟動(dòng)行,如

Stefan的基礎(chǔ)1.2內(nèi)存1024 1024

然后提示輸入。

第一個(gè)數(shù)字是 BASIC 可用的 RAM,第二個(gè)數(shù)字是可用的 EEPROM。可用 RAM 可能因語言功能而異。1KB 大約是一個(gè)人得到的數(shù)量,因?yàn)?BASIC 的內(nèi)部變量需要其余的。

輸入您的第一個(gè) BASIC 程序

10 打印“你好世界”

并運(yùn)行它。

RUN 應(yīng)顯示“HELLO WORLD”并返回輸入提示。

鍵入 SAVE 會(huì)將程序存儲(chǔ)到 EEPROM 中。您可以通過重置您的 Arduino 來嘗試這一點(diǎn),然后使用 LOAD 重新加載程序。鍵入 LIST 進(jìn)行檢查。

眨眼程序

與 Arduinos 上的“Hello World”等價(jià)的是 blink 程序。

在 BASIC 中它看起來像這樣

10 PINM 13,1
20 DELAY 1000
30 DWRITE 13,1
40 DELAY 1000
50 DWRITE 13,0
60 GOTO 20 

輸入它并使用 RUN 命令啟動(dòng)它。Arduino 上的小 LED 現(xiàn)在應(yīng)該每隔 1 秒閃爍一次。發(fā)送字符 '#' 將中斷程序并使解釋器返回到命令提示符。

你可以在這里下載blink程序blink.bas 。

'#' 中斷程序。所有其他輸入都被忽略。鍵入除“#”之外的任何其他字符都將淹沒串行緩沖區(qū),并且將不再識(shí)別中斷字符。

Arduino 函數(shù)的工作原理C++ 中的差不多。有關(guān)移植的命令,請(qǐng)參見此處。您可以在交互模式下嘗試它們。這是在 Arduino 上運(yùn)行 BASIC 的優(yōu)勢(shì)之一。同樣,您可以通過鍵入 SAVE 將您的工作保存到 EEPROM,并在以后使用 LOAD 重新加載程序。

從 EEPROM 自動(dòng)運(yùn)行

如果您已將程序保存到 EEPROM,您可以通過鍵入 SET 1, 1 來激活自動(dòng)運(yùn)行標(biāo)志

如果您現(xiàn)在使用重置按鈕或斷開并連接電源來重置 Arduino,程序?qū)⒆詣?dòng)啟動(dòng)。不會(huì)出現(xiàn)命令提示符。

從串行控制臺(tái)發(fā)送“#”會(huì)中斷程序。

如果您現(xiàn)在鍵入 LIST,則不會(huì)顯示任何程序。自動(dòng)運(yùn)行程序不加載到 RAM 中,而是直接從 EEPROM 中執(zhí)行。這樣,整個(gè) RAM 在自動(dòng)運(yùn)行模式下可用。可以通過命令 SET 1, 0 刪除自動(dòng)運(yùn)行標(biāo)志。

重置后會(huì)出現(xiàn)命令提示符。

這里有更多關(guān)于這整組命令的內(nèi)容“ SD 卡、文件命令、EEPROM 和相關(guān)內(nèi)容”。

讀取數(shù)據(jù)

此項(xiàng)目需要任何模擬傳感器和電纜。一個(gè)很好的例子是圖片中顯示的光電傳感器。它在絕對(duì)黑暗時(shí)返回模擬值 1023,在最大亮度時(shí)返回 0。

pYYBAGNOSJqAD0pLAACblcuvdrU235.png
?

將傳感器的模擬輸出引腳連接到模擬端口 A0,將數(shù)字輸出連接到 Arduino 的數(shù)字端口 D2。然后輸入 BASIC 程序

10 PINM AZERO ,0
20 M0=1024:M1=0
30 FOR I=1 TO 10
40 L=AREAD (AZERO )
50 IF M0>L THEN M0=L
60 IF M1THEN M1=L
70 DELAY 1000
80 NEXT I
90 PRINT "Minimum ",M0
100 PRINT "Maximum ",M1

并使用 SAVE 將其保存到 EEPROM。運(yùn)行程序?qū)⒂涗泜鞲衅髅棵胱x取的值 10 次,并計(jì)算最小值和最大值。AZERO 是一個(gè)常數(shù),包含最低的模擬引腳 A0。A1 將是 AZERO+1。

存儲(chǔ)數(shù)據(jù)

Arduino 的 EEPROM 可用于存儲(chǔ)測量數(shù)據(jù)。接下來測量一分鐘的平均光強(qiáng)度并將結(jié)果存儲(chǔ)在 EEPROM 中:

10 PRINT "Previous measurement ",@E(1)
20 PRINT "Starting new measurement"
30 L=0
40 FOR I=1 TO 60
50 L=L+AREAD(AZERO)/10
60 DELAY 1000
70 NEXT 
80 @E(1)=L/60
90 PRINT "Average = ",@E(1)

使用 SET 1, 1 激活自動(dòng)運(yùn)行功能后,無需計(jì)算機(jī)即可使用 Arduino 測量數(shù)據(jù)。下次 Arduino 連接到計(jì)算機(jī)時(shí)可以讀取該值。

終端程序

Arduino IDE 有一個(gè)簡單的串行監(jiān)視器,但不能下載和上傳數(shù)據(jù)。存在許多解決方案。推薦并使用 Roger Meier 的CoolTerm 。

存在適用于 Windows、Linux 和 Mac 的二進(jìn)制文件。該程序是一個(gè)功能齊全的串行終端。我從MacUpdate下載了我的 Mac 二進(jìn)制文件。

在連接到 Arduino 之前,必須在選項(xiàng)菜單中配置終端程序:

pYYBAGNOSJ-AIhU6AABfKL2ZkfM588.png
?

端口設(shè)置為您的串行端口(與使用的 Arduino IDE 相同),波特率設(shè)置為 9600,數(shù)據(jù)設(shè)置為 8,奇偶校驗(yàn)設(shè)置為無,停止設(shè)置為 1。這些是 Arduino 串行和 Stefan 的 BASIC 的默認(rèn)設(shè)置。在終端配置頁面中選擇了這些選項(xiàng):

poYBAGNOSKGAXngYAAB3CsfdPiI261.png
?

原始模式傳輸每個(gè)按鍵,按鍵模擬必須是 Unix 風(fēng)格的 LF。除此之外,“Handle DEL and BS”需要?jiǎng)h除一行中的數(shù)據(jù),“Handle FF”可以從 BASIC 清除屏幕。這些是標(biāo)準(zhǔn) BASIC 語言集中的最小終端功能。

在 Arduino 上使用 Stefan 的 BASIC 的終端設(shè)置可以在這里下載:CoolTerm 設(shè)置。該程序不是一個(gè)功能齊全的 vt52/100 兼容終端程序。

上傳或下載程序

對(duì)于文件上傳,轉(zhuǎn)到 CoolTerm 中的連接菜單,然后選擇發(fā)送文本/二進(jìn)制文件。

一個(gè)很好的例子是 101 BASIC 游戲中的字母猜謎游戲。它適合 1k Arduino BASIC 內(nèi)存。上傳程序,享受 1975 年的游戲樂趣。

CoolTerm 的當(dāng)前設(shè)置沒有流量控制。時(shí)序問題可能導(dǎo)致上傳失敗,因?yàn)?Arduino 上的 BASIC 接收字符的速度不夠快。一個(gè)簡單的解決方法是在 CoolTerm 的配置菜單的 Transmit 頁面中添加小的延遲。3ms 的線路延遲就可以完成這項(xiàng)工作。

pYYBAGNOSKSAEBg2AAB5wd3MQu8850.png
?

可以使用捕獲文本/二進(jìn)制文件功能從 Arduino 下載程序。啟動(dòng)捕獲類型 LIST 后,再停止捕獲。編輯計(jì)算機(jī)上的文件以刪除最后一行和第一行?;蛘?,您可以使用非?;镜?python 串行監(jiān)視器連接到 Arduino。串行端口必須在程序的第一行中進(jìn)行編輯。Control L 和 Control S 用于上傳和下載。

基于 LCD 屏蔽的 BASIC 系統(tǒng)

pYYBAGNOSKaAHcLVAABSRHVhUII979.png
?

Arduino 最好的小型硬件擴(kuò)展之一是帶有 4 個(gè)按鈕的 16x2 LCD 擴(kuò)展板。它們可以很容易地從 BASIC 程序中使用。像以前一樣編譯解釋器,但使用附加設(shè)置

#define LCDSHIELD
#define DISPLAYCANSCROLL

在硬件 arduino.h 中。

這將激活 LCD 屏的顯示驅(qū)動(dòng)程序和硬件代碼。編譯并上傳腳本。使用串行監(jiān)視器或 CoolTerm 連接到 Arduino。進(jìn)入

打印 &2, "你好世界"

并查看顯示屏。它應(yīng)該在顯示屏的左上角顯示字符串。

poYBAGNOSKiAJ5QNAAC5q7fgjcU984.png
?

修飾符 &2 將打印命令的輸出重定向到顯示器。通過上面的設(shè)置,可以作為一個(gè)迷你終端訪問,能夠滾動(dòng)和一些終端命令。鍵入 PUT &2, 12 以清除顯示屏幕。12 是 Form Feed 的 ASCII 碼,用于清屏。

液晶屏的鍵盤功能

輸入代碼

10 PUT &2, 12
20 PRINT &2,"LCD shield test"
30 PRINT &2,"Key code: ";
40 @X=8:@Y=1
50 GET &2,A
60 IF A<>0 THEN PRINT &2,A;
70 DELAY 10
80 GOTO 30

或使用shield.bas將其上傳到帶有 CoolTerm 的 Arduino 。鍵入 RUN 啟動(dòng)程序,然后按其中一個(gè)屏蔽鍵。密鑰代碼顯示在第二行。

poYBAGNOSKyASf1jAABB5-ZCKQs766.png
?

鍵映射到單個(gè)字符的 ASCII 值 - 選擇 = LF、右 = 2、左 = 1、上 = 3 和下 = 4。

GET &2, A 將這些值返回到變量 A 中,無論何時(shí)按下鍵,如果沒有按下鍵,則返回 0。此代碼使用特殊變量@X 和@Y 來定位光標(biāo)。它們包含從 0 開始的光標(biāo)的水平和垂直位置,可以由程序讀取或分配。

顯示緩沖區(qū)數(shù)組

鍵入以下代碼,然后鍵入 RUN。

10 PUT &2, 12
20 X=0: Y=0
30 P=X+16*Y+1
40 @D(P)="X"
50 GET &2, A : IF A=0 THEN 50
60 A$=A
70 @D(P)=" "
80 IF A$="3" AND Y>0 THEN Y=Y-1
90 IF A$="4" AND Y<1 THEN Y=Y+1
100 IF A$="1" AND X>0 THEN X=X-1
110 IF A$="2" AND X<15 THEN X=X+1
120 IF A=10 GOSUB 200
130 DELAY 300
140 GOTO 30
200 PRINT "Selected", X, Y
210 DELAY 500
220 RETURN

您可以使用按鍵在“X”符號(hào)周圍移動(dòng)。按選擇輸出屏幕上符號(hào)的位置。

pYYBAGNOSK6ASgn2AAAyk6loMek701.png
?

該代碼使用顯示緩沖區(qū)數(shù)組@D()。寫入它會(huì)直接在屏幕上顯示一個(gè)字符。@D() 從數(shù)組下標(biāo) 1 開始,從左到右、從上到下計(jì)算單元格。請(qǐng)注意程序如何在第 40 行和第 60 行將字符串轉(zhuǎn)換為整數(shù)。在賦值中,字符串將第一個(gè)字符的 ASCII 碼作為其整數(shù)值。這僅適用于賦值或整數(shù)表達(dá)式的右側(cè)。該程序具有 Arduino 草圖的典型結(jié)構(gòu)——第 10 行和第 20 行是 setup(),第 30 到 140 行是循環(huán),第 200 到 220 行是函數(shù)。

秒表

pYYBAGNOSLCAbnuUAABLcwTxZoo188.png
?

一個(gè)獨(dú)立程序的例子是秒表。

100 REM "A little stopwatch using the 16*2 shield"
200 REM "The setup()"
210 D=0:T=0:U=0:S=0:C=0
220 PUT &2,12 : PRINT &2;"Time = ";
230 GOSUB 600
300 REM "The loop()"
320 GET &2,A
330 IF A=10
340 IF C=10
350 IF A="l" THEN 500
360 DELAY 10
370 IF S=1 THEN T=MILLIS (10)-D
380 IF T<>U THEN U=T:GOSUB 600
390 GOTO 300
400 S=(S+1)%2:IF S=1 THEN D=MILLIS (10)
499 GOTO 300
500 END
600 @Y=0:@X=8:PRINT &2;"       ";
605 @Y=0:@X=8:PRINT &2;T;
610 RETURN

輸入程序或使用 Coolterm 上傳程序。然后鍵入 SAVE : SET 1, 1 從 EEPROM 激活自動(dòng)運(yùn)行。從外部電源(如小電源條)為 Arduino 供電,使其成為獨(dú)立的秒表。

下一步是什么?

BASIC 的發(fā)展遠(yuǎn)遠(yuǎn)超出了本項(xiàng)目中描述的功能。與此同時(shí),它擁有 Wire、許多不同的顯示器、網(wǎng)絡(luò),并且可以為更大的計(jì)算機(jī)供電。我還為它移植了大部分 Arduino 示例庫。

如果您對(duì)此感興趣,請(qǐng)點(diǎn)擊這些鏈接中的任何一個(gè)

Arduino 庫中的所有標(biāo)準(zhǔn)示例都在我的倉庫中。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
RM新时代网站-首页