Chạy tiến/Chạy lùi Quay trái/Quay phả
5.1.4. Mạch hiển thị tinh thê lỏng ILM-216.
ILM-216 là sự kết hợp của LCD và bộ vi điều khiển, nó có một đặc điểm: > LCD gồm có 2 dòng chứa 16 ký tự.
> Giao diện nối tiếp hai chiều, với tốc độ 1200 đến 9600 baud.
y Chuông có thể được kích hoạt thông qua mã ASCII.
> Bộ nhớ không bay hơi EEPROM dùng để lưu trữ các ký tự đặc biệt và dùng
để khởi động màn hình.
> Có thể điểu khiển ánh sáng nền bầng phần mềm.
> Bộ vi điều khiển của ILM-216 là PIC16F84, nó là thiết bị nhớ kiểu flash.
Các chân và chức năng của ILM-216
C hân C h ứ c n ă n g C h ú ý C hân C hứ c n ă n g C h ú ý 1 G N D K h ô n g đ ấ u n gư ợ c n g u ồ n 9 S la L ố i v à o c h u y ể n m a c h S I 2 + 5 V K h ô n g đ ấ u n gư ơ c n g u ồ n 10 S l b G N D 3 L ố i v à o n ố i tiế p R S - 2 3 2 h o ă c 5 V 11 S2a L ố i v à o c h u y ể n m ạ c h S2 4 L ố i ra n ố i tiế p Đ ả o m ứ c lo g ic 5 V 12 S 2 b G N D 5 L ố i ra c ủ a c h u ô n g d ò n g lớ n n h ấ t: 2 5 m A 13 S3a L ố i v à o c h u y ể n m a c h S3 6 G N D N ố i đ ấ t v ớ i c h â n 7 v à /h o ặ c 8 14 S 3 b G N D 7 C ấ u h ìn h /T h ử N ố i đ ấ t v ớ i c ấ u h ìn h 15 S4a L ố i v à o c h u y ể n m a c h S4 8 9 6 0 0 N ố i đ ấ t v ớ i 9 6 0 0 b p s 16 S 4b G N D
Tốc độ baud hiển thị trên màn hình chính là tốc độ baud được lưu trong bộ nhớ của ILM-216 (tốc độ 2400bps được đặt mặc định tại nơi sản xuất). Đây là tốc độ dữ liệu nối tiếp, modul này sẽ hoạt động trong chế độ bình thường (trừ khi thay chân
đất bằng chân 8).
Hoạt động:
Nối lối vào nối tiếp và nguồn với ILM-216. Chân 6 và chân 7 không được nối
cùng nhau (cấu hình/thử mode). Trên PC, ta có thể sử dụng chương trình đầu cuối (như là Hyperterminal, bao gồm cả Windows 95 và các phiên bản mới). Đặt tốc độ baud thích hợp (mỗi lần đặt ta có thể nhìn thấy trên màn hình cấu hình/thử; tốc độ mặc định là 2400 baud). Để thay thế tốc độ baud và chạy bằng tốc độ 9600 baud, ta
phải nối chân 8 vào chân 6. Khi tăng tốc độ baud, thiết bị đầu cuối phải được đặt
như sau:
K h ô n g b it c h ẵ n lẻ 8 b it d ữ liê u 1 b it s to p Đ iề u k h iể n lu ồ n g = k h ô n g T iế n g v ọ n g c ụ c b ộ = c ó
Mã điều khiển và các đặc điểm.
Bảng sau chỉ ra danh sách mã điều khiển ILM-216. Muốn gửi mã điều khiển từ chương trình ta phải giữ phím Ctrl và ấn thêm một phím khác. Ví dụ, muốn gửi Ctrl- E (hiển thị con trỏ dưới dạng gạch chân) ta phải giữ phím Ctrl đổng thời phải ấn phím chữ E. Muốn gửi mã điều khiển ta phải gửi giá trị mã ASCII theo đơn byte (không phải dòng văn bản). Ví đụ muốn gửi Ctrl-E ta phải gửi byte chứa giá trị 5
(giá trị nhị phân 0000 0101). Những mã điều khiển không liệt kẽ trong bảng có nghĩa là nó được ILM-216 bỏ qua và không có ảnh hưởng gì.
Chức năng Mã ASCII
Số 0 ctrl-@ 0
Vi tri đầu tiên của con trỏ Ctrl-A 1
Giấu con trỏ Ctrl-D 4
Hiển thị con trỏ bằng dấu gạch chân Ctrl-E 5
Hiển thị con trỏ bằng khối sáng nhấp nháy Ctrl-F 6
Chuông Ctrl-G 7
Phím lùi Ctrl-H 8
Khoảng trống ngang (con trỏ đến vị trí cách vị trí cũ 4 cột) Ctrl-I 9
Xuống dòng (Con trỏ xuống dưới một hàng) Ctrl-J 1 0
Nhảy lên trên một dòng (Con trỏ đi lên một hàng) Ctrl-K 11
Xoá (Xoá màn hình) Ctrl-L 1 2 Phím xuống dòng Ctrl-M 13 Bật ánh sáng nền Ctrl-N 14 Tắt ánh sáng nền ctrl- 0 15 Đăt vi trí con trỏ Ctrl-P 16 Đặt lề về phía phải Ctrl-R 18 Thoát (ESC) ctrl-[ 27
Định nghĩa ký tự đổ hoạ: ESC D n BO BI B2 B3 B4 B5 B6 B7
Trong đó, n là ký tự số (nằm trong khoảng từ 0 đến 7) và B0-B7 là các byte định dạng các điểm.
Để gửi dữ liệu từ EEPROM ra màn hình, dùng lệnh: ESCE n
Trong đó, n bằng 0 hoặc 1, nếu bằng 0 thì màn hình hiển thị dòng văn bản, nếu
bằng 1 thì màn hình hiển thị các biểu tượng.
Cấu hình c ủ a EEPROM
EEPROM của ILM-216 lưu phần khởi động, các ký tự truyền thống, và 32 ký tự vãn bản trong 64 byte. Loại bộ nhớ này vẫn nhớ được nội dung ngay cả khi không có nguồn.
Để tải dữ liệu từ EEPROM, ta phải nối ILM-216 với PC. Nối tạm thời chân 6
với chân 7. ILM-216 đợi để nhận 64 byte từ bộ nhớ EEPROM. Tốc độ mặc định là 2400 baud. Lựa chọn cấu hình mong muốn bằng phần mềm và ấn Dowload. Khi dowload tràn thì màn hình sẽ hiển thị “Setup Complete” (Kết thúc phần cài đặt). Khi
Bảng 5-6.
Cấu hình Byte
Số byte Chức năng Mô tả
0-29 Biểu tượng được
định nghĩa bởi người dùng
Cứ 6 biểu tượng thì được xác định bởi ma trận 8 hàng
5 cột, với tổng số là 240 bit hay là 30 byte. Ví dụ, byte cấu hình 0 biểu diễn hàng 0 của biểu tượng 0 bằng 5 bit từ bit 0 đến bit 4 và biểu diễn hàng 1 của biểu tượng 0 bở 3 bi còn lại (từ bit 0 đến bit 2).
30 Thiết lập thông
số và đặt thơi gian trễ khi bật nguồn
Bit 1 và 0: đăt tốc đô baud: 00=9600, 01=4800, 10=2400, 11 = 1200
Bit 2 xác đinh trang thái ánh sáng nền khi khởi đông:
0=OFF (tắt), 1=ÒN (Mở).
Bit 3 xác định trạng thái màn hình: 0 = để trống, l=ký tự trong EẼPROM (từ byte 32-63)
Từ bit 4 đến bit 7, 4 bit này có giá trị từ 0 đến 15 xác định thời gian trễ sau khi khởi động với đơn vị 2,5 s tương ứng từ 0 đến 37,5 s .
31 Làm trễ phím 4 bit từ 0 đến 3 có giá trị từ 0 đến 15 xác định thời
gian trễ đối với chuỗi phím ESC K với đơn vị là 0,5 ms. Bit 4-7 không được sử dụng.
32-63 Ký tự màn hình Chuỗi 32 byte được viết lên màn hình sau khi khởi
động (nếu bit 3 của byte thứ 30 bằng 1) hoặc ngay khi nhận được tổ hợp phím ESC E 1.
Chương trình mẫu:
‘Giả sử ILM-216 được dặt tốc độ là 2400 bps, lối vào nối tiếp (chân 3) được nối với PO của BS2. sử dụng C trl-P (vị trí, ASCII: 16) và Ctrl-L (xoá màn hình, ASCII: 12). Nếu ILM-216 đặt tốc độ 9600 bps, sử
dụng $4054 (=$43FD trong BS2-SX) để đặt tốc độ baud.’
N2400 con $418D ‘Đặt tốc độ 2400-bps (= $43FD trong BS2-SX)
PAUSE 1000 ‘Thời gian đợi để hiển thị cấu hình.
SEROƯT 0, N 2400, [12,’’Hello World !”] ‘Xóa màn hình, hiển thị thông báo PAUSE 2000 ‘ Đợi 2 giây, sau đó đi đến dòng 2 (vị trí 1 6 -)
SEROUT 0, N 2400, [16, 85, “line 2 . . . ”] ‘..64 +21=85) và in ra.
PAUSE 2000: SEROƯT o, N2400, [12, “Goodbyte”] ‘ Đợi 2 giây, xoá màn hình, nói tạm biệt.
5.1.5. Giới thiệu về ngôn ngữ BASIC STAMP
/ ỵ BASIC S la m p U n tá le d l l ü
£ỉe £<# EỊu" Help
Hình 5-13. G iao diện của Basic Stam p 2
Chúng ta đã biết rằng, một chip vi điều khiển cũng có thể coi là một máy tính, các hệ sử dụng vi điều khiển thường yêu cầu các bộ phận của nó phải gọn nhẹ, khả năng làm việc hiệu quả và đặc biệt là công suất tiêu thụ thấp. Các hệ như vậy thường được gọi là các máy tính nhúng ( Embedded PC) đây là một trong những bộ phận sử dụng công nghệ tích hợp cao.
BASIC là ngôn ngữ lập trình rất dễ sử dụng, BASIC STAMP được xây dựng dựa trên ngôn ngữ BASIC, nó là bộ vi điều khiển có giá tương đối rẻ (nhỏ hơn 50$). BASIC STAMP thế hệ đầu tiên được giới thiệu vào năm 1993 (California-based Parallax, Inc.). Vào mùa hè năm 2000 xuất hiện hai loại ngôn ngữ Stamp là BASIC STAMP I (BS 1) và BASIC STAMP II (BS 2) được viết riêng cho chip vi điều khiển này.
Tất cả Stamp đều có các đặc điểm sau: > Kích thước nhỏ.
> Có sẵn chương trình viết bằng BASIC. > Nguồn cung cấp 9V.
> Chương trình được lưu trữ trong bộ nhớ vĩnh cửu EEPROM (có thể xoá được). Bất cứ khi nào được cấp nguồn thì chương trình BASIC trong bộ nhớ sẽ chạy. Stamp có thể được lập trình lại bằng cách nối tạm thời với máy tính thông qua chương trình chủ.
> Các lối vào/ra có thể được nối với các thiết bị số khác, như chuyển mạch sensor, thậm chí điều khiển trực tiếp các loại tải nhỏ như LED.
> Bộ xử lý PIC sử dụng công nghệ Microchip Inc. nên cho phép hoạt động với tốc độ 5 triệu mã máy trên 1 giây.
Một sô nội dung chính trong Basic Stamp, a). Biến - không gian lưu trữ.
Khi lập trình bằng ngôn ngữ Basic Stamp phải chắc chắn là ta sử dụng một trong hai phiên bản của Stamp là BS1 hoặc BS2. Khi đã hoàn thành, phải kiểm tra lại chươrm trình, đảm bảo rằng nó được kết nối với Stamp và được cấp nguồn, và ấn Run (hoặc Ctrl-R nếu trong môi trường Windows, hoặc ALT-R trong môi trường DOS). Trong một vài trường hợp, không cần phải xoá tất cả trên màn hình, nhưng phải tạo ra một số thay đổi.
BS1 BS2
b 0 = 1 5 b 0= 15
b l= 2 2 b 1=22
b 2 = b 0 + b l b 2 = b 0 + b l
debug bO, b 1, b2 debug ? bo, ? b 1, ? b2
Stamp sẽ hiển thị b 0 = 1 5
b l= 2 2 b 2= 3 7
Chương trình này lưu trữ hai số (15 và 22) trong hai biến bo và bl. Sau đó nó cộng nội dung chứa trong hai biến bo và bl và lưu kết quả này vào biến b2. Cuối cùng, các lệnh của Debug hiển thị nội dung chứa trong 3 biến.
Chú ý rằng, khi cộng hai biến bo và bl thì không làm ảnh hưởng đến nội dung chứa trong nó. Nó vẫn lưu những con số ban đầu (15, 22) sau khi cộng. Kết quả của
phép cộng này được chứa trong b2.
Chúng ta có thể không cần sử dụng cả 3 biến trong chương trình này. Khi đó phải thay đổi dòng lệnh :
b2=b0+bl thành bO=bO+bl Stamp hiển thị b 0= 3 7 bl=22 b2 = 0
Trong trường hợp này, kết quả của phép cộng giữa bo và bl được lưu trong bo. Giá trị cũ của bo (15) sẽ bị mất, và kết quả của phép cộng được viết đè lên. ở b2 không có giá trị nào được lưu trong nó nên nó bằng 0. Trước khi chạy chương trình
này phải để tất cả các biến bằng 0.
Những ví dụ này làm sáng tỏ hai điều:
> Các chương trình lưu những con số trong các biến.
> Khi các biến được sử dụng trong tính toán như b2=b0+bl thì chương trình sử dụng các con số được lưu trong biến để lưu kết quả.
Các biến trong Basic Stamp có kích thước cố định, vì vậy, khi lập trình phải hết sức chú ý tới kiểu biến để đảm bảo chương trình cho kết quả chính xác nhưng không tốn quá nhiều bộ nhớ. Để minh hoạ chúng ta xét ví dụ sau :
BS1 BS2
b 0 = 15 5 b 0 = 155
b 1=220 b 1=220
b2=b0+bl b2=b0+bl
debug b 0 , b l , b 2 debug ? bo, ? b l , ? b2
Stamp hiển thị
bO=155
b 1=220
b2=199
Như vậy là sai rồi. Biến b2 phải là kết quả của 155+220, và bằng 375 chứ không phải là 199. Có thể khi cộng Stamp đã bị lỗi. Thử lại:
BS1 BS2
b 0 = 3 7 5 bO=375
d e b u g h o d e b u g ? b o
Stamp hiển thị bO=l 19.
Trong trường hợp này Stamp vẫn nghĩ 375 là 119. Có điều gì xảy ra ở đây? Các biến trong Stamp có kích thước khác nhau. Nếu cố gắng lưu số lớn hơn phạm vi của nó thì sẽ bị tràn số, và giá trị thực sẽ bị mất. Các biến bo, bl, b2 ở trên có kiểu là byte, giá trị lớn nhất mà các biến này có thể có được là 255. Nếu ta đặt biến theo kiểu word thì giá trị lớn nhất đạt được là 65.535:
BS1 BS2
w 0 =3 7 5 w O = 3 7 5
d e b u g wO d e b u g ? w 0
Bây giờ ta sẽ nhận được kết quả đúng: wO=375
Một điều quan trọng khi sử dụng những biến này là phải sử dụng biến có giá trị đủ lớn để khi tính không bị tràn số. Nhưng một điều quan trọng khổng kém là tránh dùng các biến có giá trị lớn hơn mức cần thiết vì chúng sẽ làm đầy bộ nhớ của Stamp một cách nhanh chóng. Bảng 5-7 sau chỉ ra kích thước của các biến. Bảng 5-8 chỉ ra cách thiết lập các biến trong bộ nhớ của Stamp.
Bảng 5-7
Kiểu Kích thước Phạm vi của giá trị
bit 1 bit 0 hoăc 1
byte 8 bit 0-255
word 16 bit 0-65.535
Chú ý trong BS2 sử dụng thêm một kiểu biến được gọi là nibble, nó có 4 bit với giá trị từ 0 đến 15.
Báng 5-8
Word Byte Bit
w0 bO, bl bit0-bit7
wl b l,b2 bit8-bit!5
w2 b3,b4
w3 b5,b6
(Tiếp tục cho đến w6 đối với BS1
và w!2 đối với BS2)
(Tiếp tục cho đến bl3 đối với BS1 và b25 đối với BS2) Lưu ý BS2 không có tên bit như là bit 0.
Như những gì bạn nhìn thấy trên bảng, biến word lớn gấp hai biến byte nhưng nó cũng chiếm gấp hai lần bộ nhớ. BS1 có đủ bộ nhớ để chứa 14 byte, nhưng chỉ bằng 7 biến word; BS2 chứa 26 byte tức là 13 word. Điều này giải thích tại sao lại quan trọng khi sử dụng biến nhỏ nhất để thực hiện các công việc nhỏ,
Tên của các biến.
Ý tưởng của các biến được lấy từ toán học, các biến được lấy tên giống như
tên ban đầu của chúng, như là diện tích= chiều dài X chiều rộng. Trong ngôn ngữ
Stamp ta phải gán biến cho những tên gọi này.
Sử dụng ngôn ngữ Stamp để tính diện tích của căn phòng có kích thước 27 X 13
f o o t . BS1 BS2 S Y M B O L le n g th = b 0 le n g th V A R byte S Y M B O L w id th = b l w id th V A R byte s y m b o l a re a = w l area V A R w o rd le n g tli= 2 7 len g th = 2 7 w id th = 1 3 w id th = 1 3 area ^ le n g th * w id th area = le n g th * w id th
dehug “ A re a = ” , #area, “ sq f t . ” debug “ A re a = ” , D E C area, “ sq f t . ” Stamp sẽ hiển thị:
area = 351 sq ft.
Chú ý BASIC sử dụng dấu hoa thị (*) thay cho dấu X trong phép nhân. Vì ngôn
ngữ này có thể nhầm lẫn giữa dấu X của phép nhân v à biến X.
BS1: Tên biến là cách thay thế biểu tượng như là “chiều dài” thì được đổi thành bO. Khi chương trình Stamp chạy, bo sẽ thay thế cho “chiều dài” ở bất kỳ nơi nào nó xuất hiện.
Trong BS1, không được nhiều hon một tên cho các biến giống nhau hoặc để các biến chồng lên nhau. Ví dụ, nếu gán cả chiều dài và chiều rộng cho một biến bo thì khi chương trình lưu 27 vào bo sau đó lưu 13 vào bo, kết quả là nó lấy bo nhân
Bảng 5-8 mô tả trường hợp các biến bị chồng chéo. 16 bit của biến w0 được sử dụng trong cùng một không gian nhớ, giống như hai byte bo và bl. Sự thay đổi trong bO hay bl có ảnh hưởng đến nội dung của w0. Nếu ta đưa diện tích vào biến w0 thì sẽ nhận được kết quả đúng nhưng bo và bl không còn chứa 27 và 13 sau khi thực hiện phép tính:
area=length * width
BS2: Ngôn ngữ Stamp sử dụng VAR để đặt kích thước cho từng biến (ví dụ byte hay word) và gán cho nó cái tên như chiều dài hay diện tích. Đây là sự khác biệt nhỏ khi sử dụng tên biến là bo và wl, ngôn ngữ Stamp phải đảm bảo rằng không gian nhớ phải được chia để không bị chồng chéo lên bất kỳ biến nào. Đây là lý do để sử dụng VAR khi gán biến- nó dùng để bảo vệ chương trình.
Hằng : hằng sô là các giá trị không biến đổi.
Chúng ta vừa sử dụng các hằng để gán các giá trị vào biến; chúng là những số không đổi. Ví dụ, trong dòng sau:
length=27 thì 27 là hằng số. Hoặc ví dụ: BS1 S Y M B O L D o g Y e a rs = 7 S Y M B O L A g e = 15 S Y M B O L d o g A g e = b l d o g A g e = A g e *D o g Y e a r debug # d o g A g e , ” d og ye ars” BS2 D og Y e a r C O N 7 A g e C O N 15 d o g A g e V A R byte d o g A g e = A g e *D o g Y e a r
debug D E C d o g A g e , ” dog years’ Stamp sẽ hiển thị là:
105 dog years
BS1 sử dụng tên của hằng số giống như tên của biến.
BS2 sử dụng tên của hằng tương tự như tên của biến, nhưng phải sử dụng CON thay cho VAR.
Nhãn, lệnh nhảy gotos và vòng lặp Loop - Labels, Gotos, và Loops.
Tất cả các chương trình vừa giới thiệu đều chạy trực tiếp. Chúng bắt đầu chạy từ lệnh đầu tiên và chạy từng dòng một. Nhưng điều hay nhất trong lập trình đó là khả năng thay đổi trật tự của các lệnh trong chương trình. Hãy xem dòng lệnh sau: