PDA

View Full Version : Mong giúp đỡ


atclub
21-04-2007, 04:06 AM
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 đỡ.

atclub
21-04-2007, 05:40 PM
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!
__________________

atclub
21-04-2007, 05:48 PM
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?

atclub
21-04-2007, 06:00 PM
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!!

#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);
}
}

namqn
21-04-2007, 07:01 PM
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,

atclub
21-04-2007, 07:13 PM
Đã 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'.