<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>Arduinos上的BASIC解釋器

Arduinos上的BASIC解釋器

2022-10-18 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

最初的想法

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

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

下載并編譯 BASIC 解釋器

下載 TinybasicArduino 中的代碼并將其與 hardware-arduino.h 和 basic.h 一起導入您的 Arduino IDE。打開代碼并查看代碼最開頭的設置部分。對于像上面提到的那些標準的 8 位 AVR 系統,初始部分需要看起來像這樣

#undef MINGW
#undef MSDOS
#undef

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

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

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

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

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

#define ARDUINOEEPROM

使用這些設置編譯代碼并查看內存消耗。對于 UNO,這應該是一個 24 kB 的可執行文件,并且在編譯后應該有 1.4 kB 的可用 RAM 報告。上傳代碼。

試試看!

使用具有以下設置的 Arduino IDE 的串行監視器 * 波特率 9600 * 換行

poYBAGNOSJiARYQ2AAA1tTI50Ys736.png
?

解釋器應該顯示一條啟動行,如

Stefan的基礎1.2內存1024 1024

然后提示輸入。

第一個數字是 BASIC 可用的 RAM,第二個數字是可用的 EEPROM。可用 RAM 可能因語言功能而異。1KB 大約是一個人得到的數量,因為 BASIC 的內部變量需要其余的。

輸入您的第一個 BASIC 程序

10 打印“你好世界”

并運行它。

RUN 應顯示“HELLO WORLD”并返回輸入提示。

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

眨眼程序

與 Arduinos 上的“Hello World”等價的是 blink 程序。

在 BASIC 中它看起來像這樣

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

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

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

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

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

從 EEPROM 自動運行

如果您已將程序保存到 EEPROM,您可以通過鍵入 SET 1, 1 來激活自動運行標志

如果您現在使用重置按鈕或斷開并連接電源來重置 Arduino,程序將自動啟動。不會出現命令提示符。

從串行控制臺發送“#”會中斷程序。

如果您現在鍵入 LIST,則不會顯示任何程序。自動運行程序不加載到 RAM 中,而是直接從 EEPROM 中執行。這樣,整個 RAM 在自動運行模式下可用。可以通過命令 SET 1, 0 刪除自動運行標志。

重置后會出現命令提示符。

這里有更多關于這整組命令的內容“ SD 卡、文件命令、EEPROM 和相關內容”。

讀取數據

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

pYYBAGNOSJqAD0pLAACblcuvdrU235.png
?

將傳感器的模擬輸出引腳連接到模擬端口 A0,將數字輸出連接到 Arduino 的數字端口 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。運行程序將記錄傳感器每秒讀取的值 10 次,并計算最小值和最大值。AZERO 是一個常數,包含最低的模擬引腳 A0。A1 將是 AZERO+1。

存儲數據

Arduino 的 EEPROM 可用于存儲測量數據。接下來測量一分鐘的平均光強度并將結果存儲在 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 激活自動運行功能后,無需計算機即可使用 Arduino 測量數據。下次 Arduino 連接到計算機時可以讀取該值。

終端程序

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

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

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

pYYBAGNOSJ-AIhU6AABfKL2ZkfM588.png
?

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

poYBAGNOSKGAXngYAAB3CsfdPiI261.png
?

原始模式傳輸每個按鍵,按鍵模擬必須是 Unix 風格的 LF。除此之外,“Handle DEL and BS”需要刪除一行中的數據,“Handle FF”可以從 BASIC 清除屏幕。這些是標準 BASIC 語言集中的最小終端功能。

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

上傳或下載程序

對于文件上傳,轉到 CoolTerm 中的連接菜單,然后選擇發送文本/二進制文件。

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

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

pYYBAGNOSKSAEBg2AAB5wd3MQu8850.png
?

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

基于 LCD 屏蔽的 BASIC 系統

pYYBAGNOSKaAHcLVAABSRHVhUII979.png
?

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

#define LCDSHIELD
#define DISPLAYCANSCROLL

在硬件 arduino.h 中。

這將激活 LCD 屏的顯示驅動程序和硬件代碼。編譯并上傳腳本。使用串行監視器或 CoolTerm 連接到 Arduino。進入

打印 &2, "你好世界"

并查看顯示屏。它應該在顯示屏的左上角顯示字符串。

poYBAGNOSKiAJ5QNAAC5q7fgjcU984.png
?

修飾符 &2 將打印命令的輸出重定向到顯示器。通過上面的設置,可以作為一個迷你終端訪問,能夠滾動和一些終端命令。鍵入 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 啟動程序,然后按其中一個屏蔽鍵。密鑰代碼顯示在第二行。

poYBAGNOSKyASf1jAABB5-ZCKQs766.png
?

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

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

顯示緩沖區數組

鍵入以下代碼,然后鍵入 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”符號周圍移動。按選擇輸出屏幕上符號的位置。

pYYBAGNOSK6ASgn2AAAyk6loMek701.png
?

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

秒表

pYYBAGNOSLCAbnuUAABLcwTxZoo188.png
?

一個獨立程序的例子是秒表。

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 激活自動運行。從外部電源(如小電源條)為 Arduino 供電,使其成為獨立的秒表。

下一步是什么?

BASIC 的發展遠遠超出了本項目中描述的功能。與此同時,它擁有 Wire、許多不同的顯示器、網絡,并且可以為更大的計算機供電。我還為它移植了大部分 Arduino 示例庫。

如果您對此感興趣,請點擊這些鏈接中的任何一個

Arduino 庫中的所有標準示例都在我的倉庫中。


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

評論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>