PDA

View Full Version : Hỏi về MPLAB


chipchipvn
15-10-2006, 06:01 PM
Xin lỗi các anh, em mún hỏi về cách sử dụng MPLAB. Híc, em không biết sao mà em đã copy mã của bác F vào rùi nhưng mừ RUN thì không thấy gì hết cả. Các bác có thể cho em xin tài liệu hướng dẫn MPLAB được không ạ! Cảm ơn.

namqn: Bạn nói rõ hơn là bạn muốn làm gì với MPLAB. Tài liệu của MPLAB thì vào Microchip download bản mới nhất (dùng chức năng tìm tài liệu để tìm các tài liệu sau: DS51281, DS51519).

falleaf
15-10-2006, 10:09 PM
MPLAB không cần dùng Mã gì cả, anh Nam đã nhắn rồi.

Chỉ khi nào các bạn cần nhúng các trình dịch khác vào như C30 hoặc những cái mà nó không cho, thì mới cần phải nhúng vào bẻ khóa.

Chúc vui

chipchipvn
16-10-2006, 12:14 AM
Ý em là, em có xem bài "học PIC trong một ngày" của bác F, em dùng MPLAB để soạn CODE ( thực ra là em chép từ bài của bác F) sau đó thử Debug trước khi convert thành file hex để đưa vào Proteus làm giả lập! Nhưng mà khi em dùng MPLAB SIM để debug thì chẳng thấy có hiện tượng chi cả :(, em không hiểu làm sao để biết code mình đúng hay sai đây! Nếu nạp vào Proteus thì chỉ nhận được một thông báo "lạnh lùng" "FATAL: [U1] Program or EEPROM data has invalid address [1000] for this device". Cảm ơn các anh đã giúp đỡ!

falleaf
16-10-2006, 12:46 AM
Em dùng đoạn code nào? em gửi lại đoạn code đó lên cho mọi người xem luôn nhé.

Chúc vui

chipchipvn
16-10-2006, 06:09 PM
Hix, em dùng y chang đoạn CODE của bác F, chỉ thay đổi thành con P16F877A, em đã thêm cả header files và linker files. Nhưng mừ khi Build thì lại báo lỗi sau " Processor superseded by command line. Verify processor symbol." Xin lỗi vì làm phiền các bác nhưng em thiệt chả bít làm sao T_T

;================================================= =======
TITLE "Mach test LED_1"
PROCESSOR P16F877A
INCLUDE <P16F877A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC

;================================================= ======
ORG 0x0000
GOTO MAIN


ORG 0x0005

MAIN
BANKSEL TRISB ; bank select
CLRF TRISB ; trisb = 00000000
; portb = output
BANKSEL PORTB
BSF PORTB, 0 ; rb0 = 1
; RB0 = 5V
GOTO $ ; dung chuong trinh tai day
; vong lap tai cho^~
; khong bao gio ket thuc
END. ; lenh bat buoc de ket thuc
;================================================= ===============================

namqn
16-10-2006, 06:46 PM
Hix, em dùng y chang đoạn CODE của bác F, chỉ thay đổi thành con P16F877A, em đã thêm cả header files và linker files. Nhưng mừ khi Build thì lại báo lỗi sau " Processor superseded by command line. Verify processor symbol." Xin lỗi vì làm phiền các bác nhưng em thiệt chả bít làm sao T_T

;================================================= =======
TITLE "Mach test LED_1"
PROCESSOR P16F877A
INCLUDE <P16F877A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC

;================================================= ======
ORG 0x0000
GOTO MAIN


ORG 0x0005

MAIN
BANKSEL TRISB ; bank select
CLRF TRISB ; trisb = 00000000
; portb = output
BANKSEL PORTB
BSF PORTB, 0 ; rb0 = 1
; RB0 = 5V
GOTO $ ; dung chuong trinh tai day
; vong lap tai cho^~
; khong bao gio ket thuc
END. ; lenh bat buoc de ket thuc
;================================================= ===============================
Đó không hẳn là lỗi đâu. MPLAB chỉ nhắc cho bạn biết là nó sẽ dùng thông tin về bộ xử lý ở dòng lệnh (được thiết lập bằng lệnh mênu Configure>Select Device) thay vì dùng thông tin mà bạn mô tả trong tập tin nguồn. Bạn có thể kiểm tra bộ xử lý đang được chọn cho MPLAB bằng cách nhìn vào dòng trạng thái của MPLAB, ở vị trí thứ ba từ trái sang.

Nếu bạn chọn bộ xử lý tương thích với bộ xử lý được mô tả trong tập tin nguồn thì chương trình dịch ra sẽ chạy tốt.

Thân,

chipchipvn
16-10-2006, 07:19 PM
^^, cảm ơn bác Nam nhìu, em đã làm được rùi :D, nhưng bác ơi, cho em hỏi thêm 1 chút nữa! Em nghe bác F bảo là học PIC cần mạch nạp, cht nạp... Em mún hỏi là liệu em có thể không dùng mấy cái đó vội mà dùng Proteus để học được không ạ. Có bất lợi gì không? Em xin cảm ơn bác.

namqn
16-10-2006, 09:11 PM
^^, cảm ơn bác Nam nhìu, em đã làm được rùi :D, nhưng bác ơi, cho em hỏi thêm 1 chút nữa! Em nghe bác F bảo là học PIC cần mạch nạp, cht nạp... Em mún hỏi là liệu em có thể không dùng mấy cái đó vội mà dùng Proteus để học được không ạ. Có bất lợi gì không? Em xin cảm ơn bác.
Học trên mạch thực tế là cách học tốt nhất. Tuy nhiên, nếu bạn chưa có điều kiện thì vẫn có thể học trên các bộ mô phỏng. Các bộ mô phỏng có một điểm mạnh là cho phép bạn theo dõi nội dung các thanh ghi trong bộ xử lý, thực hiện từng lệnh mã máy. Nhưng các bộ mô phỏng cũng có điểm yếu là không có khả năng mô phỏng một số hiện tượng trong thực tế.

Thân,

chipchipvn
17-10-2006, 03:58 PM
Hức, bác Nam ơi, em lại phải làm phiền bác rùi! MPLAB xong rùi nhưng khi em chuyển qua bên Proteus giả lập lại báo lỗi, bác xem hộ em với, em chả hiểu nó nói gì nữa. Sau khi em nap file hex vào rồi chạy thử nó báo lỗi sau
[U1] Loading HEX file '..\..\..\..\Documents and Settings\Administrator\My Documents\test-copy.hex'.
FATAL: [U1] Program or EEPROM data has invalid address [1000] for this device

Real Time Simulation failed to start

Real Time Simulation FAILED.

hức, bài này em đã post ở chỗ khác nhưng hình như bác không thấy. Em xin lỗi nhưng em bí quá làm liều bác ạ.

namqn
17-10-2006, 06:33 PM
Hức, bác Nam ơi, em lại phải làm phiền bác rùi! MPLAB xong rùi nhưng khi em chuyển qua bên Proteus giả lập lại báo lỗi, bác xem hộ em với, em chả hiểu nó nói gì nữa. Sau khi em nap file hex vào rồi chạy thử nó báo lỗi sau
[U1] Loading HEX file '..\..\..\..\Documents and Settings\Administrator\My Documents\test-copy.hex'.
FATAL: [U1] Program or EEPROM data has invalid address [1000] for this device

Real Time Simulation failed to start

Real Time Simulation FAILED.

hức, bài này em đã post ở chỗ khác nhưng hình như bác không thấy. Em xin lỗi nhưng em bí quá làm liều bác ạ.
Ok, đã đọc post đó của bạn nhưng bận quá nên chưa trả lời.

Bạn kiểm tra lại xem mã .hex được dịch ra có nằm lọt vào không gian địa chỉ bộ nhớ Flash của chip hay không. Dùng một phần mềm nào đó như WinPic800 để load tập tin .hex vào, và xem mã chương trình nằm ở vùng nhớ nào. Kiểm tra cả bộ nhớ chương trình lẫn EEPROM, chọn đúng chip sẽ được dùng trong Proteus khi mở WinPic800.

Thân,

chipchipvn
17-10-2006, 07:35 PM
Vâng, cảm ơn bác. Em sẽ thử ngay mặc dù chưa bít cái winpic800 là cái gì cả :d

chipchipvn
18-10-2006, 07:24 AM
Hức, bác ơi, em đã kiểm tra lại bộ nhớ như lời bác nói, chỉ từ 0x00 đến 0x13 thui, chắc là nằm trong bộ nhớ Flash rùi. nhưng nó vẫn báo lỗi như thế ( mặc dù có thay đổi chút đỉnh)

Warning: [U1] CFGWORD2 not implemented
FATAL: [U1] Program or EEPROM data has invalid address [2000] for this device

Real Time Simulation failed to start

Real Time Simulation FAILED.

Sau đó em quay qua phần Help để xem hướng dẫn thì nó bảo add file source code (ten_file*.asm) của mình vào, em làm theo thì nó lại bảo kiếm không ra file ten_file*.COD, hức, đúng là không có file COD thật. Làm sao cho MPLAB tạo ra file COD cho mình hả bác. Hức, em xin lỗi nhưng mới tập tọng vào nghề hỏi hơi nhìu, bác thông cảm cho em.
Híc, mấy bữa nay mắc cái Proteus chạy không được nên không biết làm tiếp thế nào Y_Y

spirit
18-10-2006, 12:33 PM
Hức, bác ơi, em đã kiểm tra lại bộ nhớ như lời bác nói, chỉ từ 0x00 đến 0x13 thui, chắc là nằm trong bộ nhớ Flash rùi. nhưng nó vẫn báo lỗi như thế ( mặc dù có thay đổi chút đỉnh)

Warning: [U1] CFGWORD2 not implemented
FATAL: [U1] Program or EEPROM data has invalid address [2000] for this device

Real Time Simulation failed to start

Real Time Simulation FAILED.

Sau đó em quay qua phần Help để xem hướng dẫn thì nó bảo add file source code (ten_file*.asm) của mình vào, em làm theo thì nó lại bảo kiếm không ra file ten_file*.COD, hức, đúng là không có file COD thật. Làm sao cho MPLAB tạo ra file COD cho mình hả bác. Hức, em xin lỗi nhưng mới tập tọng vào nghề hỏi hơi nhìu, bác thông cảm cho em.
Híc, mấy bữa nay mắc cái Proteus chạy không được nên không biết làm tiếp thế nào Y_Y
Câu Error trên của Proteus là dữ liệu bị sai ở địa chỉ 2000H do đó có thể bạn chọn chip mô phỏng bị sai so với cấu hình bạn chọn con Pic trong chương trình của mình.
Mình đã sử dụng Proteus cũng được 1 tháng rùi nhưng chưa bao giờ thấy hiện tượng như bạn nêu trên.
Bạn nên đưa hình ảnh mô phỏng trên Proteus và Source Code lên đây luôn đi
mình sẽ giúp bạn từng bước (nếu có thể).
Anh Namqn bận lắm do đó mình sẽ trả lời giúp bạn.

chipchipvn
18-10-2006, 04:30 PM
Cảm ơn bạn, đây là CODE của mình nhưng mình chạy với MPLAB SIM không có vấn đề nên mình nghĩ là do không biết xài Proteus thui!

;================================================= ==============
;Chuong trinh dieu khien LED bat tat
;An 1 cai LED sang, an tiep LED tat
;================================================= ==============
Title "LED_2"
Processor p16f88
Include <p16f88.inc>
;================================================= ===============
ORG 0x0000

Goto Main
ORG 0x0005

Main
banksel TRISB
clrf TRISB
movlw 2h
movwf TRISB
Goto Check
Check
Btfsc PORTB,1
Goto Check
Call Switch
Switch
btfss PORTB,0
bsf PORTB,0
bcf PORTB,0
Return
End

Còn đây là file *.DSN dùng trong Proteus của mình, mình không chụp hết được cả cái mạch ^^

http://s19.quicksharing.com/v/6517024/test02.DSN.html

Còn con Chip thì mình dùng 16F88 trong Proteus, mình không biết nó sai ở đâu nữa.
Cảm ơn spirit!

spirit
18-10-2006, 05:28 PM
Hello chipchipvn,đọc sơ qua mã nguồn bạn viết ở trên thấy rằng nó không tối ưu.Để tối nay mình về sẽ test lại giùm bạn và trả lời bạn trong thời gian sớm nhất.
Mình nghĩ bạn nên học và viết cho Pic 16F877A luôn đi bởi vì chức năng của nó là nhất trong dòng 16F và trên PICVIETNAM có rất nhiều bài ứng dụng cho nó( bạn có thể search ).
Còn học nó như thế nào thì trên diẽn đàn cũng đã nói rất nhiều,bạn chịu khó tìm kiếm nhé.
Khi học Pic thì cố gắng làm trên mạch thật bởi vì Proteus nhiều lúc mô phỏng chạy được nhưng khi đưa trên mạch thật thì bó phép(vì các điều kiện bên ngoài không lý tưởng...).

Về mạch nạp thì bạn có thể mua mạch nạp của PICVIETNAM để ủng hộ(giá rất sinh viên).Về mạch thực hành thì bạn có thể thiết kế cho riêng mình.
Nếu ngại làm thì bạn có thể mua mạch của lớp học PIC ở Hà Nội do anh BINHANH làm.Khoảng 400k thôi nhưng vừa nạp và thục hành luôn.

Chúc bạn có nhiều niềm vui khi hoc Pic.

chipchipvn
18-10-2006, 08:07 PM
ừa, mình biết mã này không là tối ưu, chẳng qua mún viết một cái đơn giản để kiểm tra tay Proteus chạy thế nào đã. Mình cũng mới học PIC thui, nhưng cái Pro lại dở chứng, thế là mấy hôm nay chỉ có viết CODE chay bằng MPLAB ( nói chung cũng hơi bùn). Bạn xem lại cái lỗi với Proteus hộ mình với nhé. Mình cũng mún làm mạch nạp... nhưng mình bận quá, không tự làm được, mua thì dễ nhưng mình không thích ^^ nên tạm thời mình chỉ có thể học trên PC thôi, khi nào rỗi hơn mình mới có thể làm in-c được. Thân

À, spirit cho mình Y! đi (Y! của mình là live4vietnam)

spirit
18-10-2006, 11:33 PM
Chương trình của bạn mình test rồi
Thứ 1: về source code
+ Bạn viết không theo một logic nào cả cái này là đặc điểm chung của người mới biết thôi lúc trước mình cũng như vậy.
Bạn nên viết giải thuật chương trình ra ( bài của bạn đâu khó để viết giải thuật đâu phải không ) để dẽ dàng kiểm tra lỗi sai và Debug.
Chương trinh của bạn sai ở những điểm này:

Main
banksel TRISB
clrf TRISB
movlw 2h
movwf TRISB *
Goto Check
Check
Btfsc PORTB,1
Goto Check
Call Switch
Switch **
btfss PORTB,0
bsf PORTB,0
bcf PORTB,0
Return ***
End

* : bạn cần banksel PORTB ( chuyển về bank 0 ) vì bạn đang ở bank 1
** :Đoạn chương trình Switch này không hợp lí ( đọc kĩ sẽ thấy thôi mà ^_^)
***:thay bằng goto Check
Thứ 2 : Bạn không cần vẽ thạch anh,tụ bù nhiệt 30pf,nguồn 5V...mà chỉ cần led và button ( nhớ button có thêm điện trở kéo nguồn hoặc bcf OPTION_REG,7 ) là đủ.
Thứ 3 : Để chỉnh tần số Pic trong Proteus thì click chuột phải xong click chuột trái ( làm từ từ thôi ) có chỗ chọn tần số trong hộp thoại hiện ra ( ví dụ chọn 32.768Khz,4Mhz...).Để lấy linh kiện thì gõ P -> gõ tên linh kiện ( ví dụ 7seg,LCD,led (có màu),pic16f877 ... có gì bí mình sẽ chỉ thêm)

Bạn mới học Pic thì qua luồng này lấy tài liệu Nigel về
http://www.picvietnam.com/forum//showthread.php?t=9
bạn nên đọc kĩ những bài tập của Nigel,ông ta viết rất hay và dễ hiểu
và các tutorial của Mod Chính ở luồng này
http://www.picvietnam.com/forum//showthread.php?t=238
trình độ khá rồi thì qua luồng này
http://www.picvietnam.com/forum//showthread.php?t=325

Có gì thì mail cho mình theo địa chỉ này spirit317vn@yahoo.com hoặc post lên đây cũng được.
Thôi nhé,chúc bạn thành công.

omlun
20-05-2007, 12:26 AM
Cảm ơn bạn, đây là CODE của mình nhưng mình chạy với MPLAB SIM không có vấn đề nên mình nghĩ là do không biết xài Proteus thui!

;================================================= ==============
;Chuong trinh dieu khien LED bat tat
;An 1 cai LED sang, an tiep LED tat
;================================================= ==============
Title "LED_2"
Processor p16f88
Include <p16f88.inc>
;================================================= ===============
ORG 0x0000

Goto Main
ORG 0x0005

Main
banksel TRISB
clrf TRISB
movlw 2h
movwf TRISB
Goto Check
Check
Btfsc PORTB,1
Goto Check
Call Switch
Switch
btfss PORTB,0
bsf PORTB,0
bcf PORTB,0
Return
End

Còn đây là file *.DSN dùng trong Proteus của mình, mình không chụp hết được cả cái mạch ^^

http://s19.quicksharing.com/v/6517024/test02.DSN.html

Còn con Chip thì mình dùng 16F88 trong Proteus, mình không biết nó sai ở đâu nữa.
Cảm ơn spirit!

có gửi link gì xin bạn pót lên diễn đàn picvn luôn cho anh em dễ tham khảo

spkt_kdd95
24-05-2008, 10:16 PM
Chào các sư huynh
Các sư huynh chỉ giúp dùm mình, không hiểu tại sao mình biên dịch chương trình led (đã viết sản chương trình) khi biên dịch thì báo lổi A# Device before this line.
Trong khi chương trình viêt cho P16F84A.
Mong các sư huynh chi giúp

namqn
24-05-2008, 10:39 PM
Chào các sư huynh
Các sư huynh chỉ giúp dùm mình, không hiểu tại sao mình biên dịch chương trình led (đã viết sản chương trình) khi biên dịch thì báo lổi A# Device before this line.
Trong khi chương trình viêt cho P16F84A.
Mong các sư huynh chi giúp
Vậy chương trình của bạn nó ra sao? Lỗi được báo ở dòng nào?

Với thông báo lỗi bạn đã nêu thì tôi có thể dịch cho bạn như sau: "Một # linh kiện phía trước dòng này". Tôi cũng không rõ thông báo lỗi này đề cập đến điều gì.

Thân,

LongHaUI
12-10-2008, 12:22 PM
Cảm ơn mọi người đã trả lời cho luồng thông tin của mình . Vấn để lần trước mình hỏi là về lỗi thư viện số thực khi quy đổi các số từ dạng khác về số thực . Và ngôn ngữ mình viêt đó là ngôn ngữ C . Ngôn ngữ bậc cao . Mọi người hãy giải đáp nốt cho mình nha

0102539083
20-05-2010, 04:55 PM
em chao thay QNAM hom qua thay cho em doan code ve dich tren MPLABIDE V8.50
bao loi .em moi hoc duoc mot ngay ,mong thay huong dan cho em them .



Executing: "D:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe" -o3.cof -m3.map --summary=default --output=default --chip=16F887 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.70
Copyright (C) 2009 Microchip Technology Inc.
Error [939] ; . no file arguments

********** Build failed! **********

namqn
20-05-2010, 08:41 PM
em chao thay QNAM hom qua thay cho em doan code ve dich tren MPLABIDE V8.50
bao loi .em moi hoc duoc mot ngay ,mong thay huong dan cho em them .



Executing: "D:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe" -o3.cof -m3.map --summary=default --output=default --chip=16F887 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.70
Copyright (C) 2009 Microchip Technology Inc.
Error [939] ; . no file arguments

********** Build failed! **********
Thông báo lỗi "no file arguments" cho thấy bạn chưa thêm tập tin nguồn .c vào project.

Thân,

0102539083
29-05-2010, 12:36 AM
//bai tap nut nhan
#include<htc.h>
__CONFIG(HS&PWRTEN&MCLREN&UNPROTECT&DUNPROTECT&SWBOREN&LVPDIS);
__CONFIG(BORV21);
#define _XTAL_FREQ 20000000
void main(void){
unsigned char i;
ANSEL =0X00;
RBPU =0;
TRISB =0XFF;
TRISE =0XF8;
PORTE =0X00;
while(1){
//for(i=0;i<10;i++){
//__delay_ms (30);
//__delay_ms (150);
//}
if(RB2 ==1) RE2 =i;
else RE2 =0;
PORTE^ =0X07;}
}


em chào thầy sau đoạn code nầy không chạy được ,nút nhấn không tác động gì hết đên hai con leds

0102539083
29-05-2010, 12:43 AM
thầy cho em xin lads 2 và 3 mà thầy giảng trên lơp đia chĩ em (blequangbinh@yahoo.com)
em cam ơn thây

hongtuan
03-08-2010, 03:22 PM
Chào mọi người! Mình có vấn đề này xin được chỉ giáo
Mình không biết chương trình MPLAB sẽ biên dịch như thế nào khi mình add hơn 2 file.c vào source file.

shitham
03-08-2010, 07:58 PM
Bạn yên chí rằng chương trình biên dịch sẽ tự tìm hàm main() của bạn :D