1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Học PIC trong 1 ngày - Phần 6 pdf

12 451 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 156,94 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Điểm thứ ba, trong tập lệnh của PIC, không có lệnh nào cho phép tương tác trực tiếp giữa một thanh ghi trong bộ nhớ dữ liệu dùng chung với một giá trị thêm vào, mà đều phải thông qua tha

Trang 1

Hướng dẫn về thanh ghi W

Thanh ghi W

Trong bài này, chúng ta nói đôi nét về thanh ghi W để các bạn nắm rõ hơn phương thức hoạt động của PIC

Khái niệm thanh ghi W:

Thanh ghi W là thanh ghi làm việc (Working register), và hầu hết mọi lệnh của PIC đều liên quan đến thanh ghi W này, lấy thí dụ như ADDLW (cộng một số vào giá trị

đã có trong thanh ghi W), SUBWF (trừ giá trị của thanh ghi W cho một thanh ghi khác), XORLW (lấy XOR của một số và thanh ghi W) Và các bạn để ý rằng, tổng

số lệnh có thể tương tác với thanh ghi W là 23/35 lệnh, gần như chiếm toàn bộ tập lệnh của PIC Vậy chúng ta ghi nhận điều thứ nhất, khi PIC làm việc, gần như luôn luôn tương tác với thanh ghi W

Điều thứ hai, các bạn nhìn trong bản đồ bộ nhớ dữ liệu của PIC, các bạn sẽ thấy là thanh ghi W là thanh ghi không có mặt ở bất kỳ băng nào của bộ nhớ dữ liệu, trong khi đó thanh ghi STATUS có mặt ở cả 4 băng Các bạn lại thấy một điều rằng, thanh ghi W và thanh ghi STATUS có thể được truy nhật từ tất cả các băng, và từ bất kỳ đâu trong chương trình, và vì vậy chúng trở thành những thanh ghi toàn cục nhất Điểm khác biệt giữa chúng ra sao? Đâu là sự khác biệt giữa thanh ghi W và các thanh ghi khác?

Điểm thứ ba, trong tập lệnh của PIC, không có lệnh nào cho phép tương tác trực tiếp giữa một thanh ghi trong bộ nhớ dữ liệu dùng chung với một giá trị thêm vào, mà đều phải thông qua thanh ghi W Như vậy, thanh ghi W là cầu nối của hầu hết các phép toán được thực hiện trên các thanh ghi nằm trong bộ nhớ dữ liệu

Trang 2

Như vậy, thanh ghi W vô cùng quan trọng trong hoạt động của PIC

Nhắc lại kiến trúc Harvard và Von Newmann:

Hình sau sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình Các bạn thấy rằng bus bộ nhớ chương trình của PIC midrange chỉ có 14 bit

Với đặc điểm này, chúng ta sẽ phân tích vì sao cần phải có thanh ghi W, và sau đó chúng ta sẽ phân tích tất cả các hoạt động của thanh ghi W trong một chương trình viết bằng PIC, nếu có thể Những gì còn lại, chúng ta sẽ xem trong bài tập lệnh của PIC midrange

Vì sao cần phải có thanh ghi W?

Bạn sẽ làm thế nào để tính phép toán sau: lấy giá trị a của thanh ghi A cộng với giá trị

b của thanh ghi B và đặt vào thanh ghi A? Một giới hạn của tập lệnh PIC là không cho phép cộng hai thanh ghi và đặt vào một thanh ghi khác Do đó, các bạn sẽ phải thực hiện thao tác sau:

Chuyển giá trị b từ thanh ghi B vào thanh ghi W, sau đó lấy giá trị của thanh ghi W (lúc này là b) cộng với giá trị a ở thanh ghi A, sau đó gán lại vào thanh ghi A Đoạn code được thực hiện như sau:

Trang 3

Code:

MOVF B, W ; chuyển giá trị của thanh ghi B vào thanh ghi

W

ADDWF A, F ; cộng giá trị của thanh ghi A với giá trị b của thanh ghi W và gán lại vào A

Khi các thanh ghi A và B không nằm trong cùng một băng, khi thao tác với từng thanh ghi, các bạn chỉ việc đổi về băng chứa các thanh ghi đó là xong Một đoạn lệnh hoàn chỉnh có thể thực hiện cho bất kỳ 2 thanh ghi nào được viết như sau:

Code:

Đoạn chương trình này cũng minh hoạ luôn cho việc thanh ghi W là một thanh ghi toàn cục, khi chúng ta thao tác với thanh ghi B ở một băng bấ kỳ, nhưng khi chuyển giá trị b từ thanh ghi B vào thanh ghi W rồi, thì chúng ta không cần quan tâm rằng giá trị đó nằm ở đâu, chỉ cần chuyển về băng chứa thanh ghi A thì lệnh cộng sẽ được thực hiện một cách dễ dàng

Một thí dụ khác về lệnh cộng, nhưng không phải là cộng giá trị nằm trong 2 thanh ghi,

mà là cộng giá trị a của thanh ghi A với một số k cho trước nào đó, giả sử k = 5 và lưu vào thanh ghi A

Trang 4

Chúng ta thấy rằng, hoàn toàn trong tập lệnh không có lệnh cộng trực tiếp một thanh ghi với một số, mà chỉ có lệnh cộng một số với thanh ghi W Như vậy chúng ta phải thực hiện thao tác sau: chuyển giá trị a từ thanh ghi A vào thanh ghi W, cộng thanh ghi W với hằng số k = 5, sau đó chuyển giá trị mới của thanh ghi W trở lại thanh ghi

A Điều này được thực hiện như sau:

Code:

ADDLW d'5'

Trong thí dụ này, chúng ta sẽ không thấy W là một biến tạm nữa, mà trở thành một thanh ghi dùng để lưu kết quả cộng với một con số Đến bây giờ, thì chúng ta sẽ giả thích rõ hơn vì sao chúng ta phải làm như vậy

Chúng ta thấy rõ ràng rằng, một dòng lệnh của PIC midrange, được mô tả bằng 14 bit Điều này có nghĩa là, khi thực hiện một lệnh cộng, không thể nào dòng lệnh đó vừa lưu địa chỉ của thanh ghi A, vừa lưu giá trị 8 bit của hằng số k được, vì một thanh ghi trong dòng PIC midrange cần tối thiếu 7 bit để biểu diễn địa chỉ thanh ghi, và một hằng số chiếm 8 bit Nó vượt quá con số 14 bit cho phép để mã hoá lệnh Chính vì vậy, không thể thực hiện lệnh cộng trực tiếp từ một thanh ghi với một số được Quay lại thí dụ ở trên, chúng ta cũng thấy rằng không thể thực hiện việc cộng hai thanh ghi với nhau, nếu như cần lưu 2 địa chỉ thanh ghi, chúng ta sẽ mất 14 bit, và như vậy không có các bit mã hoá mô tả lệnh cần thực hiện là gì

Đây chính là điểm khác biệt giữa tập lệnh RISC và tập lệnh CISC Tập lệnh CISC có thể thực hiện lệnh phức, vì nó có thể tạo ra một lệnh dài 8 bit, 16 bit, 24 bit và là bộ

số của 8 bit Do đó, nếu cần cộng 2 thanh ghi 8 bit, nó hoàn toàn có thể tạo ra một lệnh dài 24 bit, trong đó 8 bit dùng để mã hoá, 8 bit dành cho địa chỉ của thanh ghi thứ nhất, 8 bit dành cho địa chỉ cua thanh ghi thứ 2 Trong khi đó, tập lệnh CISC là tập lệnh rút gọn, cho dù nó là lệnh gì, nó cũng luôn luôn chỉ có 14 bit (đối với PIC

Trang 5

midrange)

Thanh ghi W giống như một thanh ghi mặc định duy nhất, vì vậy, khi thực hiện, bộ xử

lý trung tâm có thể giải mã được nếu lệnh đó có cần thao tác với thanh ghi W hay không, mà không cần lưu địa chỉ của thanh ghi W bên trong đoạn mã lệnh

Chúng ta xem hình dưới đây để biết được bộ xử lý logic hoạt động như thế nào với thanh ghi W

Vậy chúng ta đã thấy rõ sự cần thiết của thanh ghi W, bởi vì chúng ta cần có một thanh ghi tạm cho các công việc tính toán, và chúng ta cần mã hoá thanh ghi mà không cần tốn quá nhiều bit, vậy thì thanh ghi W vừa là thanh ghi có tính toàn cục, vừa là thanh ghi tạm, vừa là thanh ghi không cần thiết nhiều bit để biểu diễn địa chỉ

Các bạn đã biết vì sao chúng ta phải cần thanh ghi W, bây giờ chúng ta cần biết thanh ghi W hoạt động như thế nào trong các chương trình của PIC

Kỹ thuật bảng

Trang 6

Các bạn có thể download bài viết Kỹ Thuật Bảng tại đây để tham khảo và hiểu kỹ thuật thiết lập một bảng dữ liệu với PIC

Kỹ thuật bảng này dùng trong một số trường hợp như: Xuất dữ liệu ra LCD, ra màn hình, sử dụng làm các vector điều khiển vận tốc gia tốc động cơ, dùng để điều khiển động cơ bước

Thí dụ về nút bấm

Đây là một thí dụ về nút bấm:

Nối nút bấm với RA0, RA1, RA2, RA3 với điện trở kéo lên Nối đèn LED vào RB0, RB1, RB2, RB3 với điện trở nối tiếp và đèn LED được nối xuống mass

(hình vẽ sẽ post lên sau vì chưa có thời gian)

Thuật toán quét sẽ như sau:

Nếu SW0 là cao thì bật LED0

Nếu SW0 là thấp thì tắt LED0

Nếu SW1 là cao thì bật LED1 cứ như thế cho các nút bấm khác

Chương trình như sau:

Code:

; -

; Khoi tao

; -

; Đặt PORTA có RA0 - RA3 là input

Trang 7

; Đặt PORTB có RB0 - RB3 là output

; Xóa PORTA, xóa PORTB

SW0 BTFSC PORTA, 0

GOTO TURNON0

BCF PORTB, 0

SW1 BTFSC PORTA, 1

GOTO TURNON1

BCF PORTB, 1

SW2 BTFSC PORTA, 2

GOTO TURNON2

BCF PORTB, 2

SW3 BTFSC PORTA, 3

GOTO TURNON3

BCF PORTB, 3

GOTO SW0 ; quay lại quét từ đầu

Trang 8

TURNON0 BSF PORTB, 0

GOTO SW1

TURNON1 BSF PORTB, 1

GOTO SW2

TURNON2 BSF PORTB, 2

GOTO SW3

TURNON3 BSF PORTB, 3

GOTO SW0

END

Xong!

Tập lệnh PIC Midrange

Các bạn download tài liệu Tập Lệnh PIC Midrange bằng link này:

Trang 9

www.picvietnam.com/download/taplenh.pdf

Lưu ý với các bạn rằng, vì lý do đay là tài liệu chúng tôi biên soạn cho cuốn sách sắp hoàn thành, do đó, chúng tôi không cho phép in ấn hoặc copy

Các bạn có thể download về để tham khảo

Một chú ý nữa, đó là tài liệu này chưa được viết xong, còn các lệnh tôi chỉ mới sửa chữa sơ sơ, chủ yếu là phần chú thích, tôi nghĩ sau khi viết xong phần này, có thể đã giúp ích cho rất nhiều kỹ sư từng làm việc quen với vi điều khiển khác chuyển sang học PIC Họ có thể tra cứu nhanh và nắm bắt các nguyên tắc lập trình PIC

Cuối cùng, nếu các bạn sử dụng tài liệu này để soạn lại, hoặc đưa vào luận văn, hoặc các tài liệu của các bạn, xin các bạn ghi rõ nhóm tác giả picvietnam.com

Kể từ nay cho đến khi chúng tôi viết xong cuốn sách, các bạn được phép sử dụng các tài liệu như thế này một cách hoàn toàn miễn phí, cho mục đích cá nhân, không được phép công bố, sao chép

Lý do tôi thông báo điều này, vì có bạn đã hỏi tôi về việc sử dụng tài liệu của tôi cho lớp dạy học sắp mở của các bạn đó, tôi rất hoan nghênh việc mở lớp của tất cả những người có nguyện vọng truyền thụ kiến thức cho sinh viên Song vì có quá nhiều lớp sẽ

mở ra, và có nhiều người sử dụng tài liệu do tôi biên soạn, để đảm bảo uy tín cho picvietnam, tôi mới đề nghị như trên, bởi vì tôi không tham gia chính thức vào bất kỳ lớp dạy học nào, ngoại trừ lớp của Bình Anh ở Hà Nội và lớp của Doãn Minh Đăng tại HCMC với vai trò cố vấn

Chương trình tính toán Timer

http://www.picvietnam.com/download/P imerCalcV4.zip

Một điều không có gì cần thiết lắm, nhưng đôi khi nó lại làm cho chúng ta bối rối, đó

Trang 10

là tính toán các con số delay, timer với thời gian thực

Chương trình trên đây giúp chúng ta đỡ mất công suy nghĩ và tính toán hơn khi thao tác với timer Đây chỉ là một chương trình bổ trợ nhỏ, nhưng cũng có lẽ sẽ giúp ích khi chúng ta đã làm việc quá lâu với máy tính, và có thể vài con số sẽ làm chúng ta bối rối

Mong rằng nó giúp được cho các bạn

Lưu ý, các bạn mới học PIC, khi tính toán với Timer, các bạn cố gắng tự tính bằng tay, sau đó sử dụng chương trình này để kiểm tra lại kết quả, để xem mình đã hiểu đúng về hoạt động của timer chưa

Chúc vui

Thành thật xin lỗi bạn, thời gian này mình đang rất bận, vừa phải lên lớp, vừa phải làm dự án, chuẩn bị thư viện điện tử cho picvietnam và dientuvietnam, xem xét sản xuất bộ sản phẩm thứ hai phát triển pic và picvietnam, và đang làm việc với anh Nam để chuẩn hóa MPASM, rồi viết cuốn sách MPASM

Với khối lượng việc như vậy, mình không thể đảm bảo trả lời hết các bài viết của các bạn, mong các bạn thông cảm, và rất nhiều thành viên có thể giúp đỡ các bạn thêm trong thời gian này

Đây là một bản dịch tài liệu hướng dẫn mà mình đã cho sinh viên mình soạn từ 2 năm trước, nó đã được đăng trên diendandientu.com Tuy nhiên, vì mình thấy tài liệu chưa tốt, nên không phổ biến trên picvietnam Một khi đã phổ biến trên picvietnam, mình muốn nó luôn luôn là tài liệu chuẩn hóa và có giá trị cao đối với thành viên

Khi các bạn gặp khó khăn nhất thời, có thể tạm sử dụng tài liệu này Tuy nhiên, mình tuyên bố, đây không phải là tài liệu chính thức của picvietnam Tất cả các tài

Trang 11

liệu chính thức của picvietnam, đều được post theo form chuẩn, và lưu trữ trong host của picvietnam với đường link www.picvietnam.com/download/

Post xong thấy bực mình quá, vì F vốn không thích kiểu làm việc như vậy Nên đây, các bạn có thể download tạm tài liệu này để sử dụng có vẻ tốt hơn

Một là tài liệu này cũng không phải là tài liệu chính thức F chỉ viết chơi và chỉnh sửa lại một chút cho nó đúng form nhìn cho nó tốt hơn Nhưng mà mặt khác F nghĩ nó cũng đã khá tốt rồi Tài liệu này được viết từ cách đây gần 2 năm rồi, nên một số chỗ F còn để là diendandientu.com (vì lúc đó chưa có

www.picvietnam.com), hoặc là mã số bài viết bên trong sai với tên tập tin bên ngoài, hoặc còn một số sai sót hoặc lời viết lung tung, bởi vì F copy qua lại, mong các bạn thông cảm

Trong bài hướng dẫn này, F sử dụng mạch nạp PIC1 để hướng dẫn

http://www.doanhiep.com/~ulsan/Taili DH.100406.pdf

Tutorial ngắn về tập tin hex

Theo đề nghị của chú F, tôi viết tutorial ngắn này để các bạn mới bắt đầu học PIC không thắc mắc về kích thước của tập tin hex, cùng với cách tính số word, kword trong chương trình của PIC

Trong thế giới số:

1 k = = 1024

1 mega = = 1048576

1 kword = 1024 word

và, 8 kword = 8x1024 = 8192 word

Các chip PIC16 với bộ nhớ 8 kword, chẳng hạn như 16F877A, có 4 trang bộ nhớ Flash, mỗi trang là 2 kword Nếu chương trình tràn khỏi biên của một trang thì người viết chương trình phải tự đảm bảo là các lệnh nhảy có thể thực hiện thành công, do đó

Trang 12

trình biên dịch thường có thông báo nhắc nhở

Đối với tập tin hex, các byte được ghi bằng ký tự ASCII thể hiện mã hexadecimal của byte Mỗi lệnh của PIC16 dài 14-bit, được ghi vào tập tin hex bằng 2 byte, và mỗi byte được ghi bằng 2 ký tự ASCII, như vậy mỗi lệnh cần dùng tới 4 ký tự ASCII để ghi vào tập tin hex Ngoài ra còn có các thông tin định dạng và kiểm tra lỗi cho mỗi dòng trong tập tin hex và các thông tin khác cho cấu hình của chip, nếu có dùng, và một số thông tin khác, chẳng hạn như địa chỉ bắt đầu của vùng nhớ được điền vào Mỗi dòng cần có thêm 11 ký tự ASCII cho mục đích định dạng và kiểm tra lỗi, và mỗi dòng chỉ mã hóa cho tối đa 32 byte, tức là 16 lệnh Các trình dịch PIC thường chỉ dùng 16 byte cho mỗi dòng trong tập tin hex, do đó thường cần 1 dòng cho mỗi 8 lệnh

Lấy ví dụ một chương trình dài 2048 lệnh, với cách ghi thành tập tin hex thông thường, sẽ cần 256 dòng, mỗi dòng dùng hết 4x8 + 11 = 43 ký tự, và 256 dòng sẽ cần

11008 ký tự cho riêng phần mã lệnh, các thông tin khác cũng sẽ dùng thêm khoảng

200 ký tự Do đó, chương trình này khi được ghi thành tập tin hex sẽ có kích thước lớn hơn 11 kbyte (hơn 11 ngàn ký tự)

Thân,

Theo picvietnam.com

Ngày đăng: 24/07/2014, 12:21

HÌNH ẢNH LIÊN QUAN

Hình sau sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó  các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình - Học PIC trong 1 ngày - Phần 6 pdf
Hình sau sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình (Trang 2)

TỪ KHÓA LIÊN QUAN

w