PIC16F84A – Chương trình Hello World.
Các bài viết trước về PIC16F84A đã giải thích về việc điều khiển các chân GPIO (I/O tổng quát) của IC. Các mạch trước đã giải thích chỉ về cách bật hoặc tắt một đèn LED. Bạn chỉ cần đặt chân mong muốn thành đầu ra và sau đó gửi một tín hiệu cao/thấp để bật/tắt đèn LED. Bây giờ, trong bài viết này, hãy thực hiện chớp nháy đèn LED - "Chương trình hello world của điện tử nhúng". Vậy để làm cho một đèn LED nhấp nháy bạn phải làm gì? Chỉ cần bật và tắt nó trong một vòng lặp vô hạn - đúng, nhưng điều này không hoạt động trong trường hợp của chúng ta. Vì PIC hoạt động ở tốc độ rất cao, mặc dù đèn LED đang nhấp nháy nhưng bạn sẽ không thể thấy đèn LED nhấp nháy và nó sẽ xuất hiện như là đèn bật liên tục.
Routines chờ:
Vậy, chúng ta làm thế nào để giải quyết vấn đề này? Rất đơn giản, thêm một chương trình chờ để PIC bận rộn trong một thời gian ngắn để bạn có thể thực sự nhìn thấy đèn LED nhấp nháy. Vậy, làm thế nào để thêm một vòng lặp chờ?
Lưu một số, ví dụ 255, vào một thanh ghi tổng quát Giảm giá trị của số đó đi 1 cho đến khi nó đạt đến 0.
Tôi biết điều này nghe có vẻ ngớ ngẩn và đó là lãng phí thời gian, trì hoãn hoạt động của PIC. Nhưng bạn sẽ hiểu sau này rằng các chương trình chờ rất quan trọng. Vậy, làm thế nào để thực hiện các bước trên trong chương trình? Bây giờ, đến lúc chơi với các chương trình chờ.
MOVLW 255
MOVWF 0CH
DELAY DECFZ 0C,1
GOTO DELAY
bất kỳ mã nào ở đây….
Bây giờ, chương trình trên hoạt động khá tốt để giữ cho PIC bận rộn khoảng 255 lệnh. Giải mã chương trình trên như sau, Đầu tiên, chúng ta di chuyển giá trị 255 (giá trị lớn hơn 255 không được phép vì thanh ghi của 16F84A có kích thước 8 bit) vào một địa chỉ 0CH chỉ định một thanh ghi tổng quát. Dòng tiếp theo giới thiệu một lệnh mới DECFZ thực hiện hai công việc. Lệnh này DECFZ giảm giá trị của thanh ghi bằng một số lượng được chỉ định. Ở đây, nó giảm giá trị của thanh ghi đi 1 và cũng kiểm tra xem nội dung của thanh ghi 0CH (trong trường hợp của chúng ta) có trở thành không hay không. Nếu nội dung của thanh ghi trở thành không, thì nó bỏ qua dòng tiếp theo và chương trình tiếp tục. Vì vậy, thanh ghi được giảm đến khi nó đạt đến số không trong một vòng lặp liên tục. Còn một lệnh khác: EQU - thực hiện phép gán. Ví dụ REG EQU 0CH có nghĩa, oCH được gán cho biến REG và trong chỗ của 0CH, bạn có thể sử dụng REG. Đây là một lệnh tiện lợi giúp chương trình trở nên dễ đọc hơn.
Chương trình chờ trên chưa đủ cho PIC của chúng ta!. PIC thông minh đến mức thực hiện các lệnh ở tốc độ đáng kinh ngạc. Vì vậy, bạn cần phải giới thiệu một chương trình chờ khác - một chương trình chờ trong một chương trình chờ.
DELAY DECFZ 0C,1
GOTO DELAY
DECFZ 0D,1
GOTO DELAY
Hmm… đó là một lượng chờ khá tốt. Ở đây, bộ điều khiển giảm 255 xuống 0 255 lần. Điều này đủ để làm cho đèn LED nhấp nháy trong mắt của chúng ta.
Đèn LED nhấp nháy:
Dưới đây là chương trình đầy đủ để làm cho một đèn LED kết nối với chân 13 (PORTB,0) nhấp nháy. (Chú ý đến lệnh EQU được sử dụng ở đây)
assembly
Copy code
NUM1 EQU 0CH
NUM2 EQU 0DH
BSF STATUS,05H
MOVLW B ‘00000000’
MOVWF TRISB
BCF STATUS,05H
START BSF PORTB,0
DELAY DECFZ NUM1,1 ; Chương trình trì hoãn 1
GOTO DELAY
DECFZ NUM2,1
GOTO DELAY
BCF PORTB,0
DELAY DECFZ NUM1,1 ; Chương trình trì hoãn 2
GOTO DELAY
DECFZ DECFZ NUM2,1
GOTO DELAY
GOTO START
Chú ý: Các lệnh khác ngoại trừ nhãn như START và DELAY phải bắt đầu bằng một dấu cách vì trình biên dịch oshon sẽ hiểu mọi thứ không có dấu cách như là một nhãn.
Sơ đồ mạch cho đoạn mã trên:
Nếu đèn LED nhấp nháy, bạn đã làm một công việc tuyệt vời!. Thử với các chương trình trì hoãn khác nhau như một chương trình trì hoãn, hai chương trình trì hoãn, v.v., ở các tần số tinh thể khác nhau (4, 10, 16, 20 MHz) và quan sát kết quả.
Code: 7204-076 Còn hàng
Hotline: 0979 466 469