![]() |
|
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 |
Trưởng lão PIC bang
|
- Vector ngắt nằm ở 0x0004 chứ không phải ở 0x0400 như bạn đã viết.
- TRISA và TRISB nằm cùng bank, do đó BANKSEL TRISA là không cần thiết. - PORTA nằm khác bank với TRISA, chỗ này thì bạn lại thiếu BANKSEL PORTA. - Hai lệnh MOVWF COUNT và MOVLW PORTA lẽ ra phải là MOVF COUNT, W và MOVWF PORTA. - Xử lý xong ngắt thì phải xóa cờ ngắt, do đó vẫn cần xóa cờ INTF trong thanh ghi INTCON trước khi thoát khỏi chương trình xử lý ngắt. 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, 12-02-2009 lúc 09:11 PM. Lý do: bổ sung một ý |
![]() |
![]() |
#2 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
Từ sáng giờ em đã làm lại. Do vừa tìm hiểu lệnh, các thanh ghi nữa nên
hơi lâu. ct được viết lại như dưới nhưng vẫn chưa được. Nút nhấn chỉ có tác dụng ở lần đầu tiên. tức là ' nhấn lần thứ NHẤT ---> RA0 = 1 ' nhưng những lần nhấn tiếp theo vẫn chỉ có RA0 = 1 . Em nghi ngờ ở lần ngắt đầu tiên (trong chương trình ngắt) đã tác động đến thanh ghi nào đấy , và nó đã không cho phép ngắt nữa. --------------------------------------------- Code:
;======================================================= TITLE "Mach test ngat ngoai" PROCESSOR P16F877A INCLUDE <P16F877A.inc> __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC ;chan RB0 noi voi cong tac de dem so lan nhan ;port A noi voi cac led hien de hien thi so binary ;================================================================= COUNT equ 20H ORG 00H GOTO MAIN org 04H goto NGAT ;===============CHUONG TRINH CHINH================================ ORG 0x0005 MAIN BANKSEL TRISB ; bank select movlw b'00000001' movwf TRISB ; trisb = #w; rb0 = input movlw 00h movwf TRISA BANKSEL PORTA bsf INTCON,7 bsf INTCON,4 bcf INTCON,1 CLRF W movwf PORTA goto $-1 ;==================CHUONG TRINH NGAT============================= NGAT incf COUNT,0 ;tang g.tri count len 1 & luu trong 'W' BCF INTCON,1 retfie ; return from interrupt END ;==================================================================== thay đổi nội dung bởi: namqn, 12-02-2009 lúc 05:13 PM. |
![]() |
![]() |
#3 |
Trưởng lão PIC bang
|
Chương trình chạy theo đúng những gì bạn đã viết. Trong phần xử lý ngắt, bạn tăng biến COUNT lên 1 đơn vị, nhưng lại ghi kết quả vào W, do đó biến COUNT vẫn chứa giá trị ban đầu (không hề bị thay đổi). Ở những lần ngắt tiếp theo, giá trị cũ của biến COUNT vẫn được tăng lên 1 đơn vị và ghi vào thanh ghi W, còn biến COUNT hoàn toàn không bị thay đổi giá trị.
Phần xử lý ngắt của bạn còn thiếu một lệnh, đó là ghi lại kết quả phép toán tăng 1 đơn vị vào biến COUNT (movwf COUNT), sau lệnh INCF COUNT, 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 |
![]() |
![]() |
#4 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
À em hiểu rồi . đúng là bị chỗ đấy thật.
Chắc em nhớ mãi lệnh này ( ngồi từ sáng tới trưa) Thanks bác nhiều |
![]() |
![]() |
#5 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
Sợ thằng Proteus quá rồi.
Em vừa làm xong mạch test 16f877A.Mà không hiểu sao nó ko chạy. Các bác có rảnh thì xem hộ em coi sơ đồ nguyên lí có gì sai ko. Cảm ơn các bác nhiều. ------------------------------------------------------------- À em dùng phần mềm WinPic 800 để nạp. trên thanh công cụ có các nút sau mà em ko hiểu lắm: Read All, Programe All và Verify All. Như khi em nạp thì em chọn Programe All trước sau đó mới đến Verify All. Mong các bác chỉ giáo |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
- Tụ điện dùng cho thạch là bao nhiêu, tần số của thạch anh là bao nhiêu? Bạn đã cấu hình cho PIC như thế nào? - Điện trở của mạch reset là bao nhiêu? - Bạn có dùng các tụ ceramic 100 nF giữa các cặp chân VDD và VSS nằm gần nhau hay không? Nếu câu trả lời là không thì bạn nên bổ sung các tụ này. - Nếu PIC của bạn còn mới tinh hoặc bạn cho phép nạp ở điện áp thấp (LVP), bạn nên có điện trở vài k từ chân RB3/PGM đến VSS. Bạn nên đọc post #1 của luồng sau: http://www.picvietnam.com/forum/showthread.php?t=3451 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 |
|
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |