|
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 |
03-11-2006, 07:39 PM | #1 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 43
: |
Lỗi về Interupt, các anh giúp em với
Em viết một cái code rất đơn giản để làm quen với Interupt nhưng sao không biết cái Proteus lại chẳng thực hiện được! T_T, ấn nút mỏi tay mà đèn hông sáng! Các anh xem hộ em với
Em không post phàn khai báo, chỉ có phần chạy thui ^^ Còn đây là ảnh của phần giả lập Proteus http://s23.quicksharing.com/v/500147/TESTLED.GIF.html (namqn: Link không hoạt động) Code:
ORG 00 Goto Main ORG 04 Goto LED Main bsf INTCON,GIE bsf INTCON,INTE banksel TRISB bsf TRISB,0 bcf TRISB,1 bcf TRISB,2 banksel PORTB bcf PORTB,0 Goto $ ;========================================================== LED bcf PORTB,2 bsf PORTB,2 movwf _work ; Save W in Bank0 or Bank1 btfsc STATUS,RP0 ; Check which bank PIC is in goto IN_BANK0 ; IF == 0 THEN already in Bank0 ; Continue here if PIC is in Bank1 on entry bcf STATUS,RP0 ; Change into Bank0 swapf STATUS,w ; Save STATUS in Bank0 movwf _status ; in the usual way bsf _status,RP0 ; Set back saved RP0 in memory goto INVERT ; and begin the core code IN_BANK0 swapf STATUS,w ; If already in Bank0 movwf _status ; save STATUS in the usual way ;============================================================ INVERT bcf INTCON,INTF movf PORTB,w xorlw b'00000010' movwf PORTB ;============================================================= ; Restore context. Processor in Bank0 swapf _status,w ; Untwist & get old Status from memory movwf STATUS ; which also restores original bank swapf _work,f ; Now get original W register from swapf _work,w ; interrupted bank retfie ; and return to interrupted background end thay đổi nội dung bởi: namqn, 03-11-2006 lúc 09:04 PM. |
03-11-2006, 09:06 PM | #2 |
Trưởng lão PIC bang
|
Kiểm tra lại cách mô phỏng trong Proteus, post lại sơ đồ mạch mô phỏng, tham khảo thêm ví dụ Doorbell của Proteus.
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 |
04-11-2006, 04:03 PM | #3 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 43
: |
Cảm ơn anh Nam, em đã đính kèm file ảnh!anh giúp hộ em với!
|
04-11-2006, 09:22 PM | #4 |
Trưởng lão PIC bang
|
Khi nhấn nút và thả ra, sẽ có cả 2 cạnh lên và xuống, do đó không cần cổng NOT ở đây. Một bạn nào đó (có lẽ là MoH) đã nhắc là khi nối LED với các ngõ ra của PIC thì phải thêm vào một điện trở khoảng vài trăm ôm giữa chân PIC và LED thì LED mới sáng. Cũng nên chú ý cực tính của LED.
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 |
04-11-2006, 10:15 PM | #5 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 43
: |
Anh Nam ơi! Em đã mắc thêm R200 vào LED nhưng mà nó vẫn không sáng anh ạ. Còn cái NOT thì quả là không cần nhưng khi có NOT thì em thấy trên Simulation mới xuất hiện mấy cái nút xanh đỏ khi RUN, còn nếu không có NOT thì chả có gì cả! Em kèm theo 2 cái hình mạch đã sửa! Anh xem hộ em lại phàn CODE với, do em mới làm quen với Interupt à, nên không biết có sơ sót gì không!
Cảm ơn anh |
05-11-2006, 01:14 PM | #6 |
Đệ tử 2 túi
Tham gia ngày: Jun 2005
Bài gửi: 34
: |
... khi dùng Proteus để mô phỏng mà bác dùng con LED theo sơ đồ đính kèm nó không phát sáng được đâu... bác dùng LED-YELLOW á...
|
05-11-2006, 06:44 PM | #7 |
Trưởng lão PIC bang
|
Không nhất thiết phải dùng màu vàng, nhưng phải dùng LED thuộc loại Animated LED model (thuộc thư viện Active chứ không phải thư viện Device) thì mới hiển thị được.
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 |
05-11-2006, 07:12 PM | #8 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 43
: |
Cảm ơn anh Nam và Mhz, em đã thay đèn LED bằng Led-green (ACTIVE) nhưng nó vẫn không sáng! Mong các anh xem lại hộ em cái code với! chắc là nó có vấn đề gì đó! Nhân tiện xin các anh cho em hỏi làm sao debug trong Proteus ạ, em không biết Debug Interupt trong MPLAB mà qua Proteus cũng không bít sai chỗ nào để mà sửa lun!
Thân |
05-11-2006, 08:24 PM | #9 |
Đệ tử 2 túi
Tham gia ngày: Jun 2005
Bài gửi: 34
: |
Thật ra chương trình của bác viết không có gì sai, chỉ thừa một vài lệnh,
dựa vào chương trình của bác tui có Edit lại chút đỉnh, và đã dùng proteus mô phỏng OK... bác thử lại xem... Code:
;======================================== TITLE "TESTLED" PROCESSOR PIC16f877a INCLUDE <P16f877a.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;============================================================================= ; KHAI BAO BIEN ;************** _work equ 0x20 _status equ 0x21 ;================================================= ===================================== ORG 0x00 Goto Main ORG 0x04 Goto LED Main bsf INTCON,GIE bsf INTCON,INTE banksel TRISB bsf TRISB,0 bcf TRISB,1 banksel PORTB bcf PORTB,0 Goto $ ;========================================================== LED movwf _work ; Save W in Bank0 or Bank1 btfsc STATUS,RP0 ; Check which bank PIC is in goto IN_BANK0 ; IF == 0 THEN already in Bank0 ; Continue here if PIC is in Bank1 on entry bcf STATUS,RP0 ; Change into Bank0 swapf STATUS,w ; Save STATUS in Bank0 movwf _status ; in the usual way bsf _status,RP0 ; Set back saved RP0 in memory goto INVERT ; and begin the core code IN_BANK0 swapf STATUS,w ; If already in Bank0 movwf _status ; save STATUS in the usual way ;============================================================ INVERT bcf INTCON,INTF movf PORTB,w xorlw b'00000010' movwf PORTB ;============================================================= ; Restore context. Processor in Bank0 swapf _status,w ; Untwist & get old Status from memory movwf STATUS ; which also restores original bank swapf _work,f ; Now get original W register from swapf _work,w ; interrupted bank retfie ; and return to interrupted background end |
05-11-2006, 11:43 PM | #10 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 43
: |
hà! Cảm ơn bác Mhz, cuối cùng đã giải quyết xong chuỵen này!
|
19-01-2007, 02:25 PM | #11 |
Đệ tử 1 túi
Tham gia ngày: Jan 2006
Bài gửi: 17
: |
tốt nhất bạn nên làm trên mạch thật thì trực quan hơn ,mô phỏng đôi khi ko đúgn
__________________
TRUNG TÂM ĐÀO TẠO ĐIỆN TỬ VÀ TỰ ĐỘNG HOÁ MTC MTC khai giảng khóa mới http://blog.360.yahoo.com/blog-kHh38....lgCr0J4220m40 |
|
|