Menu English Ukrainian Tiếng Nga Trang Chủ

Thư viện kỹ thuật miễn phí cho những người có sở thích và chuyên gia Thư viện kỹ thuật miễn phí


ENCYCLOPEDIA VỀ ĐIỆN TỬ TRUYỀN THANH VÀ KỸ THUẬT ĐIỆN
Thư viện miễn phí / Sơ đồ của các thiết bị vô tuyến-điện tử và điện

PIC là gì? Bách khoa toàn thư về điện tử vô tuyến và kỹ thuật điện. Bách khoa toàn thư về điện tử vô tuyến và kỹ thuật điện

Thư viện kỹ thuật miễn phí

Bách khoa toàn thư về điện tử vô tuyến và kỹ thuật điện / Bộ vi điều khiển

Bình luận bài viếtBình luận bài viết

Giới thiệu. PIC16CXX là bộ vi điều khiển 8-bit RISC do Microchip Technology sản xuất. Họ vi điều khiển này được đặc trưng bởi giá thấp, tiêu thụ điện năng thấp và tốc độ cao.

Bộ vi điều khiển có EEPROM chương trình tích hợp, RAM dữ liệu và có sẵn trong các gói đầu ra 18 và 28.

PIC OTP là bộ điều khiển một lần có thể lập trình của người dùng được thiết kế cho các sản phẩm đã hoàn thiện và được kiểm tra đầy đủ sẽ không trải qua các thay đổi mã tiếp theo. Các bộ điều khiển này có sẵn trong các hộp nhựa rẻ tiền với một loại bộ dao động ngoài cài sẵn - thạch anh hoặc RC.

Để gỡ lỗi các chương trình và tạo mẫu, có sẵn phiên bản bộ điều khiển có tính năng tẩy tia cực tím. Các bộ điều khiển này cho phép số lượng lớn các chu kỳ ghi/xóa và có thời gian xóa rất ngắn - thường là 1-2 phút.

Tuy nhiên, giá của những bộ điều khiển như vậy cao hơn đáng kể so với những bộ điều khiển được lập trình một lần, vì vậy việc cài đặt chúng trong sản xuất hàng loạt là không có lợi.

Đối với các sản phẩm có chương trình có thể thay đổi hoặc chứa bất kỳ bộ phận biến đổi nào, bảng, tham số hiệu chuẩn, phím, v.v., có sẵn bộ điều khiển PIC16C84 có thể xóa và lập trình lại bằng điện. Nó cũng chứa một ROM dữ liệu có thể flash bằng điện. Đây là bộ điều khiển mà chúng tôi sẽ sử dụng cho các thí nghiệm.

Để tận dụng tối đa bài viết này, bạn sẽ cần một máy tính cá nhân tương thích với PC của IBM, một lập trình viên được kết nối với cổng song song của máy tính, chip PIC16C84, bảng mạch bánh mì, 8 đèn LED có điện trở, nguồn điện +5V và ổ cắm cho Con chip.

Chúng ta sẽ gõ một chút phần mềm PIC, lắp ráp chúng, đặt chúng vào chip và sau đó xem kết quả trên đèn LED. Chúng tôi sẽ sử dụng cách ghi nhớ MICROCHIP cơ bản trong bài viết này để bạn có thể dễ dàng sử dụng các ví dụ và danh sách ứng dụng khác được cung cấp trong Sổ tay Điều khiển Nhúng.

GIA ĐÌNH PIC16CXX Chúng ta sẽ bắt đầu mô tả chi tiết về họ vi mạch PIC với những tính năng và ưu điểm giúp phân biệt các bộ vi điều khiển này với các bộ vi điều khiển khác. Đối với các ứng dụng bảo mật dữ liệu, mỗi PIC có một bit bảo mật có thể được lập trình để vô hiệu hóa việc đọc mã chương trình và ROM dữ liệu. Khi lập trình, mã chương trình trước tiên được viết, được kiểm tra để viết đúng và sau đó bit bảo mật được đặt. Nếu bạn cố đọc chip với bit bảo mật được đặt, thì đối với PIC16C5X, 8 bit trên của mã sẽ được đọc là 0 và 4 bit dưới sẽ được xáo trộn 12 bit của lệnh. Đối với PIC16C84, tương tự, 7 bit quan trọng nhất sẽ được đọc là số không và 7 bit ít quan trọng nhất sẽ đại diện cho 14 bit được xáo trộn của lệnh. Không thể đọc EEPROM PIC16C84 khi bit bảo mật được đặt. Hình 1 cho thấy tất cả các bộ vi điều khiển hiện đang được sản xuất và đưa ra các đặc điểm ngắn gọn của chúng. (Hình trang 2-1) Họ vi điều khiển PIC có một tập lệnh rất hiệu quả chỉ bao gồm 35 lệnh. Tất cả các lệnh được thực hiện trong một chu kỳ, ngoại trừ các bước nhảy có điều kiện và các lệnh thay đổi bộ đếm chương trình, được thực hiện trong 2 chu kỳ. Một chu kỳ thực hiện lệnh bao gồm 4 chu kỳ đồng hồ. Do đó, ở tần số 4 MHz, thời gian thực hiện lệnh là 1 µs. Mỗi lệnh bao gồm 14 bit, chia hết cho mã thao tác và toán hạng (có thể thao tác với thanh ghi, vị trí bộ nhớ và dữ liệu tức thời). Tập lệnh của bộ vi điều khiển PIC16CXX được thể hiện trong Hình 2. (Bảng 7.2 trên trang 2-569) Tốc độ thực thi lệnh cao trong PIC đạt được bằng cách sử dụng kiến ​​trúc Harvard hai bus thay vì Von Neumann một bus truyền thống ngành kiến ​​​​trúc. Kiến trúc Harvard dựa trên một tập hợp các thanh ghi với các bus riêng biệt và một không gian địa chỉ dành cho hướng dẫn và dữ liệu. Một bộ thanh ghi có nghĩa là tất cả các đối tượng phần mềm, chẳng hạn như cổng I/O, ô nhớ và bộ đếm thời gian, đều là các thanh ghi phần cứng được triển khai về mặt vật lý.

Bộ nhớ dữ liệu (RAM) cho PIC16CXX là 8 bit, bộ nhớ chương trình (PROM) là 12 bit cho PIC16C5X và 14 bit cho PIC16CXX. Sử dụng kiến ​​trúc Harvard cho phép bạn đạt được tốc độ cao của các thao tác bit, byte và thanh ghi. Ngoài ra, kiến ​​trúc Harvard cho phép thực thi các lệnh theo đường ống, khi lệnh hiện tại được thực thi và lệnh tiếp theo được đọc cùng một lúc. Trong kiến ​​trúc Von Neumann truyền thống, các lệnh và dữ liệu được truyền qua một bus chia sẻ hoặc ghép kênh duy nhất, do đó hạn chế khả năng của đường ống. Hình 3 cho thấy sơ đồ khối của cấu trúc bus kép PIC16CXX. (Hình B trên trang 2-536) Như bạn có thể thấy, các thành phần logic và vật lý bên trong tạo nên PIC16CXX tương tự như bất kỳ bộ vi điều khiển nào khác mà bạn có thể đã làm việc cùng cho đến nay. Do đó, việc viết chương trình cho PIC không khó hơn bất kỳ bộ xử lý nào khác. Logic, và chỉ logic thôi...

Tất nhiên, kiến ​​​​trúc Harvard và kích thước lệnh lớn giúp mã PIC trở nên nhỏ gọn hơn nhiều so với các bộ vi điều khiển khác và tăng đáng kể tốc độ thực hiện chương trình.

PIC REGISTER SET Tất cả các đối tượng phần mềm mà PIC có thể làm việc với là các thanh ghi vật lý. Để hiểu cách thức hoạt động của PIC, bạn cần hiểu nó có những thanh ghi nào và cách làm việc với từng thanh ghi đó. Hình 4 cho thấy tất cả các thanh ghi của PIC16C84. (hình 3.7.1 tr.

2-541) Hãy bắt đầu với một tập hợp các thanh ghi hoạt động. Bộ này bao gồm thanh ghi địa chỉ gián tiếp (f0), thanh ghi bộ định thời/bộ đếm (f1), bộ đếm chương trình (f2), thanh ghi từ trạng thái (f3), thanh ghi chọn (f4) và các thanh ghi đầu vào/đầu ra ( f5,f6).

Điều bắt buộc là bạn phải hiểu cách sử dụng các thanh ghi này vì chúng đại diện cho phần lớn các đối tượng có thể truy cập bằng phần mềm của bộ vi điều khiển. Vì chúng tôi chủ yếu cần hiểu "cách quản lý" chứ không phải "cách thực hiện nội bộ", nên chúng tôi đã đưa vào các ví dụ rất đơn giản cho thấy các cách sử dụng có thể có đối với từng sổ đăng ký.

f0...ĐĂNG KÝ ĐỊA CHỈ GIÁN TIẾP IND0 Thanh ghi địa chỉ gián tiếp f0 không tồn tại trên thực tế. Nó sử dụng thanh ghi chọn f4 để chọn gián tiếp một trong 64 thanh ghi có thể.

Bất kỳ hướng dẫn nào sử dụng f0 đều thực sự truy cập vào thanh ghi dữ liệu được chỉ ra bởi f4.

f1... Thanh ghi định thời/bộ đếm TMR0 Thanh ghi định thời/bộ đếm TMR0 có thể được ghi và đọc từ đó giống như bất kỳ thanh ghi nào khác. TMR0 có thể được tăng lên bằng tín hiệu bên ngoài được áp dụng cho chân RTCC hoặc bằng tần số bên trong tương ứng với tần số lệnh.

Công dụng chính của bộ đếm thời gian/bộ đếm là đếm số lượng các sự kiện bên ngoài và đo thời gian. Tín hiệu từ nguồn bên ngoài hoặc bên trong cũng có thể được chia trước bằng cách sử dụng bộ chia khả trình tích hợp sẵn của PIC.

f2... BỘ ĐẾM CHƯƠNG TRÌNH PCL Bộ đếm chương trình (PC) được sử dụng để tạo ra một chuỗi các địa chỉ ô ROM chương trình chứa các lệnh 14-bit. PC có dung lượng 13 bit, cho phép bạn định địa chỉ trực tiếp các ô ROM 8Kx14. Tuy nhiên, đối với PIC16C84, chỉ có sẵn 1K ô. 8 bit dưới của PC có thể được ghi và đọc thông qua thanh ghi f2, 5 bit trên được nạp từ thanh ghi PCLATCH, thanh ghi này có địa chỉ 0Ah.

f3... ĐĂNG KÝ TRẠNG THÁI Thanh ghi từ trạng thái tương tự như thanh ghi PSW được tìm thấy trong hầu hết các bộ vi xử lý. Nó chứa các bit mang, mang thập phân và bit không, cũng như cho phép các bit chế độ và bit phân trang.

f4...ĐĂNG KÝ CHỌN FSR Như đã đề cập, thanh ghi chọn FSR được sử dụng kết hợp với thanh ghi địa chỉ gián tiếp f0 để chọn gián tiếp một trong 64 thanh ghi có thể. Có liên quan về mặt vật lý là 36 thanh ghi RAM người dùng được đặt tại các địa chỉ 0Ch-2Fh và 15 thanh ghi dịch vụ được đặt tại các địa chỉ khác nhau.

f5, f6... CÁC THANH ĐĂNG KÝ I/O PORTA, PORTB Các thanh ghi f5 và f6 tương ứng với hai cổng I/O có sẵn trên PIC16C84. Cổng A có 5 bit PA4-PA0, có thể được lập trình riêng lẻ làm đầu vào hoặc đầu ra bằng cách sử dụng thanh ghi TRISA tại địa chỉ 85h. Cổng B có 8 bit PB7-PB0 và được lập trình bằng thanh ghi TRISB có địa chỉ 86h. Cài đặt 1 trong bit thanh ghi TRIS lập trình bit cổng tương ứng làm đầu vào. Khi đọc cổng, trạng thái đầu ra ngay lập tức được đọc, khi ghi vào cổng, việc ghi xảy ra trong thanh ghi bộ đệm.

f8, f9...EEDATA, EEADR EEPROM ĐĂNG KÝ PIC16C84 có 64 byte EEPROM tích hợp có thể được đọc và ghi bằng cách sử dụng thanh ghi dữ liệu EEDATA và thanh ghi địa chỉ EEADR. Việc ghi một byte mới kéo dài khoảng 10 ms và được điều khiển bởi bộ đếm thời gian tích hợp. Việc kiểm soát ghi và đọc được thực hiện thông qua thanh ghi EECON1, có địa chỉ 88h. Để kiểm soát bổ sung quá trình ghi, thanh ghi EECON2, có địa chỉ 89h, được sử dụng.

CÁC THANH ĐĂNG KÝ MỤC ĐÍCH CHUNG Các thanh ghi mục đích chung là RAM tĩnh nằm ở địa chỉ 0Ch-2Fh. Có thể sử dụng tổng cộng 16 ô RAM trong PIC84C36.

CÁC THANH ĐĂNG KÝ ĐẶC BIỆT W, INTCON, OPTION Cuối cùng, chúng ta hãy nhìn vào các thanh ghi đặc biệt của PIC. Chúng bao gồm thanh ghi làm việc W, được sử dụng làm thanh ghi tích lũy trong hầu hết các lệnh và các thanh ghi INTCON và OPTION. Thanh ghi ngắt INTCON (địa chỉ 0Bh) được sử dụng để điều khiển các chế độ ngắt và chứa các bit cho phép ngắt từ nhiều nguồn khác nhau và các cờ ngắt. Thanh ghi chế độ TÙY CHỌN (địa chỉ 81h) được sử dụng để đặt nguồn tín hiệu cho bộ chia tỷ lệ trước và bộ định thời/bộ đếm, cũng như để đặt hệ số chia của bộ chia tỷ lệ trước, cạnh hoạt động của tín hiệu cho RTCC và đầu vào ngắt. Ngoài ra, bằng cách sử dụng thanh ghi TÙY CHỌN, các điện trở kết thúc có thể được kích hoạt cho các bit cổng B được lập trình làm đầu vào.

WDT Cơ quan giám sát WDT Cơ quan giám sát WDT được thiết kế để ngăn chặn những hậu quả thảm khốc do lỗi chương trình ngẫu nhiên. Nó cũng có thể được sử dụng trong các ứng dụng thời gian như bộ phát hiện xung bị bỏ lỡ. Ý tưởng sử dụng bộ đếm thời gian giám sát là thường xuyên đặt lại nó dưới sự kiểm soát của chương trình hoặc tác động bên ngoài trước khi hết thời gian trễ và bộ xử lý không đặt lại. Nếu chương trình đang chạy bình thường, thì lệnh đặt lại cơ quan giám sát CLRWDT sẽ thực thi thường xuyên để ngăn bộ xử lý đặt lại. Nếu bộ vi xử lý vô tình vượt quá giới hạn của chương trình (ví dụ: do nhiễu mạnh trong mạch nguồn) hoặc bị kẹt trong một số phần của chương trình, rất có thể lệnh đặt lại cơ quan giám sát sẽ không được thực thi trong một khoảng thời gian đủ và quá trình thiết lập lại hoàn toàn bộ xử lý sẽ diễn ra, khởi tạo tất cả các thanh ghi và đưa hệ thống vào trạng thái hoạt động.

Bộ hẹn giờ giám sát trong PIC16C84 không yêu cầu bất kỳ thành phần bên ngoài nào và chạy trên bộ tạo dao động RC tích hợp và quá trình tạo không dừng ngay cả khi không có tần số xung nhịp của bộ xử lý. Thời gian giám sát điển hình là 18 ms. Bạn có thể kết nối bộ chia tỷ lệ trước với bộ đếm thời gian theo dõi và tăng khoảng thời gian của nó lên tới 2 giây.

Một chức năng khác của bộ đếm thời gian theo dõi là bật bộ xử lý từ chế độ năng lượng thấp, trong đó bộ xử lý được chuyển bằng lệnh SLEEP. Ở chế độ này, PIC16C84 tiêu thụ rất ít dòng điện - khoảng 1 µA. Bạn có thể chuyển từ chế độ này sang chế độ làm việc bằng một sự kiện bên ngoài là nhấn nút, kích hoạt cảm biến hoặc bằng bộ hẹn giờ theo dõi.

BỘ TẠO ĐỒNG HỒ Bốn loại bộ tạo xung nhịp có thể được sử dụng cho các bộ vi điều khiển thuộc họ PIC: Bộ cộng hưởng thạch anh XT Bộ cộng hưởng thạch anh cao tần HS LP vi tiêu thụ tinh thể RC Quá trình lập trình chip mạch RC. Nếu các tùy chọn XT, HS và LP được đặt, bộ cộng hưởng thạch anh hoặc gốm hoặc nguồn đồng hồ bên ngoài được kết nối với vi mạch và nếu tùy chọn RC được đặt, một điện trở và tụ điện sẽ được kết nối. Tất nhiên, gốm và đặc biệt là bộ cộng hưởng thạch anh chính xác và ổn định hơn nhiều, nhưng nếu không cần độ chính xác cao về thời gian, việc sử dụng máy phát RC có thể giảm chi phí và kích thước của thiết bị.

MẠCH RESET Dòng vi điều khiển PIC sử dụng mạch reset bật nguồn bên trong kết hợp với bộ hẹn giờ khởi động bộ tạo dao động, loại bỏ sự cần thiết của điện trở và tụ điện truyền thống trong hầu hết các tình huống.

Chỉ cần kết nối đầu vào MCLR với nguồn điện. Nếu có khả năng xảy ra đột biến hoặc đột biến khi bật nguồn, tốt nhất nên sử dụng điện trở sê-ri 100-300 ohm. Nếu quá trình tăng tốc nguồn rất chậm (dưới 70 ms) hoặc bạn đang chạy ở tốc độ xung nhịp rất thấp, thì phải sử dụng mạch đặt lại điện trở và tụ điện truyền thống.

TỪ LÝ THUYẾT ĐẾN THỰC TIỄN ...

Chúng tôi đã làm quen ngắn gọn với các thành phần chính tạo nên bộ vi điều khiển họ PIC. Bây giờ chúng ta hãy chuyển sang các bài tập thực tế.

Chúng tôi sẽ viết các chương trình ngắn, lắp ráp chúng, viết chúng vào một vi mạch và xem điều gì sẽ xảy ra.

Để làm được điều này chúng ta cần những thứ sau: - chip PIC16C84; - trình biên dịch MPALC; - Lập trình viên PROPIC; - nguồn điện một chiều hoặc xoay chiều 18-36 V; - bảng tạo mẫu với thiết bị hiển thị.

Sơ đồ nguyên lý của thiết bị hiển thị mà chúng ta sẽ sử dụng để minh họa hoạt động của các lệnh cơ bản của PIC16C84, được thể hiện trong Hình 5. (nên được vẽ) Như bạn có thể thấy, thiết bị chỉ bao gồm 8 đèn LED với các điện trở giới hạn dòng điện và các yếu tố thiết lập tần số. Mỗi đầu ra của vi điều khiển họ PIC có thể điều khiển trực tiếp LED mà không cần thêm bộ khuếch đại.

PIC là gì?

Hãy bắt đầu bằng cách mô tả mã cơ bản sẽ được sử dụng trong các ví dụ của chúng tôi. Khi bạn bắt đầu viết mã cho dự án của mình, phần tiêu đề (tất cả mã cho đến dòng ORG 0) phải dành riêng cho ứng dụng của bạn. Phần tiêu đề xác định tên logic cho tất cả các tài nguyên được sử dụng trong dự án - cổng, biến bit và byte và thanh ghi. Tiêu đề của chúng tôi cũng đặt các cổng I/O sao cho tất cả các bit của cổng A và B sẽ được đặt làm đầu ra sau khi thực hiện các lệnh sau: MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB Khi bật nguồn, PIC16C84 đặt tất cả các bit của cổng A và B để nhập và bắt đầu thực hiện chương trình từ địa chỉ 000h. Mã cơ bản được hiển thị trong Hình 6. (cần vẽ) Một cái gì đó như thế này: ; Mã cơ sở mẫu cho chương trình demo; DANH SÁCH P=16C84, E=2 ; ; Phần tiêu đề ; ; mô tả các thanh ghi vận hành TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; Thanh ghi I/O CNTRLPORT EQU 05h DATAPORT EQU 06h ; Vị trí RAM SCRATCH EQU 0Ch DIGIT EQU 0Dh ; bit thanh ghi STATUS C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h ; các thanh ghi điều khiển TRISA EQU 85h TRISB EQU 86h ; từ khởi tạo cho cổng I/O INITA EQU B'00000000' INITB EQU B'00000000' ; ; phần làm việc ; ; bắt đầu mã thực thi ORG 0 GOTO BEGIN ; ORG 100 giờ BẮT ĐẦU MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; Dán mã ví dụ vào đây; KẾT THÚC ; Tham khảo lại Hình 4 nếu cần trong khi chúng ta thảo luận về mã cơ bản. Đầu tiên, tất cả các dòng bắt đầu bằng ";" được coi là nhận xét của trình biên dịch chương trình. Hãy chuyển sang biểu thức TMR0. Chúng tôi đã nói với trình hợp dịch rằng mỗi khi gặp từ TMR0, nó sẽ thay thế giá trị 01h (01 hex). Từ "EQU" có nghĩa là bình đẳng. Vì vậy, chúng tôi đã gán TMR0 giá trị 1h. Như bạn có thể thấy trong Hình 4, thanh ghi TMR0 thực sự có địa chỉ 1h. Bạn có thể sử dụng 01h mỗi khi bạn muốn giải quyết thanh ghi TMR0, nhưng điều này sẽ khó gỡ lỗi hơn nhiều vì bạn phải nhớ rằng 01h có nghĩa là RTCC mọi lúc. Bạn cũng có thể có dữ liệu bằng 01h. Việc sử dụng các tên tượng trưng giúp loại bỏ sự mơ hồ và làm cho văn bản nguồn dễ đọc hơn. Bạn cũng có thể xem các biểu thức cho các thanh ghi PC, STATUS và FSR. Tên PC tương ứng với địa chỉ thanh ghi 02h, tên STATUS tương ứng với địa chỉ thanh ghi 03h, tên FSR tương ứng với địa chỉ thanh ghi 04h, v.v. Chúng tôi cũng đã đặt tên cho các cổng I/O, CNTRLPORT (05h) và DATAPORT (06h). Các ô RAM cũng có thể có tên. Chúng tôi đã chọn tên "SCRATCH" cho ô ở 0Ch và "DIGIT" cho ô ở 0Dh. Nếu bạn đọc đến cuối văn bản này, bạn sẽ thấy rằng chúng tôi không sử dụng PC trực tiếp ở bất kỳ đâu, mặc dù tên này đã được xác định. Không có sai lầm nào trong việc này - bạn có thể xác định tên và sau đó không sử dụng chúng, mặc dù tất nhiên, bạn không thể sử dụng tên nếu nó chưa được xác định trước đó. Đừng lo lắng quá nhiều về điều này - công việc của trình biên dịch chương trình là kiểm tra văn bản theo tất cả các quy tắc và bạn sẽ nhận được thông báo lỗi nếu có gì đó không khớp. Bạn không chỉ có thể đặt tên cho các thanh ghi mà còn có thể đặt tên cho các bit riêng lẻ trong các thanh ghi. Chú ý phần thiết lập thanh ghi TRẠNG THÁI. Hình 7 cho thấy thanh ghi STATUS bao gồm những gì. (Hình 3.9.1 trên trang 2-544) Ký hiệu C được đặt thành 0h vì C, hoặc CARRY, là bit XNUMX của từ trạng thái STATUS. Mỗi khi chúng ta cần kiểm tra bit CARRY (bit 0), chúng ta sẽ sử dụng ký tự được xác định trước "C". Mỗi khi chúng ta muốn truy cập bit 2, hoặc bit ZERO, chúng ta sẽ sử dụng ký tự "Z" thay vì 02h. Bạn có thể xác định cấu trúc bit đầy đủ của một thanh ghi, ngay cả khi bạn không sử dụng tất cả chúng sau đó. Bây giờ chúng ta đã rõ cách mô tả các thanh ghi và chúng ta có thể chuyển sang phần mã thực thi. Trước khi bắt đầu mã thực thi, chúng ta phải đặt biểu thức ORG thành 0. Đây là một con trỏ tới trình hợp dịch mã mà mã sau biểu thức này bắt đầu tại địa chỉ EEPROM bằng không. Biểu thức "ORG" được sử dụng để phân bổ các đoạn mã cho các địa chỉ khác nhau trong kích thước EEPROM. Một biểu thức ORG khác xuất hiện trước nhãn BEGIN tại địa chỉ 100h, như được cho bởi biểu thức ORG 100h. Mã thực thi phải kết thúc bằng lệnh END, nghĩa là không có lệnh thực thi nào theo lệnh này. Khi bật nguồn, PIC16C84 nhảy đến địa chỉ 000h. Lệnh đầu tiên được bộ xử lý thực hiện là lệnh GOTO BEGIN, lệnh này sẽ chuyển điều khiển đến địa chỉ 100h và công việc tiếp theo sẽ tiếp tục từ địa chỉ này. BEGIN là tên nhãn do người dùng chọn (nhãn phải luôn bắt đầu ở vị trí dòng đầu tiên) mà trình hợp dịch mã sử dụng làm tham chiếu. Trong quá trình hoạt động, trình hợp dịch xác định vị trí của nhãn BEGIN và ghi nhớ rằng nếu gặp lại tên này, địa chỉ của nhãn sẽ được thay thế cho nó. Lệnh CALL và GOTO sử dụng nhãn cho các liên kết trong văn bản nguồn. Bây giờ chúng ta hãy xem xét các lệnh sau được thực thi bởi bộ xử lý. Lệnh MOVLW INITA tải giá trị được gán cho tên INITA vào thanh ghi làm việc W. Giá trị này được chỉ định trong tiêu đề và bằng B'00000000', là 00h. Các ký tự B 'có nghĩa là dữ liệu được cung cấp ở định dạng nhị phân. Người ta có thể viết 0 (thập phân) hoặc 0h (thập lục phân) ở cùng một vị trí và nhận được kết quả tương tự. Biểu diễn nhị phân sẽ thuận tiện hơn khi sử dụng trong những trường hợp khi một hoạt động với các bit trong thanh ghi được mong đợi. Lệnh MOVWF TRISA sau đây tải giá trị từ thanh ghi làm việc W vào thanh ghi điều khiển cấu hình cổng TRISA A. Đặt một bit của thanh ghi này thành 0 chỉ định rằng bit A của cổng tương ứng là một đầu ra. Trong trường hợp của chúng tôi, tất cả các bit của cổng A được đặt thành đầu ra. Lưu ý rằng cổng A chỉ có 5 bit và 3 bit trên của giá trị được ghi vào thanh ghi TRISA, cũng có 5 bit, không được sử dụng. Ví dụ, nếu chúng ta muốn đặt bit thấp của cổng A làm đầu vào, chúng ta sẽ đặt giá trị của INITA thành B'00000001' trong phần mô tả thanh ghi. Nếu trong quá trình thực hiện chương trình, chúng tôi cần xác định lại việc gán các bit cổng riêng lẻ, chẳng hạn như trong quá trình truyền hai chiều, thì cách thuận tiện nhất là chỉ định tất cả các từ cấu hình cần thiết trong phần mô tả, như chúng tôi đã làm cho INITA và INITB. Hai lệnh tiếp theo MOVLW INITB và MOVWF TRISB xác định cấu hình của cổng B. Chúng tôi có thể tiết kiệm tiền bằng cách không viết lệnh MOVLW INITB, bởi vì trong trường hợp của chúng tôi, INITB cũng là 0h. Tuy nhiên, chúng tôi đã không làm điều này, bởi vì nó có thể dẫn đến các lỗi khó tìm nếu sau đó chúng tôi cần thay đổi phép gán của bất kỳ bit nào. Thay vì chỉ thay đổi một bit ở một cổng, hai bit có cùng số ở hai cổng sẽ thay đổi. Do đó, trong khi chương trình chưa kết thúc, bạn không nên tiết kiệm như vậy, mặc dù cuối cùng, ở giai đoạn tối ưu hóa mã, các lần lặp lại như vậy có thể được loại bỏ. Chúng ta đã làm gì? 1. Với các dòng EQU, chúng tôi đã nói với trình biên dịch tên biểu tượng mà chúng tôi sẽ sử dụng. 2. Chúng tôi đã đặt vectơ đặt lại thành địa chỉ 000h. 3. Chúng tôi đã đặt địa chỉ bắt đầu thực hiện chương trình từ nhãn BEGIN thành địa chỉ 100h. 4. Chúng tôi đã cấu hình tất cả các bit của cổng A và B làm đầu ra. Bây giờ chúng ta có thể chèn mã ví dụ vào giữa phần đầu và phần cuối của mã cơ sở thay vì dòng nhận xét "Chèn mã ví dụ vào đây". Chúng tôi sẽ thay thế dòng này bằng các lệnh thực, lắp ráp chương trình kết quả, viết nó vào một vi mạch, sắp xếp lại vi mạch trên bảng tạo mẫu bằng một thiết bị chỉ báo và xem điều gì sẽ xảy ra. CHƯƠNG TRÌNH ĐẦU TIÊN Đối với chương trình đầu tiên, chúng ta chỉ cần ba lệnh: MOVLW k MOVWF f GOTO k Chúng ta đã sử dụng các lệnh này trong phần đầu của mã cơ bản. Lệnh MOVLW tải một ký tự hoặc hằng số byte vào thanh ghi công việc W. Lệnh MOVWF sau đây di chuyển một byte từ thanh ghi làm việc W sang thanh ghi đã cho f. Lệnh GOTO chuyển quyền điều khiển đến địa chỉ k. Chương trình sau ghi giá trị 01010101 vào thanh ghi làm việc W và sau đó ghi nội dung của nó vào cổng B. Sau khi bắt đầu chương trình này, bạn sẽ thấy bốn đèn LED phát sáng. MOVLW B'01010101' ;nạp 01010101 vào thanh ghi W MOVWF DATAPORT ;ghi W vào cổng B (DATAPORT) GOTO $ ;vòng lặp mãi Chỉ thị hợp ngữ "$" có nghĩa là giá trị hiện tại của bộ đếm chương trình (PC). Do đó, lệnh GOTO $ có nghĩa là nhảy đến vị trí hiện tại của chúng ta. Một vòng lặp như vậy là vô tận, vì không có cách nào (ngoài cách gián đoạn) để thoát ra khỏi nó. Lệnh GOTO $ thường được sử dụng để dừng mã trong khi gỡ lỗi. LẮP RÁP Chúng tôi sẽ sử dụng trình biên dịch mã macro MPALC, vì nó được MICROCHIP phân phối miễn phí và chứa tất cả các tính năng chúng tôi cần. Nếu bạn muốn sử dụng một trình biên dịch chương trình khác, hãy sử dụng mô tả của nó để biên dịch chương trình của chúng ta. Dòng lệnh để chạy trình hợp dịch macro MPALC rất đơn giản: MPALC <source_text> [options] trong đó <source_text> là tên của tệp chứa văn bản nguồn sẽ được hợp ngữ và có thể có khá nhiều tùy chọn. Mô tả đầy đủ về các tùy chọn được cung cấp bởi trình biên dịch chương trình trên tùy chọn /? Lúc đầu, chúng tôi không cần chỉ định bất kỳ tùy chọn nào. Điều duy nhất chúng ta vẫn cần làm là chỉ định loại bộ xử lý mà chương trình của chúng ta được viết và loại lỗi mà trình biên dịch chương trình sẽ tạo ra. Điều này được thực hiện bằng cách sử dụng chỉ thị trình biên dịch chương trình LIST (Hình. 6). Phần mở rộng tệp nguồn mặc định là .ASM. Một phần mở rộng khác phải được chỉ định rõ ràng. Vì vậy, hãy lấy tệp EXAMPLE.ASM chứa văn bản được hiển thị trong Hình 6 và chạy trình biên dịch chương trình: VÍ DỤ MPALC Kết quả của trình biên dịch chương trình là các tệp có phần mở rộng sau được tạo: * Tệp đối tượng OBJ * Tệp liệt kê LST * Lỗi ERL và tệp cảnh báo * Tệp biểu tượng SYM Tệp đối tượng được tạo ở định dạng thập lục phân và chứa mã phải được ghi vào chip. Tệp danh sách chứa danh sách đầy đủ của chương trình cùng với mã khởi động. Tệp lỗi và cảnh báo ghi lại tất cả các lỗi và cảnh báo xảy ra trong quá trình lắp ráp. Chúng cũng có mặt trong tệp danh sách. Bảng nhãn tượng trưng, ​​​​được ghi vào tệp tượng trưng, ​​​​được thiết kế để tiếp tục làm việc với trình gỡ lỗi. Sau khi xử lý chương trình của chúng ta, trình hợp dịch sẽ đưa ra thông báo "Không tìm thấy lỗi nào bởi trình hợp dịch", nghĩa là không tìm thấy lỗi nào. Tệp lỗi không nên được tạo. Nếu trình biên dịch mã chương trình của bạn tạo ra bất kỳ thông báo lỗi nào hoặc các tệp EXAMPLE.OBJ, EXAMPLE.LST và EXAMPLE.SYM không được tạo, hãy kiểm tra lại xem bạn đã làm mọi thứ đúng chưa. LẬP TRÌNH Bây giờ bạn có một tệp đối tượng, EXAMPLE.OBJ, tệp này phải được ghi vào chip. Quá trình ghi được thực hiện với sự trợ giúp của lập trình viên và chương trình PROPIC. Dòng lệnh để chạy chương trình PROPIC tương tự như dòng để chạy trình biên dịch chương trình: PROPIC <object_file> [options] trong đó <object_file> là tên của tệp đối tượng được tạo bởi trình biên dịch chương trình và các tùy chọn xác định chế độ ghi vào Con chip. Danh sách các tùy chọn được đưa ra bởi tùy chọn /? Như trong trường hợp trình biên dịch chương trình hợp ngữ, lúc đầu chúng ta không cần chỉ định bất kỳ tùy chọn nào. Lấy lập trình viên, kết nối cáp của nó với đầu nối cổng máy in (đến cổng máy in đầu tiên nếu máy của bạn có 2 hoặc 3 cổng máy in).

PIC là gì? PIC là gì?

Lấy nguồn điện 18...36 V DC hoặc AC có khả năng cung cấp tới 100 mA và kết nối nó với bộ lập trình. Chuẩn bị chip PIC16C84, nhưng chưa cắm nó vào ổ cắm bộ lập trình. Bây giờ bạn có thể bắt đầu lập trình viên:

VÍ DỤ ĐỀ XUẤT { nên được chèn vào đây về cách chương trình của lập trình viên hoạt động. } Bây giờ bạn đã có một con chip được lập trình và bạn có thể thấy nó sẽ hoạt động như thế nào. KIỂM TRA

Lấy một bảng mạch bánh mì và lắp ráp trên đó mạch điện như trong Hình 5. Không có bộ phận quan trọng nào trong mạch điện này. Tất cả các điện trở có thể có độ lệch so với danh nghĩa + -30%, đèn LED - bất kỳ loại nào có dòng điện định mức không quá 10 mA. Để cài đặt chip PIC16C84, hãy sử dụng ổ cắm. Để cấp nguồn cho mạch của chúng tôi, bạn có thể sử dụng cùng một nguồn điện mà bạn đã sử dụng khi lập trình vi mạch. Bạn cũng có thể sử dụng nguồn điện phòng thí nghiệm 5 V. Trong trường hợp này, không cần bộ ổn định KR142EH5A, cầu đi-ốt và tụ điện và điện áp 5 V được cung cấp cho điểm 2 trong sơ đồ.

Sau khi mạch được lắp ráp, hãy kiểm tra cẩn thận xem mọi thứ đã được lắp ráp chính xác chưa, đèn LED đã được lắp đúng cực chưa, nguồn cấp cho vi mạch có đến đúng chân và đúng cực hay không. Lấy con chip đã lập trình, cắm nó vào ổ cắm trên bảng mạch và bật nguồn. 4 đèn LED sẽ sáng lên (sau một đèn). Chương trình đầu tiên của bạn đang hoạt động! BỘ LỆNH PIC

Bây giờ bạn đã học cách lắp ráp chương trình, ghi chương trình vào chip và kiểm tra nó trên breadboard, chúng ta có thể chuyển sang mô tả toàn bộ bộ hướng dẫn cho bộ vi điều khiển họ PIC. Chúng tôi sẽ tiếp tục tập trung vào PIC16C84, mặc dù hầu hết mọi thứ chúng tôi sẽ nói đến đều có thể áp dụng cho các bộ vi điều khiển khác thuộc họ PIC. Trong quá trình mô tả, chúng tôi sẽ tạo các chương trình ngắn để hiểu rõ hơn về cách thức hoạt động của một số lệnh nhất định. Bạn có thể cắm các chương trình này vào mã cơ sở, lắp ráp chúng, đặt chúng lên chip và cắm chip vào bảng mạch khung và xem nó hoạt động như thế nào. Nếu mọi thứ hoàn toàn rõ ràng với bạn trong đoạn tiếp theo, bạn không thể thử nó mà hãy chuyển thẳng sang đoạn tiếp theo. KHÔNG

Hãy bắt đầu mô tả của chúng ta bằng lệnh NOP. Thật khó để thấy đầu ra của lệnh này vì nó không làm gì cả. Lệnh này thường được sử dụng trong các vòng lặp trễ thời gian hoặc để tinh chỉnh thời gian thực hiện của một phần cụ thể của chương trình. CLRW

Lệnh này xóa thanh ghi đang hoạt động W. Hãy thêm một dòng vào ví dụ của chúng tôi và xem tất cả các đèn LED đều sáng lên.

MOVLW B'01010101' ; nạp 01010101 vào thanh ghi W

CLRW ;xóa thanh ghi W

MOVWF DATAPORT ; ghi W vào cổng B (DATAPORT)

GOTO $ ; lặp mãi CLRF f

CLRF làm cho bất kỳ thanh ghi nào CLRW làm cho thanh ghi đang hoạt động W. Lệnh sau sẽ đặt cổng B thành 0h.

CLRF DATAPORT ;xóa cổng B (DATAPORT) SUBWF f,d ADDWF f,d

Trừ thanh ghi làm việc W từ bất kỳ thanh ghi nào f. Lệnh này cũng đặt các cờ CARRY, DIGIT CARRY và ZERO trong thanh ghi TÌNH TRẠNG. Sau khi thực hiện lệnh, bạn có thể kiểm tra các dấu hiệu này và xác định xem kết quả là 0, dương hay âm. Ký tự d sau dấu phẩy có nghĩa là địa chỉ nơi kết quả của lệnh sẽ được đặt. Nếu d=1, thì kết quả được đặt trong thanh ghi công việc W, và nếu d=XNUMX, thì kết quả được ghi vào thanh ghi f được sử dụng trong lệnh.

Trong ví dụ của chúng ta, giá trị 0FFh được nạp vào thanh ghi SCRATCH và giá trị 01h được nạp vào thanh ghi W. Sau đó, lệnh SUBWF được thực hiện và kết quả được hiển thị trên đèn LED.

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF SCRATCH ; nạp nội dung của W vào thanh ghi SCRATCH

MOVLW 01h ; nạp 01h vào thanh ghi W

SUBWF SCRATCH,0 ; đèn LED trừ sẽ hiển thị 11111110 trong đó 1 tắt và 0 bật.

Lệnh ADDWF hoạt động theo cùng một cách, thêm thanh ghi làm việc W vào bất kỳ thanh ghi f nào và đặt các cờ giống nhau. Ví dụ sau minh họa cách hoạt động của lệnh ADDWF.

MOVLW 0h ; nạp 0 vào thanh ghi W

MOVWF SCRATCH ; nạp nội dung của W vào thanh ghi SCRATCH

MOVLW 1h ; nạp 01h vào thanh ghi W

ADDWF SCRATCH,0 ; các đèn LED bổ sung sẽ hiển thị 00000001.

Lưu ý rằng có một "0" phía trước giá trị FFh trong ví dụ về phép trừ. Ký hiệu "0" cho trình biên dịch mã chương trình có nghĩa đây là một số, không phải nhãn. Nếu không có ký hiệu 0, thì trình biên dịch chương trình sẽ bắt đầu tìm nhãn có tên FFh, nhãn này không tồn tại trong chương trình này và theo đó, sẽ xảy ra lỗi. ký tự "h" theo sau giá trị 0FF có nghĩa là giá trị được chỉ định ở định dạng thập lục phân. SUBLW k ADDLW k

Hai lệnh này hoạt động theo cách chính xác như mô tả ở trên, ngoại trừ thao tác được thực hiện giữa thanh ghi làm việc W và hằng số byte được chỉ định trong lệnh. Lệnh SUBLW trừ thanh ghi làm việc W khỏi hằng số k, và lệnh ADDLW thêm thanh ghi làm việc W vào hằng số k. Các lệnh này cũng đặt các cờ CARRY, DIGIT CARRY và ZERO. Kết quả của lệnh được đặt trong thanh ghi làm việc W. Ví dụ sau sẽ giảm SCRATCH đi 5.

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF SCRATCH ; nạp nội dung của W vào thanh ghi SCRATCH

SUBLW 05h ; trừ 5 từ sổ đăng ký làm việc

MOVWF SCRATCH ;tải nội dung mới của đèn LED SCRATCH sẽ hiển thị 11111010. DECF f,d INCF f,d

Lệnh DECF giảm thanh ghi đã cho đi 1 và INCF tăng thanh ghi đã cho lên 1. Kết quả có thể được đặt trở lại thanh ghi đã cho (với d=1) hoặc thanh ghi làm việc W (với d=0). Do việc thực hiện các lệnh này, dấu ZERO có thể được đặt trong thanh ghi TÌNH TRẠNG. Dưới đây là một ví dụ về việc sử dụng các lệnh này:

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF SCRATCH ; nạp nội dung của W vào thanh ghi SCRATCH

DECF SCRATCH,0 ;giảm SCRATCH đi 1

Ví dụ này sẽ tăng SCRATCH từ 0 lên 1.

CLRF CÀO ; xóa CÀO

INCF SCRATCH,0 ;Tăng SCRATCH lên 1 IORWF f,d ANDWF f,d XORWF f,d

Ba lệnh này thực hiện các phép toán logic OR, AND và EXCLUSIVE OR. Phép toán OR bổ sung logic thường được sử dụng nhất để đặt các bit riêng lẻ trong các thanh ghi. Sau đó, các bit này được đặt lại bằng phép toán logic AND. Khi phép toán EXCLUSIVE OR được thực hiện trên các bit giống hệt nhau, kết quả là 0. Do đó, phép toán EXCLUSIVE OR thường được sử dụng để kiểm tra trạng thái (đặt hoặc xóa) của các bit nhất định trong một đăng ký. Quy trình sau sẽ đặt bit 1 trên cổng B bằng lệnh IORWF:

CLRF DATAPORT ;xóa cổng B

MOVLW B'00000010' ;đặt mặt nạ trong thanh ghi W

IORWF DATAPORT,1 ; đặt bit trong cổng B bằng mặt nạ W

GOTO $ ;vòng lặp mãi mãi Các đèn LED sẽ hiển thị 00000010. Bây giờ xóa 2 bit bằng lệnh ANDWF:

MOVLW B'11111111' ; Nạp 0FFh vào thanh ghi W

MOVWF DATAPORT ; đặt tất cả các bit trong cổng B

MOVLW B'00000101' ;đặt mặt nạ trong thanh ghi W

ANDWF DATAPORT,1 ; xóa các bit trong cổng B bằng mặt nạ W

GOTO $ ;vòng lặp mãi mãi Các đèn LED sẽ hiển thị 00000101.

Giả sử chúng ta đã sử dụng thanh ghi SCRATCH và muốn biết liệu nó có bằng 04h hay không. Đây là thời điểm tốt để sử dụng lệnh XORWF:

MOVLW 04h ; nạp 04h vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

XORWF SCRATCH,0 ; kiểm tra xem W và SCRATCH có bằng nhau không Vì SCRATCH và W bằng nhau nên kết quả của thao tác XORWF bằng XNUMX (tất cả các đèn LED đều sáng). Thanh ghi STATUS sẽ đặt bit ZERO, sau đó chương trình thực có thể kiểm tra và xử lý. IORLW k ANDLW k XORLW k

Ba lệnh này thực hiện các hành động tương tự như các đối tác của chúng được mô tả ở trên, ngoại trừ hoạt động được thực hiện giữa thanh ghi làm việc W và mặt nạ được chỉ định trong lệnh. Kết quả của việc thực hiện lệnh được đặt trong thanh ghi làm việc W. Ví dụ:

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

ANDLW 040h; để lại bit thứ 6, đèn LED sẽ hiển thị 01000000.

MOVLW 10h ; nạp 10h vào thanh ghi W

IORLW 09h ; đặt bit 0 và 3 đèn LED sẽ hiển thị 00011001.

MOVLW B'00100000' ; nạp 40h vào thanh ghi W

XORLW B'11111111' ;Đảo ngược W LED hiển thị 11011111. MOVF f,d

Lệnh này chủ yếu được sử dụng để di chuyển một thanh ghi sang thanh ghi làm việc W (d=0). Nếu bạn đặt d=1, thì lệnh này sẽ tải thanh ghi vào chính nó, nhưng bit ZERO trong thanh ghi STATUS sẽ được đặt theo nội dung của thanh ghi. Ví dụ: chúng tôi muốn tải vào thanh ghi SCRATCH 0Fh, sau đó tải thanh ghi SCRATCH vào thanh ghi làm việc W.

MOVLW 0Fh ; Nạp 0Fh vào thanh ghi làm việc W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

CLRW ;xóa W

MOVF SCRATCH,0 ; Nạp SCRATCH vào thanh ghi W

MOVF SCRATCH,1 Bit ZERO của thanh ghi STATUS sẽ được thiết lập nếu điều kiện được đáp ứng (SCRATCH = 0h). COMF f, d

Lệnh này đảo ngược bất kỳ thanh ghi nào. Khi d=0, kết quả được nhập vào thanh ghi làm việc W, và khi d=1, nội dung của thanh ghi xác định được đảo ngược. Ví dụ, hãy đảo ngược giá trị 01010101:

MOVLW B'01010101' ; nạp 01010101 vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

COMF SCRATCH,0 ; đảo ngược đèn LED SCRATCH sẽ hiển thị 10101010. DECFSZ f,d INCFSZ f,d

Khi bạn có được một số kinh nghiệm với trình biên dịch chương trình PIC, bạn sẽ sử dụng các lệnh này rất thường xuyên. Với d=1, lệnh DECFSZ giảm đi một và INCFZ tăng thanh ghi đã chỉ định lên một và bỏ qua lệnh tiếp theo nếu thanh ghi trở thành 0. Với d=XNUMX, kết quả được ghi vào thanh ghi W và lệnh tiếp theo sẽ bị bỏ qua nếu thanh ghi đang làm việc W trở thành XNUMX. Các lệnh này được sử dụng để tạo thời gian trễ, bộ đếm, vòng lặp, v.v. Đây là một ví dụ điển hình của việc sử dụng vòng lặp: BẮT ĐẦU

MOVLW 0FFh ; nạp FFh vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W vào SCRATCH LOOP

DECFSZ SCRATCH,1 ;giảm SCRATCH đi 1

GOTO LOOP ; và lặp lại cho đến khi = 0

MOVF DIGIT ; nạp thanh ghi DIGIT trong W

MOVWF DATAPORT ; xuất ra đèn LED

DECF DIGIT,1 ; thanh ghi DIGIT giảm 1

GOTO START ; go to start Do đó, đèn LED sẽ nhấp nháy ở các tốc độ khác nhau. Đèn LED bậc thấp sẽ nhấp nháy thường xuyên nhất và đèn LED bậc cao sẽ nhấp nháy ít nhất. Với tần số xung nhịp là 4 MHz, tần số nhấp nháy của đèn LED ở bậc cao nhất sẽ xấp xỉ 8 Hz và mỗi đèn tiếp theo sẽ nhấp nháy với tần suất gấp đôi. Bây giờ hãy tìm hiểu làm thế nào chúng tôi đã làm điều đó. Lệnh DECFSZ ở đây hoạt động trong một vòng lặp trễ bao gồm hai lệnh - DECFSZ và GOTO LOOP. Bởi vì chúng tôi đã tải trước thanh ghi SCRATCH bằng 0FFh, vòng lặp này sẽ thực hiện 255 lần cho đến khi SCRATCH trở thành 4. Với tần số xung nhịp là 1 MHz, điều này mang lại độ trễ là 2 µs/lệnh * 255 lệnh * 510 = 1 µs. Trong thanh ghi DIGIT, chúng tôi không viết bất cứ thứ gì trước đó, vì vậy có thể có bất kỳ giá trị nào được hiển thị trên đèn LED trong lần vượt qua đầu tiên. Sau đó, thanh ghi DIGIT được giảm đi 256 và vòng lặp lặp lại từ đầu. Do đó, thanh ghi DIGIT lặp lại tất cả các giá trị trong 130 chu kỳ, tức là trong khoảng XNUMX ms.

Mã tương tự có thể được sử dụng với lệnh INCFSZ bằng cách thay đổi giá trị được nạp vào thanh ghi SCRATCH từ FFh thành 0h. Các đèn LED sẽ nhấp nháy theo cách tương tự nếu lệnh DECF được thay thế bằng lệnh INCF. SWAF f,d

Lệnh này hoán đổi các nibble trong bất kỳ thanh ghi nào. Đối với các lệnh khác, khi d=0 kết quả được ghi vào thanh ghi công việc W, và khi d=1 vẫn còn trong thanh ghi. Đây là một ví dụ đơn giản về việc sử dụng lệnh này:

MOVLW B'00001111' ; nạp 0Fh vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

SWAPF SCRATCH,0 ;swap nibbles Đèn LED sẽ hiển thị 11110000. RRF f,d RLF f,d

Có hai hướng dẫn dịch chuyển trong bộ hợp ngữ PIC - dịch chuyển phải qua bit CARRY của bất kỳ thanh ghi RRF nào và dịch chuyển trái qua bit CARRY của bất kỳ thanh ghi RRF nào. Đối với các lệnh khác, khi d=0 thì kết quả của phép dịch được ghi vào thanh ghi W, còn khi d=1 thì giữ nguyên trong thanh ghi. Các lệnh dịch chuyển được sử dụng để thực hiện các phép toán nhân và chia, để truyền dữ liệu nối tiếp và cho các mục đích khác. Trong mọi trường hợp, bit được dịch chuyển ra khỏi thanh ghi 8 bit được ghi vào bit CARRY trong thanh ghi STATUS và bit CARRY được ghi vào đầu kia của thanh ghi, tùy thuộc vào hướng dịch chuyển. Dịch trái ghi RLF CARRY vào bit ít quan trọng nhất của thanh ghi và dịch phải ghi RRF CARRY vào bit quan trọng nhất của thanh ghi.

TÌNH TRẠNG CLRF; thanh ghi TÌNH TRẠNG rõ ràng

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

RRF SCRATCH,0 ; dịch chuyển sang phải Đèn LED sẽ hiển thị 01111111 vì CARRY đã được tải vào bit cao. Bây giờ hãy di chuyển sang bên trái:

TÌNH TRẠNG CLRF; thanh ghi TÌNH TRẠNG rõ ràng

MOVLW 0FFH ; nạp 0FFh vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W trong SCRATCH

RLF SCRATCH,1 ;các đèn LED dịch chuyển sang trái sẽ hiển thị 11111110. BCF f,b BSF f,b

Các lệnh Clear BCF Bit và Set BSF Bit được sử dụng để thao tác trên các bit riêng lẻ trong các thanh ghi. Tham số b có nghĩa là số bit mà thao tác được thực hiện và có thể nhận các giá trị từ 0 đến 7. Hãy thử bật đèn LED bằng lệnh BCF:

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF DATAPORT; tắt đèn LED

BCF DATAPORT,7 ; xóa bit 7 trong cổng B

GOTO $ ;vòng lặp vĩnh viễn Thao tác này sẽ bật đèn LED tương ứng với bit 7. Hãy nhớ lại chúng ta đã làm điều tương tự với việc sử dụng mặt nạ và lệnh ANDWF. Sự khác biệt là các lệnh ANDWF và IORWF yêu cầu mặt nạ phải được tạo trước và lưu trữ trong một số thanh ghi, nhưng đồng thời chúng có thể đặt hoặc xóa nhiều bit cùng một lúc. Các lệnh BCF và BSF chỉ hoạt động trên một bit. Ngoài ra, các lệnh BCF và BSF không thay đổi thanh ghi TRẠNG THÁI, vì vậy chúng thường được sử dụng trong trường hợp không cần kiểm tra thanh ghi trạng thái tiếp theo. BTFSC f,b BTFSS f,b

Các lệnh nhảy có điều kiện BTFSC và BTFSS kiểm tra trạng thái của một bit đã cho trong bất kỳ thanh ghi nào và bỏ qua lệnh tiếp theo tùy thuộc vào kết quả. Lệnh BTFSC bỏ qua lệnh nếu bit được chỉ định rõ ràng và lệnh BTFSS nếu nó được đặt. Đây là một ví dụ đơn giản:

MOVLW 0FFh ; nạp 0FFh vào thanh ghi W

MOVWF DATAPORT; tắt đèn LED

MOVLW B'00000001' ; nạp 01h vào thanh ghi W

MOVWF SCRATCH ; nạp thanh ghi W vào SCRATCH LOOP

BTFSS CNTRLPORT,0 ;kiểm tra bit 0 trong CNTRLPORT

GOTO LOOP ; đợi cho đến khi bit 0 được đặt

BCF DATAPORT,7 ; bật đèn LED

GOTO $ ;vòng lặp mãi mãi Ví dụ này kiểm tra bit 0 của cổng A (chân chip 17) và nếu chân này được đặt ở mức cao, đèn LED sẽ bật. Hãy thử thay thế BTFSS bằng BTFSC trong ví dụ này. Đèn LED sẽ bật khi bit 0 của cổng A xuống mức thấp.

Trước đó chúng tôi đã đề cập đến khả năng kiểm tra các bit trạng thái trong thanh ghi STATUS. Điều này cũng được thực hiện với các lệnh BTFSS và BTFSC:

;Kiểm tra bit CARRY

BTFSS STATUS,C ; nếu C được đặt, bỏ qua GOTO

GOTO WHERE_EVER ; Bit ZERO được kiểm tra theo cách tương tự:

;Kiểm tra bit ZERO

BTFSS STATUS,Z ; nếu Z được đặt, bỏ qua GOTO

GOTO WHERE_EVER ; Có thể nói rằng bạn sẽ sử dụng những ví dụ này rất thường xuyên. GỌI k QUAY LẠI

Hai lệnh này được dùng để làm việc với các chương trình con. Lệnh CALL được sử dụng để chuyển đến chương trình con tại địa chỉ được chỉ định trong lệnh và lệnh RETURN được sử dụng để quay lại từ chương trình con. Cả hai lệnh được thực hiện trong 2 chu kỳ. Địa chỉ nơi đặt lệnh CALL được lưu trữ trong các thanh ghi được tổ chức đặc biệt gọi là ngăn xếp. Các thanh ghi này không thể truy cập được và chỉ được sử dụng cho các lệnh gọi và trả về chương trình con. Độ sâu ngăn xếp, tức là số thanh ghi đặc biệt là 8. Do đó, không thể thực hiện quá 8 lệnh gọi chương trình con lồng nhau từ chương trình chính. Sau khi chương trình con trở về, việc thực thi tiếp tục với lệnh tiếp theo sau CALL. Thanh ghi W và thanh ghi STATUS không được lưu khi chương trình con được gọi, vì vậy nếu cần, chúng có thể được lưu trong các vị trí bộ nhớ riêng biệt. Đây là một ví dụ đơn giản về việc sử dụng chương trình con: START

BSF DATAPORT,7 ; tắt đèn LED

CALL TURNON ; gọi chương trình con

BẮT ĐẦU ; đi để bắt đầu TURNON

BCF DATAPORT,7 ; bật đèn LED

RETURN ; quay lại từ chương trình con Kết quả là đèn LED sẽ nhấp nháy ở tần số khoảng 150 kHz. RETLW để RETFIE

Có thêm hai lệnh để trở về từ chương trình con. Lệnh RETLW trả về trong thanh ghi làm việc W hằng số được chỉ định trong lệnh này và lệnh RETFIE cho phép ngắt. Lệnh RETLW thường được sử dụng để tạo bảng giá trị. Hãy để thanh ghi làm việc W chứa một phần bù từ đầu bảng. Sau đó, bạn có thể lấy phần tử mong muốn theo quy trình sau:

MOVLW 02h ; đặt độ lệch

GỌI SHOWSYM ; gọi chương trình con

MOVWF DATAPORT ; xuất phần tử bảng sang cổng B

GOTO $ ; lặp mãi SHOWSYM

ADDWF PC; tính toán độ lệch bảng

RETLW 0AAh ; phần tử đầu tiên của bảng

RETLW 0BBh ; phần tử thứ 2 của bảng

RETLW 0CCh ; Đèn LED vào bảng thứ 3 sẽ hiển thị 10111011. CÁC LỆNH ĐẶC BIỆT

Chúng tôi vẫn đề cập đến hai lệnh đặc biệt - CLRWDT và SLEEP. Lệnh CLRWDT nhằm thiết lập lại bộ đếm thời gian giám sát, mục đích mà chúng ta đã thảo luận. Lệnh này phải có mặt trong các phần như vậy của chương trình để thời gian thực hiện chương trình giữa hai lệnh CLRWDT liền kề không vượt quá bộ đếm thời gian giám sát. Lệnh SLEEP nhằm đặt bộ xử lý ở chế độ năng lượng thấp. Sau khi thực hiện lệnh này, bộ tạo xung nhịp của bộ xử lý bị tắt và bộ xử lý có thể được chuyển trở lại chế độ hoạt động bằng đầu vào đặt lại hoặc bằng bộ hẹn giờ giám sát hoặc bằng cách gián đoạn. PHẦN KẾT LUẬN

Bài viết này không khẳng định là một mô tả đầy đủ về khả năng của vi điều khiển PIC16C84. Để làm điều này, bạn nên đọc mô tả kỹ thuật của nó. Ngoài ra, để hiểu tất cả các khả năng của trình hợp ngữ MPALC, macro, tùy chọn, v.v. Nó sẽ hữu ích cho bạn để đọc hướng dẫn của mình. Để đặt chính xác tất cả các tùy chọn cần thiết, bạn nên đọc hướng dẫn sử dụng lập trình viên. Các ví dụ ứng dụng của vi điều khiển sẽ cung cấp cho bạn cơ sở vững chắc cho các dự án độc lập. Nếu có bất kỳ câu hỏi nào, bạn có thể liên hệ với trung tâm hỗ trợ khu vực dành cho các sản phẩm MICROCHIP theo địa chỉ sau: Moscow, Rubtsovskaya nab. 3 văn phòng 502, điện thoại. (095)-263-9930 Tại đây họ sẽ luôn sẵn sàng giải đáp mọi thắc mắc của bạn. Bạn cũng có thể nhận các phiên bản phần mềm mới, ví dụ ứng dụng, thông tin tham khảo tại BBS khu vực bằng cách gọi (095)-162-8405

QUẢNG CÁO micro BBS

Xuất bản: N. Bolshakov, rf.atnn.ru

Xem các bài viết khác razdela Bộ vi điều khiển.

Đọc và viết hữu ích bình luận về bài viết này.

<< Quay lại

Tin tức khoa học công nghệ, điện tử mới nhất:

Máy tỉa hoa trong vườn 02.05.2024

Trong nền nông nghiệp hiện đại, tiến bộ công nghệ đang phát triển nhằm nâng cao hiệu quả của quá trình chăm sóc cây trồng. Máy tỉa thưa hoa Florix cải tiến đã được giới thiệu tại Ý, được thiết kế để tối ưu hóa giai đoạn thu hoạch. Công cụ này được trang bị cánh tay di động, cho phép nó dễ dàng thích ứng với nhu cầu của khu vườn. Người vận hành có thể điều chỉnh tốc độ của các dây mỏng bằng cách điều khiển chúng từ cabin máy kéo bằng cần điều khiển. Cách tiếp cận này làm tăng đáng kể hiệu quả của quá trình tỉa thưa hoa, mang lại khả năng điều chỉnh riêng cho từng điều kiện cụ thể của khu vườn, cũng như sự đa dạng và loại trái cây được trồng trong đó. Sau hai năm thử nghiệm máy Florix trên nhiều loại trái cây khác nhau, kết quả rất đáng khích lệ. Những nông dân như Filiberto Montanari, người đã sử dụng máy Florix trong vài năm, đã báo cáo rằng thời gian và công sức cần thiết để tỉa hoa đã giảm đáng kể. ... >>

Kính hiển vi hồng ngoại tiên tiến 02.05.2024

Kính hiển vi đóng vai trò quan trọng trong nghiên cứu khoa học, cho phép các nhà khoa học đi sâu vào các cấu trúc và quá trình mà mắt thường không nhìn thấy được. Tuy nhiên, các phương pháp kính hiển vi khác nhau đều có những hạn chế, trong đó có hạn chế về độ phân giải khi sử dụng dải hồng ngoại. Nhưng những thành tựu mới nhất của các nhà nghiên cứu Nhật Bản tại Đại học Tokyo đã mở ra những triển vọng mới cho việc nghiên cứu thế giới vi mô. Các nhà khoa học từ Đại học Tokyo vừa công bố một loại kính hiển vi mới sẽ cách mạng hóa khả năng của kính hiển vi hồng ngoại. Thiết bị tiên tiến này cho phép bạn nhìn thấy cấu trúc bên trong của vi khuẩn sống với độ rõ nét đáng kinh ngạc ở quy mô nanomet. Thông thường, kính hiển vi hồng ngoại trung bị hạn chế bởi độ phân giải thấp, nhưng sự phát triển mới nhất của các nhà nghiên cứu Nhật Bản đã khắc phục được những hạn chế này. Theo các nhà khoa học, kính hiển vi được phát triển cho phép tạo ra hình ảnh có độ phân giải lên tới 120 nanomet, cao gấp 30 lần độ phân giải của kính hiển vi truyền thống. ... >>

Bẫy không khí cho côn trùng 01.05.2024

Nông nghiệp là một trong những lĩnh vực quan trọng của nền kinh tế và kiểm soát dịch hại là một phần không thể thiếu trong quá trình này. Một nhóm các nhà khoa học từ Viện nghiên cứu khoai tây trung tâm-Hội đồng nghiên cứu nông nghiệp Ấn Độ (ICAR-CPRI), Shimla, đã đưa ra một giải pháp sáng tạo cho vấn đề này - bẫy không khí côn trùng chạy bằng năng lượng gió. Thiết bị này giải quyết những thiếu sót của các phương pháp kiểm soát sinh vật gây hại truyền thống bằng cách cung cấp dữ liệu về số lượng côn trùng theo thời gian thực. Bẫy được cung cấp năng lượng hoàn toàn bằng năng lượng gió, khiến nó trở thành một giải pháp thân thiện với môi trường và không cần điện. Thiết kế độc đáo của nó cho phép giám sát cả côn trùng có hại và có ích, cung cấp cái nhìn tổng quan đầy đủ về quần thể ở bất kỳ khu vực nông nghiệp nào. Kapil cho biết: “Bằng cách đánh giá các loài gây hại mục tiêu vào đúng thời điểm, chúng tôi có thể thực hiện các biện pháp cần thiết để kiểm soát cả sâu bệnh và dịch bệnh”. ... >>

Tin tức ngẫu nhiên từ Kho lưu trữ

Điều khiển từ xa loạt mới 14.03.2005

Pogo Products đã giới thiệu một điều khiển từ xa không dùng pin. EZPower Universal được tích hợp một tay cầm mà chỉ cần vặn một chút là có thể tạo ra năng lượng mà thiết bị cần trong bảy ngày.

Vì vậy, điều khiển từ xa không chỉ “thân thiện” với môi trường và bàn tay của bạn, mà nó còn có khả năng vận hành các thiết bị như TV, VCR, Cable, SAT, AUX và đầu đĩa DVD. Điều khiển từ xa sẽ xuất hiện đầu tiên ở Mỹ với giá khoảng 25 USD.

Tin tức thú vị khác:

▪ Dãy núi Alps đang lớn dần lên

▪ Thở máy tích tụ sinh học

▪ Cô lập nông nghiệp để vượt qua khủng hoảng khí hậu

▪ Robot xe tăng thay vì lính cứu hỏa

▪ Các nút nano với micromotor

Nguồn cấp tin tức khoa học và công nghệ, điện tử mới

 

Tài liệu thú vị của Thư viện kỹ thuật miễn phí:

▪ phần của trang web Sự thật thú vị. Lựa chọn các bài viết

▪ bài viết Người đầy tớ của nhân dân. biểu thức phổ biến

▪ bài viết Magna Carta là gì? đáp án chi tiết

▪ bạch hoa bài. Truyền thuyết, canh tác, phương pháp áp dụng

▪ bài viết Khối đánh lửa cho VAZ-2108 và VAZ-2109. Bách khoa toàn thư về điện tử vô tuyến và kỹ thuật điện

▪ bài viết Các bóng bán dẫn trường trong nước và các đối tác nước ngoài của họ. Bách khoa toàn thư về điện tử vô tuyến và kỹ thuật điện

Để lại bình luận của bạn về bài viết này:

Имя:


Email (tùy chọn):


bình luận:





Tất cả các ngôn ngữ của trang này

Trang chủ | Thư viện | bài viết | Sơ đồ trang web | Đánh giá trang web

www.diagram.com.ua

www.diagram.com.ua
2000-2024