![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Đệ tử 1 túi
Tham gia ngày: Apr 2006
Bài gửi: 23
: |
Đoạn này em lấy được trong piclist.com, dùng để thực hiện trễ 1s với thạch anh 4MHz, em thay vào hàm delay trong đoạn chương trình trên nhưng chương trình biên dịch có lỗi. Đoạn này em cũng không hiểu lắm về cách làm của họ, mà trước hết là có lệnh cblock (?)
cblock d1 d2 d3 endc ;999997 cycles movlw 0x08 movwf d1 movlw 0x2F movwf d2 movlw 0x03 movwf d3 Delay_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto Delay_0 ;3 cycles goto $+1 nop Đoạn link chương trình này: http://www.piclist.com/cgi-bin/delay...=Delay&CPU=PIC Các bác xem giùm em luôn nhé. |
|
|
|
|
|
#2 |
|
Trưởng lão PIC bang
|
cblock là từ khóa bắt đầu macro khai báo một khối hằng số. Trong chương trình của bạn, nó được dùng để khai báo 3 hằng số d1, d2, d3 (được dùng làm địa chỉ của 3 biến byte). Để chương trình có thể dịch được thì bạn phải cung cấp một hằng số sau cblock, đó chính là giá trị bắt đầu của các hằng số. Ví dụ
Code:
cblock 0x20 d1 d2 d3 endc Bạn phải xác định địa chỉ của khối biến cho thích hợp và đặt địa chỉ đầu của khối biến vào sau cblock. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
#3 |
|
Đệ tử 1 túi
Tham gia ngày: Apr 2006
Bài gửi: 23
: |
Oh, xin lỗi vì em cũng chỉ mới bắt đầu tìm hiểu về MPASM nên chưa hiểu nhiều về các cấu trúc của nó. Em đã thêm 0x023 vào sau cblock, nhưng chương trình vẫn báo lỗi này:
Error - section '.org_4' can not fit the absolute section. Section '.org_4' start=0x00000005, length=0x0000003c Em gửi kèm theo file của em, anh xem hộ nhé: |
|
|
|
|
|
#4 |
|
Trưởng lão PIC bang
|
Đã chỉnh lại chương trình cho em rồi đây. Em nhớ chọn chip từ lệnh mênu Configure > Select Device để có chip là 16F628A nhé. Sau đó có thể mở tập tin nguồn, chọn lệnh Quickbuild từ mênu Project (không cần phải tạo project cho chương trình chỉ có một tập tin .asm).
Đừng để ý cái warning về chip và cái message nhắc nhở là thanh ghi không nằm ở bank 0. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
#5 |
|
Đệ tử 1 túi
Tham gia ngày: Apr 2006
Bài gửi: 23
: |
Cảm ơn anh, cho em hỏi thêm
Em đã biết anh sửa chỗ nào nhưng cũng chưa hiểu sao cách khai báo đấy lại không được. Đang nghiên cứu quyển MPLAB IDE, hy vọng sau khi đọc xong sẽ bớt hỏi hơn.
Em muốn hỏi thêm: Em dùng thạch anh 11,0592MHz có được không? Vì em thấy thời gian trễ lâu quá, cả phút. Mặc dù em đã thay đổi d1, d2, d3 về 0x02 rồi mà vẫn thấy lâu. Ngoài ra, chân RB4 của em không sáng được. Khi em cho chế độ test led (Sáng hết hoặc tắt hết) thì đo ngay tại chân RB4 thấy như nhau và luôn 0,42V. Liệu có thể hỏng tại đúng một chân không anh? Muốn gửi đoạn chương trình test LED nhưng phần gửi gặp lỗi gì đó nên em không gửi được. thay đổi nội dung bởi: chuchinh, 06-07-2006 lúc 11:15 AM. |
|
|
|
|
|
#6 |
|
Trưởng lão PIC bang
|
Thạch anh 4 MHz là đủ để em học rồi.
Chương trình của em được viết theo kiểu "râu ông nọ cắm cằm bà kia", phản ứng của nó là khó xác định trước. Phần code đã sửa chỉ để hướng dẫn cho em cách viết cblock, nó không phải là một chương trình hoàn chỉnh. Em dùng lệnh gọi chương trình con DELAY, nhưng chương trình con đó lại không có lệnh return để trở về chương trình gọi. Ngoài ra, phần code để đặt d1, d2, và d3 hoàn toàn không được thực thi, nên có chỉnh chúng cũng không có tác dụng. RB4 của 628A là một chân đặc biệt, nếu con chip của em mới tinh, và em không xóa bit cấu hình LVP, thì chân RB4 là ngõ vào, dùng để kích hoạt chế độ nạp chương trình ở điện áp thấp. Đó có thể là lý do khiến chân RB4 không phản ứng giống những chân kia. Để hiểu thêm về hợp ngữ thì em đọc thêm tài liệu "MPASM™ Assembler, MPLINK™ Object Linker, MPLIB™ Object Librarian User’s Guide" (DS33014j), download tại đây: http://ww1.microchip.com/downloads/e...Doc/33014J.pdf Nếu không upload được chương trình lên forum thì có thể gửi email cho tôi, địa chỉ email của tôi có trong phần thông tin thành viên. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 thay đổi nội dung bởi: namqn, 06-07-2006 lúc 08:27 PM. |
|
|
|
|
|
#7 |
|
Đệ tử 1 túi
Tham gia ngày: Apr 2006
Bài gửi: 23
: |
OK. Đúng là phần code d1, d2, d3 của em không thực thi. Bây giờ em đã biết cách thực hiện trễ trong chương trình theo ý muốn.
Em vẫn có một số thắc mắc, mong anh giải đáp dùm: + RB4 của em đã sáng sau khi xóa LVP, nhưng RA4 lại không sáng. + Đoạn code sau em dùng lệnh if chỉ để thay đổi giá trị thanh ghi W theo d4, trước khi vào kiểm tra em đã đặt d4=1, không hiểu sao vào chương trình nó lại kiểm tra thấy d4!=1 (Em dùng f7 để chạy thấy nó trỏ ngay đến dòng movlw 0x01 sau lệnh else thứ 2). cblock 0x020 COUNT_L d4 endc ORG 0x0000 GOTO MAIN ORG 0x0005 MAIN movlw 0x01 movwf d4 if(d4==0x01) movlw 0x01; bit 0 incf d4,f else if d4==0x02 movlw 0x02 decf d4,f else movlw 0x01 ; con tro tro luon den dong nay movf d4 movlw 0x06 endif endif movwf COUNT_L nop ;================================================= ============================ GOTO $ END Không biết cách đặt code vào trong khung thế nào nhỉ, thấy anh falleaf hướng dẫn đâu đó mà tìm không thấy. |
|
|
|
![]() |
|
|
Similar Threads
|
||||
| Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
| Cho mình hỏi cách tạo xung mV hoặc microvon | trungnnd | PIC - Thiết kế và Ứng dụng | 1 | 22-03-2013 02:30 PM |