intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:12

153
lượt xem
62
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Học PIC trong 1 ngày - Phần 6

  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.
  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:
  3. Code: ; chuyển giá trị của thanh ghi B vào thanh ghi MOVF B, W W ; cộng giá trị của thanh ghi A với giá trị b của ADDWF A, F 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: BANKSEL B MOVF B, W BANKSEL A ADDWF A, F Đ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 p hả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.
  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: MOVF A, W ADDLW d'5' MOVWF A 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
  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
  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
  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 ; quay lại quét từ đầu GOTO SW0
  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:
  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, đó
  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
  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 t hế giới số: 1k= = 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 đó
  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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2