PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-06-2006, 01:21 PM   #1
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Unhappy Lập trình với ngôn ngử Basic

Sau khi đăng nhập vào diễn đàn em thấy hầu như mọi người sử dụng CCS và HT để lập trình cho PIC, ngôn ngữ trên hổ trợ rất nhiều tuy nhiên bên cạnh dó cũng có ngôn ngữ BASIC giúp ích chúng ta rất nhiều trong việc thiết kế các module nhỏ. Do đó em xin trình bày mốt số câu lệnh với BASIC giúp cho các bạn mới học để làm quen với PIC
Chương trình sử dụng đựoc Down tại:
http://www.oshonsoft.com/downloads.html
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:21 PM   #2
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Đầu tiên là cách khai báo biến, trong Basic hổ trợ 4 loại dữ liệu đó là:
Bit: có giá trị 0 hoặc 1
Byte: chiếm 1 byte có giá trị từ 0 – 255
Word: chiếm 2 byte có giá trị từ 0-65536
Long: chiếm 4 byte có gía trị từ 0-4294967295
Trong chương trình Basic mà em sử dụng thì không có hổ trợ số âm và thưc nhưng bằng thuật tóan ta có thể thay thế được.
Cú pháp : dim <tên biến> as <loại, kiểu biến>
Vd: dim a as byte
Dim b as bit
Dim c as word
Dim d as long
Và chúng ta cũng có thể sử dung khai báo kiểu mảng (vd: sử dụng trong giải mã led 7 đọan)
Vd: dim a(10) as byte ‘khai báo mãng a gồm 10 phần tử kiểu byte.
Ngoài ra chúng ta còn có thể truy suất tới từng bit của biến
Dim a as byte
a.5=7 ‘khai báo biến a là byte và set bit thứ sáu là 1
Hoặc gán trực tiếp với các port hoặc các thanh ghi
Trisb=0ffh ‘khai báo portb là input
Status.5=1 ‘nhảy vào bank 1
Portc.1=1 ‘set bit thứ hai port c lên 1 nếu port c là output
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:22 PM   #3
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Cách khai báo hằng và đạt lại tên cho các thanh ghi
Cú pháp: const <tên hằng>= <gia trị> hoặc define <tên hằng>= <gía trị>
Vd: khai báo a là hằng số và có giá trị là 5
Const a=5
Cú pháp: symbol <tên mới> = <bit hoặ thanh ghi>
Vd: SYMBOL LED1 = PORTB.0
LED1 = 1
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:23 PM   #4
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Các phép tóan gồm có (+; -; *; /; %) và các phép tóan logic (not; and; or; nand; nor; xor; nxor)
Ví dụ:
DIM A AS WORD
DIM B AS WORD
DIM X AS WORD
A = 123
B = A * 234
X = 2
X = (12345 - B * X) / (A + B)
Ví dụ:
DIM A AS BIT
DIM B AS BIT
DIM X AS BIT
X = NOT A
X = A AND B
X = A OR B
X = A XOR B
X = A NAND B
X = A NOR B
X = A NXOR B
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:23 PM   #5
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Câu lện goto: dung để nhảy tới 1 nhã nào đó đã được đặt tên trước
Vídụ:
DIM A AS WORD
A = 0
loop: A = A + 1
GOTO loop
Ví dụ: sử dung portb làm mạch dếm với chu kì 1s
Dim a as byte
Trisb=00
Main:
Portb=a
A=a+1
Goto main
End
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:24 PM   #6
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Cậu lệnh chờ dợi.
Cú pháp: delayms(<số mili giây cần trì hõan>) , delayus(<số micro giay cần trì hõan>)
Vd: nếu ta dung thãch anh 4Mhz thì cau lệnh delayms(1) sẽ cho ta trì hõan 1000 câu lệnh ( tương dương với 1000 câu lện nop)
Ví dụ:
DIM A AS WORD
A = 100
WAITMS A
WAITUS 50
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:25 PM   #7
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Các câu lệnh về vòng lặp FOR , WHILE và câu lện điều kiện IF
Vòng lặp FOR:
Cú pháp:
For <giá trị dầu> to <giá trị cuối> step <bước nhảy>
Thực hiện lệnh
Next <tên biến dể tiếp tục>
Ví dụ:
DIM A AS BYTE
DIM B AS BYTE
DIM X AS BYTE
B = 255
X = 2
TRISB = 0
FOR A = B TO 0 STEP -X
PORTB = A
NEXT A

Vòng lặp While:
Cú pháp:
While (<điều kiện>)
Thực hiệ lệnh
Wend ‘kết thúc
Ví dụ:
DIM A AS BYTE
TRISB = 0
A = 255
WHILE A > 0
PORTB = A
A = A - 1
WAITMS 100
WEND
PORTB = A

Câu lện điều kiện IF
Cú pháp:
If <điều kiện> then
Thực hiện lệnh
Else ‘ ngược lại
Thực hiện lệnh
End if
Ví dụ:
DIM A AS BYTE
TRISB = 0
A = 255
WHILE A > 0
PORTB = A
A = A - 1
WAITMS 100
WEND
PORTB = A
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:26 PM   #8
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Câu lệnh LOOKUP giống như là kỹ thuật bảng tra. Ví dụ đi63n hình là dung giải mã led bảy thanh.
Ví dụ:
DIM DIGIT AS BYTE
DIM MASK AS BYTE
loop:
TRISB = %00000000
FOR DIGIT = 0 TO 9
MASK = LOOKUP(0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F), DIGIT
PORTB = MASK
WAITMS 1000
NEXT DIGIT
GOTO loop
Ngoài ra nó còn cho phép ta trả về mã ASCII của kí tự;
Ví dụ:
MASK = LOOKUP("ABCDEFGHIJK"), INDEX
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:27 PM   #9
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Sử dụng chương trình con với cau lệnh GOSUB
Cú pháp: gosub <tên chương trình con>
Ví dụ:
SYMBOL ad_action = ADCON0.GO_DONE
SYMBOL display = PORTB
TRISB = %00000000
TRISA = %111111
ADCON0 = 0xC0
ADCON1 = 0
HIGH ADCON0.ADON
main:
GOSUB getadresult
display = ADRESH
GOTO main
END
getadresult:
HIGH ad_action
WHILE ad_action
WEND
RETURN

Ví dụ trên là biến đổi giá trị Analog đưa vào RA.0 và thể hiện ra PORTB.0 sử dung chương trình con và các vòng lặp.
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:29 PM   #10
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Sử dung EEPROM nội:
Cú pháp:
READ <địa chỉ> ,<giá trị> ‘đọc từ EEPROM
WRITE <địa chỉ> ,<giá trị> ‘ghi vào EEPROM
Ví dụ
DIM A AS BYTE
DIM B AS BYTE
A = 10
READ A, B
WRITE 11, B
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:29 PM   #11
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Sử dụng ngắt: sau khi viết chương trình chính xong thì cuối cùng ta viết chương trinh phục vụ ngắt.
Cú pháp:
Main:
…….
…….
Goto main
End

On interrupts
<chương trình phục vụ ngắt viế ở đây>
Resume
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:30 PM   #12
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Ví dụ ngắt ngoài RB0:
DIM A AS BYTE
A = 255
TRISA = 0
PORTA = A
INTCON.INTE = 1
ENABLE
END
ON INTERRUPT
A = A - 1
PORTA = A
INTCON.INTF = 0
RESUME

Đọan chương trình trên sử dụng ngắt ngoài ở chân RB.0. Nếu có ngắt thì gảim a đi 1 và đưa giá trị của a ra PORTA. Lưu ý là khi kết thúc chương trình phục vụ ngắt thì phải xoa cờ ngắt
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:32 PM   #13
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Ví dụ ngắt do bộ định thời:
DIM T AS WORD
T = 0
TRISA = 0xFF
ADCON1 = 0
TRISB = 0
OPTION_REG.T0CS = 0
INTCON.T0IE = 1
ENABLE
loop:
ADCIN 0, PORTB
GOTO loop
END
ON INTERRUPT
SAVE SYSTEM
T = T + 1
INTCON.T0IF = 0
RESUME

Đay là đạon chương trình ngắt do bộ dịnh thời Timer0, sau khi phục vụ ngắt nhớ xóa cờ ngắt
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:32 PM   #14
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Giao tiếp qua cổng nối tiếp chuẩn RS232. Ở đay chia ra làm 2 lọai là giao tiếp bằng phần mềm và phần cứng. Phần cứng là sử dụng chân RxD và TxD làm nhận và chuyển, còn phần mềm là sử dụng bất cứ chân nào làm RxD và TxD cũng được.
Phần cứng gồm có các câu lệnh: HSEROPEN, HSERIN, HSEROUT, HSERGET
Ví dụ:
DIM I AS BYTE
HSEROPEN 38400
WAITMS 1000
FOR I = 20 TO 0 STEP -1
HSEROUT "Number: ", #I, CrLf
WAITMS 500
NEXT I
DIM I AS BYTE
HSEROPEN 19200
loop:
HSERIN I
HSEROUT "Number: ", #I, CrLf
GOTO loop

DIM I AS BYTE
HSEROPEN 19200
loop:
HSERGET I
IF I > 0 THEN
HSEROUT "Number: ", #I, CrLf
WAITMS 50
ENDIF
GOTO loop
Phần mềm gồm các câu lệnh: SEROUT, SERIN.
Ví dụ:
DEFINE SEROUT_DELAYUS = 5000
SEROUT PORTC.6, 1200, "Hello world!", CrLf

DIM I AS BYTE
loop:
SERIN PORTC.7, 9600, I
SEROUT PORTC.6, 9600, "Number: ", #I, CrLf
GOTO loop
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2006, 01:43 PM   #15
TTL
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 50
:
Ví dụ chương trinh lấy mã Scancode của bàn phím sau đó gởi vào PC qua cổng nối tiếp.
Sơ dồ mạch:
Hình Kèm Theo
File Type: jpg hinh anh.JPG (156.0 KB, 44 lần tải)
TTL vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Giao tiếp RS232 trên PC bằng Visual Basic. ngohaibac Giao tiếp cổng COM và LPT 129 31-10-2013 01:39 PM
Mikro basic minhtienbk Chương trình dịch & các công cụ mô phỏng 1 11-11-2009 08:25 PM
Ngôn ngữ Basic cho PIC thaychua Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 10 10-10-2007 08:49 PM
Lập trình cho PIC bằng BASIC phamgiaquang Tổ dịch thuật 11 10-10-2007 07:51 PM
Gặp vấn đề về Mikro Basic TTL Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 5 09-08-2006 07:07 PM


Múi giờ GMT. Hiện tại là 10:25 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam