Basic Stamp II (BS2)
ชิปเบสิกแสตมป์ สามารถต่อเข้าไฟดีซี ตั้งแต่ 5 โวลท์-40 โวลท์ เนื่องจากว่าภายในชิปมี regurator อยู่แล้วซึ่งจะแปลงไฟจากระดับที่กว่า 5 โวลท์เพื่อให้สามารถป้อนไฟให้เหมาะสมกับความต้องการของเบสิกแสตมป์

เนื่องจากว่าตัวชิปของ เบสิกแสตมป์เองเกิดจากการนำไมโครคอนโทรลเลอร์ตระกูล PIC ของบริษัท Microchip มาอัดโปรแกรมลงไปซึ่งโปรแกรมดังกล่าวคือ Basic interpreter สามารถนำคำสั่งที่เป็นภาษาเบสิกมาแปลงเป็น Assembly ของ PIC อีกครั้งหนึ่ง เพราะฉนั้นโปรแกรมที่เราดาวน์โหลดกันลงไปในชิบเบสิก แสตมป์นั้นก็ต้องเก็บไว้ที่ EEPROM เบอร์ 24LC16B ซึ่งเป็น serial EEPROM ความจริงเราสามารถพัฒนาโปรแกรมโดยใช้ Assembly ของ PIC เลยก็ได้ เพราะตัว PIC เองก็ราคา 1-3 เหรียญเอง แต่ชิบเบสิกแสตมป์นำ PIC , serial EEPROM และวงจรเพื่อการติดต่อทางพอร์ตอนุกรม และ Regurator นำมารวมกันทำให้มีมูลค่าสูงถึง 49 เหรียญ แต่ก็โอเค เพราะเราซื้อความง่าย ซึ่งเจ้าตัวเบสิกแสตมป์เองก็เหมาะสำหรับการศึกษาหรือทดลองทางวิทยาศาสตร์มากกว่าไม่เหมาะสำหรับนำมาผลิตเป็น mass product
วงจรที่อยู่ในเบสิกแสตมป์

จากรูป PBASIC2 Interpreter Chip (U1) เป็นสมองหลักของชิบเลย ซึ่งเกิดจากการอัดโปรแกรม PBASIC2 interpreter ลงไปใน PIC16C57 การเขียนโปรแกรมก็คือการอัดโปรแกรมลงไปใน EEPROM เมมโมรี (U2) นั่นเอง ซึ่งเมื่อรันโปรแกรมแล้ว ชิป PIC16C57 จะเรียกโปรแกรมใน EEPROM เมมโมรีมาแปลอีกครั้งหนึ่ง U1 สามารถรันคำสั่งได้ประมาณ 5 ล้านคำสั่งต่อวินาที แต่ถ้ากล่าวถึงการรันคำสั่งที่เป็นภาษาเบสิกแล้ว ก็รันได้ประมาณ 3000 ถึง 4000 คำสั่งต่อวินาที
พอร์ตใช้งานของ BS2 มี P0-P15 สามารถอินเทอร์เฟซกับ TTL(transistor-transistor logic) หรือ CMOS(complementary metal-oxide semiconductor) ได้เลยพอร์ต I/O ของ BS2 สามารถดึงกระแส(current sink)ได้ 25 mA และให้กระแส(Current source)ได้ 25 mA เพราะฉนั้นกระแสที่ออกมาสามารถนำไปไดร์ว LED ได้เลย โดยไม่ต้องอาศัยวงจรขยายข้างนอกอีก 2048-byte Erasable Memory Chip (U2) U1 ถูกโปรแกรมมาแล้วจากโรงงาน ดังนั้น โปรแกรมที่จะเขียนลงไปก็ต้องเก็บไว้ที่อื่น ซึ่งก็คือ U2 U2 เป็น ชิป 24LC16B สามารถลบข้อมูลภายในได้ด้วยกระแสไฟฟ้า ซึ่งเรียกว่า The electrical erasable,programmable read-only memory(EEPROM) ตัว EEPROM นี้เองที่สามารถเก็บข้อมูลได้ ถึงแม้ไม่มีไฟเลี้ยงอยู่ก็ตาม การเขียนโปรแกรมลงไป EEPROM นี้จะใช้เวลาในการโหลดเข้าไปประมาณ 2-3 มิลิวินาที และสามารเขียนได้ประมาณ 10 ล้านครั้ง ซึ่งถ้าคำนวนดูแล้ว ภายในทุกหนึ่งนาที คุณ โหลดโปรแกรมลงไปใน EEPROM คุณสามารถทำได้ติดต่อกันถึง 10 ปี
Reset Circuit (U3)
ชุดวงจรรีเซตนี้จะทำหน้าที่ปกป้องการทำงานของ BS2 เพื่อให้ไม่เกิดความผิดพลาด อันเนื่องมาจากพลังงานที่ให้กับชิป มันน้อยเกินไป เพราะถ้าแรงดันที่ให้กับวงจรตำเกินกว่าที่ BS2 จะตัดสินว่าเป็น logic 0 หรือ 1 จะทำให้การทำงานผิดพลาด เพราะฉนั้นวงจรรีเซตนี้จะตัดรีเซตการทำงานและตัดกระแสไฟเลี้ยงเมื่อมันทราบว่ามีไฟตำกว่า 4 V แต่เมื่อไรที่ไฟเลี้ยงถึง 5 V วงจรนี้ก็รีเซตโปรแกรมและรันโปรแกรม ต่อไป
Power Supply (U4)
U4 เป็นชิปเบอร์ S-81350HG 5 volt regurator ทำหน้าที่แปลงไฟดีซีตั้งแต่ 5-15 โวลท์ให้เป็น 5 โวลท์และสามารถให้กระแสได้ถึง 50 mA ส่วน BS2 จะใช้กกระแสประมาณ 8 mA ถ้าไม่มีการโหลดกระแสที่ขา I/O
Serial Host Interface (Q1,Q2,และ Q3)
การติดต่อกับพอร์ตอนุกรมของพีซี BS2 จะใช้ ทรานซิสเตอร์เพื่อทำให้ระดับสัญญาณของ rs232 มีระดับ -12 V และ 12 V(สัญญาณที่ default อยู่เมื่อไม่มีการสื่อสารคือ -12 V) ทำให้เป็นศูนย์กับหนึ่งเพื่อทำให้เป็สัญญาณลอจิกที่มีค่า 0 และ 5 V โดยการใช้ทรานซิสเตอร์ ที่ขาเบสเมื่อมีไฟ 12 V เข้ามาจะทำให้ทรานซิสเตอร์ Q1 ก็จะ on ทำให้สัญญาณลอจิกที่เข้าไปยังพอร์ต RA2 มีค่าเป็น 0 แต่ถ้าที่ขาเบสมีไฟ 12 V เข้ามาก็จะทำให้ทรานซิสเตอร์ off ทำให้สัญญาณลอจิกที่เข้าไปยังพอร์ต RA2 มี่ค่าเป็น 1 ตรงนี้เองที่จะทำให้ BS2 ได้รับข้อมูลจากพอร์ตสื่อสารของ พีซีได้ ส่วนการส่งข้อมูลให้กับ พีซีหรืออุปกรณ์ภายนอกนั้นจะใช้พอร์ต RA3 ซึ่งสัญญาณที่ใช้ก็จะมีระดับ 5V กับ -12 V จากวงจรเมื่อพอร์ต RA3 ส่งค่า 0 ออกมาจะทำให้ Q3 on สัญญาณ Sout มีค่าเป็น 5 โวล์ท แต่ถ้าพอร์ต RA3 ส่งค่า 1 ออกมาก็จะทำให้ Q3 off สัญญาณ Sout ก็จะมีค่าเป็น -12 เพราะ ค่า R4.7 k จะทำให้โวลท์ ณ จุดนั้นมีค่าเป็น -12 เพราะสัญญาณที่ Sin มีค่าเป็น -12 (สัญญาณที่ส่งออกมาในขณะที่ไม่มีการสื่อสารใดๆ) เพราะฉนั้นการส่งข้อมูลอนุกรมออกมานั้นไม่สามารถทำได้พร้อมกับการรับข้อมูลจากพอร์ตอนุกรมของพีซี ส่วน ATN จะต่อขา DTS(data terminal ready)ซึ่งสัญญาณ handshake ของพอร์ตอนุกรมของพีซี สัญญาณนี้จะส่งค่า -12 V ออกมาตลอดเวลา แต่เมื่อใดก็ตามเมื่อมีการส่งข้อมูลเรียบร้อยแล้วสัญญาณที่เป็นพัลซ์จะส่งออกมาซึ่งมีค่าเป็น 12 V จะทำให้ทรานซิสเตอร์ Q2 ทำงานซึ่งหมายความว่า ไฟเลี้ยง 5 โวลท์ในขณะนั้นจะถูกดึงมาให้มีค่าเป็น 0 โวลท์ตรงนี้เองจะทำให้ วงจรรีเซตทำงาน หากไม่มีการส่งข้อมูลจากพอร์ตอนุกรมของพีซีแล้ว พอร์ต ATN ควรต่อไว้กับกราวนด์เพื่อป้องกัน noise เข้ามารบกวนอาจจะทำให้วงจรรีเซตทำงานโดยไม่ตั้งใจได้
การต่อสายระหว่างพีซีกับ BS2 ให้ดูตามรูป หากซื้อสาย DB9 ที่เป็นแบบ Null โมเด็มมา ต้องเช็คสัญญาณให้ดีด้วย เพราะสายภายใน DB9 จะไขว้กัน

BS2 Memory Organization
หน่วยความจำของ BS2 มีสองที่คือที่ RAM และ EEPROM สำหรับในแรม ข้อมูลจะหายไปเมื่อไม่มีไฟเลี้ยง ส่วนใน EEPROM จะอยู่ตลอดไปตราบใดที่ยังไม่มีการเขียนโปรแกรมใหม่ทับลงไป เราก็ต้องมาดู Data memory กันว่ามีอะไรบ้าง Data Memory (RAM) มีทั้งหมด 32 byte(จะเห็นว่าต่างจากพีซีนะ ซึ่งมีตั้งแต่ 1 เมกกะไบต์ถึง 126 เมกกะไบต์หรือมากกว่านั้น)

The Input/Output (I/O)Variables
เนืองจากพอร์ต I/O ทั้ง 16 พอร์ตนั้นสามารถมีค่าเป็นได้พอร์ตอินพุตและเอ้าพุทดังนั้นจะต้องมีการกำหนดการใช้งานพอร์ตนั้นก่อนเสมอโดยการป้อนข้อมูลลงไปใน DIRS รีจิสเตอร์ ซึ่งถ้าค่าภายในบิตนั้นมีค่าเป็น 0 พอร์ตนั้นจะทำตัวเป็น อินพุทพอร์ต แต่ถ้ามีค่าเป็น 1 พอร์ตนั้นจะทำตัวเป็นเอ้าพุทพอร์ต ใน DIRS รีจีสเตอร์มีตั้งแต่ บิต 0 ถึงบิต 15 ซึ่งจะเท่ากับรีจีสเตอร์ของ INS(เก็บค่าอินพุทเอาไว้) และ OUTS (เก็บค่าที่ส่งออกไปทางพอร์ต)

จากรูปจะเห็นว่า DIRS รีจีสเตอร์จะเป็นตัวกำหนดทิศทางของข้อมูล หรือเรียกว่า direction register จะเป็นตัวอนุญาติให้มีข้อมูลเข้าหรือออกไป ซึ่งมีให้เลือกได้สองทางคือ ออกไป หรือเข้ามาเท่านั้น หมายเหตุ ค่า X หมายถึงค่าอาจจะเป็น 0 หรือ 1 ส่วน ? คือไม่ทราบว่าเป็นอะไร หรือไม่มีการเปลี่ยนแปลง เราสามารถเข้าถึงระดับไบต์หรือบิตของ รีจีสเตอร์ได้ เช่น รีจีสเตอร์ DIRS ซึ่งมีขนาด 16 บิต เราสามารถเรียกใช้ DIRL รีจีสเตอร์ซึ่งเป็น low byte ของ DIRS ส่วน DIRA คือ low nibble ของ low byte ของ DIRS หรือ DIR0 คือบิตศูนย์ของ DIRS ให้ดูในตารางประกอบ

การกำหนดตัวแปร
ก่อนใช้โปรแกรมจะต้องกำหนดตัวแปรให้กำหนดก่อน ซึ่งรูปแบบของตัวแปรคือ
symblol VAR size
symbol คือชื่อซึ่งต้องตั้งให้ไม่ซ้ำกับคำที่เป็น keyword หรือเป็น label ที่ได้กำหนดไว้ในโปรแกรม ส่วนประกอบของชื่อที่ตั้งก็สามารถประกอบไปด้วย ตัวอักษร ตัวเลข และก็ เครื่องหมาย (_) อันเดอร์สกอร์ ส่วน อักษรตัวเล็กหรือใหญ่มีค่าเท่ากัน เช่น Number_of_Student หรือ NUMBER_OF_STUDENT หรือ number_of_STUDENT ทั้งสามตัวคือตัวแปรตัวเดียวกัน size คือขนาดของเนื้อที่ที่ใช้ในการเก็บตัวแปร ซึ่งมีให้เลือกอยู่ สี่ แบบคือ
bit 1 บิต
nib 4 บิต
byte 8 บิต
word 16 บิต
การจองตัวแปร ใน BS2 นั้นก็จะมีข้อจำกัด เช่นการจองตัวแปรแบบอารเรย์ ซึ่งถ้าจองขนาด 10 อาร์เรย์ ฉนั้นก็จะมีอาร์เรย์ 0-9 ให้เราใช้ได้แต่ถ้าเราเรียกใช้อาร์เรย์ตำแหน่งที่ 10 ซึ่งเราไม่ได้จองไว้ โปรแกรมจะไม่มีการฟ้องความผิดพลาดออกมา แต่โปรแกรมจะไปเรียกเมมโมรีตำแหน่งถัดไป ซึ่งทำให้เกิดความผิดพลาดขึ้นมาได้ เพราะฉนั้นต้องระวังในเรื่องนี้ด้วย
การจองตัวแปรจะเก็บไว้ในส่วนของรีจีสเตอร์ที่มีให้ 13 รีจีสเตอร์ขนาด ตัวละ 16 บิต ซึ่งเมื่อจองตัวแปรไปแล้ว ตัว BS2 จะจัดการจองเนื้อให้อัตโนมัติ แต่ถ้าหากรีจีสเตอร์เต็มตัวดีบักเกอร์ก็จะส่งแมสเซสออกมาว่าเต็มแล้ว
ตัวอย่างการจองตัวแปร
id_of_student var word
school var byte
school_flag var bit
room var nib
นอกจากนั้นยังสามารถกำหนดตำแหน่งของตัวแปรในตัวแปรอื่นได้เช่นจากตัวอย่างที่แล้ว id_of_school จองตัวแปรเป็นชนิด word เราสามารถตั้งชื่อตัวแปรตัวใหม่ โดยอาศัยข้อมูลบางส่วนจากตัวแปรที่ได้ตั้งเอาไว้แล้วเช่น
id_of_student var word
area_code var id_of_student.highbyte
province var id_of_student.lowbyte
room var id_of_stuent.nibble
หรือ
kenya var word
spot var kenya.highbyte.lownib.bit0
ดูตารางเพื่อใช้ช่วยในการกำหนดตัวแปร

Memory Map
สามารถดูเมมโมรี(เมมโมรีในที่นี่จะหมายถึงทั้งในรีจีสเตอร์และดาต้าเมมโมรี)สามารถเลือกคลิ๊ที่ ป่ม Memory Map ใน ทูลบาร์ วินโดว์ของ memory map จะแสดงถึงเนื้อที่ที่ได้จองเอาไว้จากการจองตัวแปร และเนื้อที่ภายใน EEPROM ใน EEPROM จะเก็บ Code memory เอาไว้ซึ่งเป็นคำสั่งเพื่อนำไปแปลงเป็นภาษาเครื่องซึ่ง BS2 จะเก็บ Code memory จากตำแหน่งสูงสุดของ EEPROM ใล่มาถึงตำแหน่งตำสุด และจะเก็บ Data memory (พวกค่าคงที่ ) จะเก็บไว้ตำแหน่งเริ่มต้นคือ ตำแหน่งที่ศูนย์ไล่ไปเรื่อยๆ

การกำหนดค่าคงที่
เช่น
total_of_student con 1200
หรือ
total_of_student con 1200
total_of_student_ageover_15 con total_of_student-500
ในตารางคือ ตัวโอเปอร์เรเตอร์ที่สามารถใช้กับการกำหนดค่าคงที่ได้

Data Memory หรือ Data Storage หรือ การเก็บข้อมูลไว้ใน EEPROM เนื่องจากข้อมูลภายใน EEPROM จะไม่หายไปถึงแม้จะไม่มีไฟเลี้ยงก็ตาม ดังนั้นเราสามารถกำหนดข้อมูลใส่ลงไปในเมมโมรีส่วนนั้นได้เลย โดย BS2 จะเก็บ Data memory ไว้ตั้งแต่ตำแหน่ง 0 ของ EEPROMไปเรื่อยๆ ยกตัวอย่างการกำหนดให้กับเมมโมรีในส่วนของ EEPROM
table1 data 1,4,7,2,5,4,7,8
table2 data 8,7,4,5,2,14,5
หรือ
table1 data 1,4,7,2,5,4,7,8
table2 data "B","S","2"
table3 data "BS2"
หรือ
table1 data word $2F65 'ใส่ $ 65 ใน Low byte และ ใส่ $2F ใน high byte
หรือในกรณีที่ต้องการกำหนดตำแหน่งของการเก็บ
table1 data @100,"Basic Stamp2"
หรือ
table1 data "B","S","2"
table2 data (40) 'ให้ย้ายตัวที่ตำแหน่งแอดเดรสไปที่ 40
table3 data "12" 'เก็บ 12 ไว้ที่ตำแหน่ง 40
หรือ
table1 data 20(15) 'เก็บ 15 ไว้ที่ตำแหน่ง 20
Number
ตัวเลขที่ใช้ใน BS2 ก็มีสามแบบคือ Decimal,Hex และ Binary ซึ่งถ้าเป็น Decimal ก็ใส่ตัวเลขไปได้เลยในโค้ดอีดิเตอร์ เช่น 55 ถ้าเป็น Hex หรือ Binary ก็จะมี prefix เช่น
55 Decimal (no Prefix)
$FDA1 Hex
%10001101 Binary
Runtime
การคำนวนนั้นไม่ได้หมายความว่า BS2 จะเป็นตัวคำนวนโดยฝ่ายเดียวแต่ตัวดีบักเกอร์ หรือ host software จะคำนวนในส่วนที่สามารถคำนวนได้ก่อนดาวน์โหลดลงไปใน BS2 ฉนั้นการคำนวนที่เกิดขึ้นก่อนการดาว์นโหลดโปรแกรมลงไปใน BS2 จะเรียกว่า compile time ส่วนการคำนวนที่เกิดหลังจากการดาวน์โหลดไปเรียบร้อยแล้วจะเรียกว่า run time ดูตัวอย่างต่อไปนี้
ch con 8
gl con ch*4-2 'compile time.
twoFifty con 200+50 'compile time.
a0 = gl
a1 = 100+a0 'runtime
x0 = twoFifty '200+50 ทำไปแล้วตอน compile time
x1 = 200+50 'runtime
ลำดับของตัวโอเปอร์เรเตอร์
BS2 จะคำนวนเรียงจากซ้ายไปขวา เช่น 4*5-2+10 การคำนวนคือ
4*5=20
20-2=18
18+10=28
คำตอบคือ 28
หรือ 4/3-1+5 การคำนวนคือ
4/3=1 'คำตอบเป็นหนึ่งเพราะว่า เป็นตัวเลขชนิดอินทีเจอร์
1-1=0
0+5=5
ในกรณีที่ใช้เครื่องหมายวงเล็บ BS2 จะคำนวนตัวที่อยู่ในวงเล็บก่อนโดยเริ่มจากซ้ายไปขวา
1
Hosted by www.Geocities.ws