|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
21-04-2007, 04:06 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 10
: |
Mong giúp đỡ
Em mới học pic và bắt đầu với con 16f877a, có làm bài test port B với code như sau:
processor 16f877a ; khai báo vi điều khiển include <p16f877a.inc> ; header file dính kèm __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; khai báo “configuration bit” ;---------------- Chuong trình chính --------------------------- ORG 0x00 GOTO start start BCF STATUS,RP1 BSF STATUS,RP0 ; chọn BANK 1 CLRF TRISB ; khởii tạo PORTB - PORTB là cổng xuất dữ liệu CLRF STATUS ; chọn BANK 0 MOVLW 0X00 ; MOVWF PORTB ; PORTB = 0 loop GOTO loop END Phần mềm dùng MPLab IDE 7.40, ấn CLTR F10 thì được file hex nhưng khi nạp vào Pic thì PortB vẫn ở mức 5v trong khi đó em làm bằng C để test port (dùng CCSC_3.249 ) thì lại được. Mạch test của em làm giống như bác ntc đã chỉ dẫn! Mong mọi người giúp đỡ. |
21-04-2007, 05:40 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 10
: |
Sau khi hỏi Bác Falleaf đã nhận đc câu trả lời:
" Sửa lại CLRF STATUS = BCF STATUS, RB0; chọn bank 0 Sửa 2 cái MOVLW..., MOVWF... thành CLRF PORTB Thử lại. Bạn chuyển cái này lên diễn đàn nhé. Mình không trả lời riêng. " Mong bác Falleaf thông cảm vì chờ mãi không thấy ai trả lời nên mạn phép hỏi riêng. Cám ơn bác nhiều! __________________ |
21-04-2007, 05:48 PM | #3 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 10
: |
Bác Falleaf ơi, em làm đúng như bác bảo nhưng vẫn không được, PortB xuất ra toàn 5V thôi, tại sao thế nhỉ? Hay tại phần mềm không đúng?
|
21-04-2007, 06:00 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 10
: |
Lập trình theo đúng như Linhnc hướng dẫn ở trong CCS thì Test portB ngon lành thế nhưng khi làm ở MPLab IDE 7.40 như bài trên đã viết và sửa lại theo đúng như bác Falleaf bảo lại không được, mong mọi người giúp đỡ với!!
Code:
#include <16f877a.h> #include <def_877a.h> #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) void main() { // Thiet lap che do cho PORTB TRISB = 0x00; // Tat ca PORTB deu la cong xuat du lieu PORTB = 0xFF; // Tat het cac LED While(1) { PORTB = 0; // Cho các LED sáng delay_ms(250); // Tạo thời gian trễ 250ms PORTB = 0xFF; delay_ms(250); } } thay đổi nội dung bởi: namqn, 21-04-2007 lúc 06:57 PM. |
21-04-2007, 07:01 PM | #5 |
Trưởng lão PIC bang
|
Code trong MPLAB của bạn bật LVP, còn code trong CCS C thì tắt LVP. Bạn sửa lại code trong MPLAB cho giống code bên CCS C rồi thử lại xem. Ngoài ra, nếu bạn dùng thạch anh tốc độ tương đối cao (>= 8 MHz) thì nên chỉnh _XT_OSC thành _HS_OSC bên phần code trong MPLAB.
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 |
21-04-2007, 07:13 PM | #6 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 10
: |
Đã thử lại như bác Namqn chỉ dẫn và đã thành công; cám ơn bác nhiều nha!
namqn: sau này bạn có thể dùng nút 'Cảm ơn'. |
|
|