View Single Post
Old 24-05-2005, 04:18 AM   #5
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bài tập

Các bạn sẽ thấy mach ngoài hoạt động như thế này:

Khi bật điện lên, PIC được reset. Nó lập tức bật sáng đèn LED ở RB0, rồi sau đó giữ nguyên như vậy, không làm gì cả.

Bây giờ các bạn lưu chương trình vừa viết thành LED_1.asm vào một thư mục nào đó.
Nhấn Alt - F10, chương trình sẽ dịch LED_1.asm thành LED_1.hex

Các bạn dùng mạch nạp PG2C và chương trình nạp IC-PROG để nạp vào PIC (tham khảo Hướng dẫn mạch nạp Falleaf PG2C - PIC Tutorial).

Công việc của các bạn như sau:

0) Chạy thử chương trình ban đầu

1) Thay đổi lệnh BSF PORTB, 0 bằng lệnh BSF PORTB, 1. Nạp lại chương trình mới vào PIC. Bạn sẽ thấy bây giờ đèn LED không sáng ở vị trí RB0 nữa mà sáng ở vị trí RB1.

2) Thay lệnh BSF PORTB,0 bằng đoạn lệnh

MOVLW b'11110000'
MOVWF PORTB

Bạn sẽ thấy các các chân từ RB0 đến RB3 sẽ tắt đèn, và các chân từ RB4 đến RB7 đèn sẽ sáng.

3) Bạn thay lệnh CLRF TRISB bằng đoạn lệnh

CLRF TRISB
BSF TRISB, 0

và giữ nguyên lệnh
BSF PORTB, 0

Các bạn sẽ thấy rằng đèn LED trong trường hợp này sẽ không sáng nữa.
Bởi vì các bạn đã làm cho TRISB = 00000001. Như vậy, RB0 trở thành chân Input. Khi RB0 trở thành chân Input, thì lệnh BSF PORTB, 0 sẽ không còn tác dụng nữa. RB0 lúc này không thể thay đổi giá trị bằng chương trình, nó chỉ có thể nhận giá trị điện áp từ bên ngoài vào.

4) Trong trường hợp mạch này, các bạn sẽ làm thế nào?



Kết luận: Qua bài học này, các bạn đã học được các nội dung sau:

- Làm một mạch chạy PIC
- Cấu trúc một chương trình PIC
- Lập trình từ máy tính, nạp vào PIC, và cho PIC hoạt động
- Hiểu được hoạt động xuất nhập của PIC, chức năng của thanh ghi TRISA, TRISB, PORTA, PORTB, hiểu được các lệnh CLRF (xoá thanh ghi bất kỳ), MOVLW (ghi một giá trị bất kỳ vào thanh ghi W), MOVWF (ghi giá trị của thanh ghi W vào một thanh ghi khác), BSF (bật một bit trong một thanh ghi bất kỳ), GOTO (nhảy đến một nhãn bất kỳ), GOTO $ (nhảy tại chỗ), BANKSEL (chon băng trong bộ nhớ chương trình, chứa một thanh ghi bất kỳ), ORG định địa chỉ trong bộ nhớ chương trình.

Hiện nay các bạn chưa học đến làm thế nào để Input, nhưng có thể các bạn sẽ thực hiện dễ dàng bằng việc thay LED bằng một nút bấm. Hoặc giả, các bạn muốn đèn LED nhấp nháy, về nguyên tắc các bạn có thể thực hiện bật tắt liên tục đèn LED bằng lệnh BSF và BCF. Nhưng làm như thế nó nháy quá nhanh, không thể thấy được.

Bài học sau, chúng ta sẽ học cách viết hàm Delay, và các bạn có thể thực hiện việc làm cho đèn LED nhấp nháy, làm cho dãy đèn từ RB0 đến RB7 chạy qua chạy lại...

Chúc các bạn may mắn trong bài học đầu tiên, và chúc các bạn thành công với PIC!
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn