PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC > Những câu hỏi thường gặp

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-10-2006, 12:59 AM   #1
Thangleduc
Nhập môn đệ tử
 
Thangleduc's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 9
:
Lỗi thường gặp - 628A

Anh Hiệp ơi, em copy cái code của anh viết ở diễn đàn vào Mplab IDE rồi nhấn Alt + F10, sao no hiện nhiều lỗi vậy ?


Code mà em copy là: ;================================================= =======
; Ten chuong trinh : Mach test den LED_1
; Nguoi thuc hien : Falleaf
; Ngay thuc hien : 23/05/2005
; Phien ban : 1.0
; Mo ta phan cung : Dung PIC16F628A - thach anh 10MHz
; : LED giao tiep voi PORTB
; : Cuc am cua LED noi voi GND
; : RB0 - RB7 la cac chan output
;----------------------------------------------------------------
; Ngay hoan thanh : 23/05/2005
; Ngay kiem tra : 23/05/2005
; Nguoi kiem tra : Doan Hiep
;----------------------------------------------------------------
; Chu thich : Mo ta cac diem khac nhau cua cac phien ban khac nhau
; : hoac cac chu thich khac
; : vd, dung che do Power On Reset, PORTB = 00000000
; : hoac, chuong trinh viet cho PIC Tutorial
; : hoac, chuong trinh nay hoan toan mien phi va co the dung cho
; : moi muc dich khac nhau
;================================================= =======

;================================================= ======
TITLE "Mach test LED_1"
PROCESSOR P16F628A
INCLUDE <P16F628A.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
;================================================= ===============================



Roi em Alt + F10, nó hiện errors như sau:


Quote:" Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F452 "Test 1.asm" /l"Test 1.lst" /e"Test 1.err"
Warning[215] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 25 : Processor superseded by command line. Verify processor symbol.
Message[301] C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P16F628A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Warning[230] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 27 : __CONFIG has been deprecated for PIC18 devices. Use directive CONFIG.
Error[126] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 27 : Argument out of range (not a valid config register address)
Warning[226] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 32 : Destination address must be word aligned
Error[157] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 35 : ORG at odd address
Warning[226] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 44 : Destination address must be word aligned
Warning[207] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 47 : Found label after column 1. (END.)
Error[129] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 49 : Expected (END)
Error[173] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 49 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM)
Halting build on first failure as requested.
BUILD FAILED: Mon Oct 16 12:32:54 2006
".


Có ai biết gì thêm thì chi mình với, đọc 1 hồi rồi mù, hixhix.

Em vào Configure -> Select Device -> rồi chọn Pic16F628A. rồi quay lại cái code của anh, em nhấn Alt + F10, thì nó chỉ còn chưng này errors à:


Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "Test 1.asm" /l"Test 1.lst" /e"Test 1.err"
Warning[215] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 25 : Processor superseded by command line. Verify processor symbol.
Message[302] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 39 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[173] C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM 48 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\JIMMY LEDUC\MY DOCUMENTS\MY WORKS\MECHTRONICS ENGINEERING\PRACTICING\MPLAB IDE\TEST 1.ASM)
Halting build on first failure as requested.
BUILD FAILED: Mon Oct 16 13:09:18 2006

thay đổi nội dung bởi: namqn, 17-10-2006 lúc 06:37 PM. Lý do: Updating
Thangleduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 06:49 AM   #2
chipchipvn
Đệ tử 2 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 43
:
Mình trả lời hộ bác F, hình như code này không có gì sai cả ( Bác F viết mừ) nhưng chỉ có 1 cái là đường dẫn (path) của file ASM của bạn quá dài (>62 ký tự) nên nó không chạy được thôi. Bạn sửa đường dẫn cho ngắn lại là xong thui.
chipchipvn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 07:36 AM   #3
Thangleduc
Nhập môn đệ tử
 
Thangleduc's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 9
:
I got it, love you, chipchpVn.
Thangleduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 11:08 AM   #4
lamhoang
Đệ tử 2 túi
 
lamhoang's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 27
:
Đề nghí chuyển bài này vào phần những câu hỏi thông thường để mọi người dễ theo dõi.
Đóng góp với mong muốn diễn đàn tốt hơn!
lamhoang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 02:26 PM   #5
MHz
Đệ tử 2 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 34
:
Trích:
Nguyên văn bởi chipchipvn View Post
Mình trả lời hộ bác F, hình như code này không có gì sai cả ( Bác F viết mừ) nhưng chỉ có 1 cái là đường dẫn (path) của file ASM của bạn quá dài (>62 ký tự) nên nó không chạy được thôi. Bạn sửa đường dẫn cho ngắn lại là xong thui.
...chính xác, à mà còn 1 lỗi nữa nè :
Sau lệnh END không có dấu chấm (.), bác xóa dấu chấm "chết tiệt" đó đi thì Ok...
MHz vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 02:29 PM   #6
Thangleduc
Nhập môn đệ tử
 
Thangleduc's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 9
:
Hi, mình chẳng biết post câu hỏi ở đâu cả.

Mình có thêm câu hỏi này:

KHi mình viết code để cho LED nó sáng, nhưng sao mình ko biết viết như thế nào:
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
.............
11111 = F


Vậy thì mình viết code như thế nào để set từng LED nó chay ?

Port P1.1 = 0000 0000 = ....??....
Port P1.1 = 1000 0000 = ....??....
Port P1.1 = 0100 0000 = ....??....
Port P1.1 = 0010 0000 = ....??....
Port P1.1 = 0001 0000 = ....??....
Port P1.1 = 0000 1000 = ....??....
Port P1.1 = 0000 0100 = ....??....
Port P1.1 = 0000 0010 = ....??....
Port P1.1 = 0000 0001 = ....??....


Đó là chạy 1 đèn một

Còn chay 2 đèn 1 lúc:

Port P1.1 = 1100 0000 = ....??....
Port P1.1 = 0110 0000 = ....??....
Port P1.1 = 0011 0000 = ....??....
Port P1.1 = 0001 1000 = ....??....
Port P1.1 = 0000 1100 = ....??....
Port P1.1 = 0000 0110 = ....??....
Port P1.1 = 0000 0011 = ....??....


Còn chay 3 đèn 1 lúc:

Port P1.1 = 1110 0000 = ....??....
Port P1.1 = 0111 0000 = ....70....
Port P1.1 = 0011 1000 = ....C7....
Port P1.1 = 0001 1100 = ....??....
Port P1.1 = 0000 1110 = ....??....
Port P1.1 = 0000 0111 = ....??....


Còn chay 4 đèn 1 lúc:

Port P1.1 = 1111 0000 = ....??....
Port P1.1 = 0111 1000 = ....??....
Port P1.1 = 0011 1100 = ....??....
Port P1.1 = 0001 1110 = ....??....
Port P1.1 = 0000 1111 = ....??....


Còn chay 5 đèn 1 lúc:

Port P1.1 = 1111 1000 = ....??....
Port P1.1 = 0111 1100 = ....??....
Port P1.1 = 0011 1110 = ....??....
Port P1.1 = 0001 1111 = ....??....


Còn chạy như vầy thì sao ?

Port P1.1 = 1111 1111 = ....FF....



Mình thấy nhiều người viết code để chạy LED, nhưng lại ko biết "công thức" để biết các số BINARY sang HEXADECIMAL
Thangleduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 03:17 PM   #7
chipchipvn
Đệ tử 2 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 43
:
Mình thấy cái này chỉ có cách là học thuộc thôi (mình cũng chỉ làm thế, không bít trò nào hay hơn), nhưng có một mẹo nhỏ (hình như bạn cũng bít rùi). Mình tách 4 số thành một nhóm, rùi bi-hex ( mình nghĩ cũng dễ nhớ thui) có 15 cái à. Vd: 01111100= 0111 1100 = 7 C = 7C. Mình chỉ bít có thế :d. Ngòai ra không biết hơn.
chipchipvn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2006, 05:35 PM   #8
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Talking

Trích:
Nguyên văn bởi Thangleduc View Post
Hi, mình chẳng biết post câu hỏi ở đâu cả.

Mình có thêm câu hỏi này:

KHi mình viết code để cho LED nó sáng, nhưng sao mình ko biết viết như thế nào:
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
.............
11111 = F


Vậy thì mình viết code như thế nào để set từng LED nó chay ?

Port P1.1 = 0000 0000 = ....??....
Port P1.1 = 1000 0000 = ....??....
Port P1.1 = 0100 0000 = ....??....
Port P1.1 = 0010 0000 = ....??....
Port P1.1 = 0001 0000 = ....??....
Port P1.1 = 0000 1000 = ....??....
Port P1.1 = 0000 0100 = ....??....
Port P1.1 = 0000 0010 = ....??....
Port P1.1 = 0000 0001 = ....??....


Đó là chạy 1 đèn một

Còn chay 2 đèn 1 lúc:

Port P1.1 = 1100 0000 = ....??....
Port P1.1 = 0110 0000 = ....??....
Port P1.1 = 0011 0000 = ....??....
Port P1.1 = 0001 1000 = ....??....
Port P1.1 = 0000 1100 = ....??....
Port P1.1 = 0000 0110 = ....??....
Port P1.1 = 0000 0011 = ....??....


Còn chay 3 đèn 1 lúc:

Port P1.1 = 1110 0000 = ....??....
Port P1.1 = 0111 0000 = ....70....
Port P1.1 = 0011 1000 = ....C7....
Port P1.1 = 0001 1100 = ....??....
Port P1.1 = 0000 1110 = ....??....
Port P1.1 = 0000 0111 = ....??....


Còn chay 4 đèn 1 lúc:

Port P1.1 = 1111 0000 = ....??....
Port P1.1 = 0111 1000 = ....??....
Port P1.1 = 0011 1100 = ....??....
Port P1.1 = 0001 1110 = ....??....
Port P1.1 = 0000 1111 = ....??....


Còn chay 5 đèn 1 lúc:

Port P1.1 = 1111 1000 = ....??....
Port P1.1 = 0111 1100 = ....??....
Port P1.1 = 0011 1110 = ....??....
Port P1.1 = 0001 1111 = ....??....


Còn chạy như vầy thì sao ?

Port P1.1 = 1111 1111 = ....FF....



Mình thấy nhiều người viết code để chạy LED, nhưng lại ko biết "công thức" để biết các số BINARY sang HEXADECIMAL
Bạn tham khảo thêm kĩ thuật bảng của mod Chính
Theo mình nghĩ viết số binary sẽ dễ dàng trong việc quản lí led vì chỉ cần nhìn vào là thấy ngay.Còn số hex thì để nhìn cho gọn mà thôi
Bạn viết như trên là sai rồi phải là thế này chứ
ví dụ :PORTB=xxxxxxxxx chứ không phải port P1.1 vì đây là 1 byte mà
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2006, 06:40 AM   #9
Thangleduc
Nhập môn đệ tử
 
Thangleduc's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 9
:
uh, cảm ơn bạn, nhưng mà mình nghe nói, nếu viết nhiều code kiêu Binary nhiều th2 tốn nhiều memory cua IC lắm, hình nhu có cách viết nào đó cũng do the same job mà lại ngắn và ít tốn bộ nhớ lắm. Có ai biết ko, post lên chỉ mọi người đi, cảm ơn.
Thangleduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-10-2006, 06:47 PM   #10
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Đồng ý với bạn viết mã binary sẽ tốn nhiều bộ nhớ của chip hơn mã hex điều (này mình cũng đã kiểm chứng rồi).Nhưng theo mình nghĩ tốn không nhiều lắm đâu nếu bạn viết Code không quá lớn,ai mà viết hết rom của pic16F628(hoặc những con pic cao hơn) thì mình bái phục họ đã đạt trình đọ thượng thừa rồi.
Chính vì vậy chúng ta nên viết sao cho dẽ hiểu nhất nhìn vào là xác định mình đang viết cái gì.
Còn cách mà bạn muốn không biết là cái này không nữa?
addwf PCL,f
dt "mã hex_1,mã hex2,..."
-->một dạng của kĩ thuật bảng
Cái này là theo mình nghĩ thôi nha,có thể không đúng như vậy đâu.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:15 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam