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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc 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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 14-02-2008, 09:08 AM   #1
Waterloo
Nhập môn đệ tử
 
Waterloo's Avatar
 
Tham gia ngày: Nov 2007
Bài gửi: 7
:
Nhúng ASM vào trong C.

Hi folks,

Các vị tiền bối cho em hỏi nếu dùng CSS hay HTPIC mà muốn viết cả C lẫn ASM vào trong 1 chương trình thì làm thế nào? Các bác có ví dụ nào thì cho một vài chiêu nhé.


Em cám ơn nhiều.
Waterloo vẫn chưa có mặt trong diễn đàn  
Old 14-02-2008, 06:50 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Waterloo View Post
Hi folks,

Các vị tiền bối cho em hỏi nếu dùng CSS hay HTPIC mà muốn viết cả C lẫn ASM vào trong 1 chương trình thì làm thế nào? Các bác có ví dụ nào thì cho một vài chiêu nhé.

Em cám ơn nhiều.
Bạn đọc hướng dẫn về các directive #asm và #endasm của tài liệu hướng dẫn sử dụng CCS C. Tôi cho là tài liệu hướng dẫn của HTPIC C cũng có những hướng dẫn tươ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
namqn vẫn chưa có mặt trong diễn đàn  
Old 15-03-2008, 07:19 AM   #3
wantanamo69
Nhập môn đệ tử
 
Tham gia ngày: Feb 2008
Bài gửi: 5
:
ASM in CCS

Trích:
Nguyên văn bởi namqn View Post
Bạn đọc hướng dẫn về các directive #asm và #endasm của tài liệu hướng dẫn sử dụng CCS C. Tôi cho là tài liệu hướng dẫn của HTPIC C cũng có những hướng dẫn tương tự.

Thân,
;/////////////////////////////////////////////////

Thi du cho CCS:

//-------------------------------
/////////////////////////////////
//

#INT_GLOBAL
void isr() {
#asm
//store current state of processor
MOVWF save_w
SWAPF status,W
BCF status,5
BCF status,6
MOVWF save_status
// Save anything else your code may change
// You need to do something with PCLATH if you have GOTOs

// remember to check to see what interrupt fired if using more than one!!

// code for isr
BCF t0if
INCF counter,F
BTFSC zero_flag
INCF (&counter+1),F
//
// cho label coi co work khong
goto TestLabel
nop
TestLabel:
// restore processor and return from interrupt
SWAPF save_status,W
MOVWF status
SWAPF save_w,F
SWAPF save_w,W
#endasm
}

;///////////////////////////////////

Thi du cho MCC18:

//------------------- NutSelec

//if portA.1 = 0 then // Bam nut Selec (sel cai option dang hi-light)
if (!NutSelec) // Bam nut Selec (sel cai option dang hi-light)
{
DelayMs (20);
ChoSelecNha:
if (!NutSelec) goto ChoSelecNha; // debounce
//
//Select CuSoMenu // Coi la dang o hang nao
switch (CuSoMenu)
{
case 3: // Neu dang o hang 2 thi "1_ CAT pophai"
CatPoPhai(); // -- o screen nay se hoi po-phai so may --
ClearScreen();
SubChkMenu();
break;
case 4: // Neu dang o hang 3 thi "2_ Lay pophai"
LayPoPhai(); // -- o screen nay se hoi po-phai so may --
ClearScreen();
SubChkMenu();
break;
case 5: // Neu dang o hang 4 thi "3_ Amb adjust"
// Goi Amb adjust
#asm nop #endasm //---> chu-y: Inline asenbly
break;
case 6: // Neu dang o hang 5 thi "4_ -- Exit --"
// Goi -- Exit --
#asm nop #endasm
goto XongMenuVe;
//break;
} //EndSelect

} //Endif
//----------------------
//

Another example cho MCC18:

Cai nay viet cho serial temperature (MAX6675)



_asm

//MOVLB 1 // sel bank
clrf BitCountK ,1
movlw 8 //; 8 bit (bit 15-8)
TiepTucHet16_8:
cpfslt BitCountK,1
bra Lay7_0 //; Da doc het 8 bits cua hi-byte, xuong lay Lowe byte
bsf PORTE, 0, ACCESS // _/"" SCK len
NOP // them 2 nop cho clk lau hon
btfsc PORTE, 2, ACCESS //RE2 //; Coi la bit-in CAO/THAP ?
goto BitInCao
bcf STATUS, 0, ACCESS //; bit nay THAP
goto ProcessBits
BitInCao:
bsf STATUS, 0, ACCESS //C //; bit nay CAO
ProcessBits:
bcf PORTE, 0, ACCESS // ""\_ SCK xuong (lay bit xong roi)
rlcf A12BitRet+1, 1, 1 //; bang cach rotate bit vao (da set hay clr o tren)
incf BitCountK, 1,1 // 1, 0 //; tang so bit da dem
goto TiepTucHet16_8 //; va doc cho den het 8 bits truoc

_endasm

//;;-----------

_asm

Lay7_0: //;--- Doc 8 bits ---
//MOVLB 1 // sel bank
clrf BitCountK, 1 //; bat dau 8 bit khac
movlw 8 //; 8 bit (bit 7-0)
TiepTucHet7_0:
cpfslt BitCountK, 1
bra DaHet12b2 //; Da doc het 12 bits roi
bsf PORTE, 0, ACCESS //; _/"" SCK len
NOP // them 2 nop cho clk lau hon
btfsc PORTE, 2, ACCESS //RE2 Coi la bit-in CAO/THAP ?
goto BitInCao2
bcf STATUS, 0, ACCESS //; cho bit nay THAP
goto ProcessBits2
BitInCao2:
bsf STATUS, 0, ACCESS //; cho bit nay CAO
ProcessBits2:
bcf PORTE, 0, ACCESS // ""\_ SCK xuong (lay bit xong roi)
rlcf A12BitRet, 1, 1 //; chuan bi cho next bit
incf BitCountK, 1, 1 //; tang so bit da dem
goto TiepTucHet7_0 //; va doc cho den het 8 bits sau
//;;
//;;-----------
DaHet12b2: //; Da doc het 16 (12) bits roi
//;;



_endasm

A12BitTemp = A12BitRet; // de in ra coi bit 2 OPEN hay CLOSE

////============ thay bang asm ------------------/\-------


_asm // --- cho them de biet la probe gan hay khong ---

bcf ProbeOpen, 0, 1 // cho bit nay THAP truoc di la co probe connected
btfsc A12BitRet, 2, 1 // Coi la bit2 CAO/THAP ?
bsf ProbeOpen, 0, 1 // bit cao tuc la probe khong gan

//_endasm

//--- Bay gio lay 12 bits cua temperature ra ---

movlw 0b01111111 //b'01111111' // bo bit 15 (dummy bit)
andwf A12BitRet+1, 1, 1
movlw 0b11111000 //b'11111000' // bo bit 2-0 (dummy bit)
andwf A12BitRet, 1, 1
//
// Da co 12 bits, bay gio cho dung position (shift right 3 lan ca hai bytes)
//
bcf STATUS,0, ACCESS // clr carry cho chac chan
rrcf A12BitRet+1,1, 1 // mot bit right
rrcf A12BitRet , 1, 1

bcf STATUS,0, ACCESS // clr carry cho chac chan
rrcf A12BitRet+1, 1, 1 // mot bit right
rrcf A12BitRet, 1, 1

bcf STATUS,0, ACCESS // clr carry cho chac chan
rrcf A12BitRet+1, 1, 1 // mot bit right
rrcf A12BitRet, 1, 1



//--- da co Nhiet Do trong "A12BitRet" ---

_endasm


TC_CS = 1;
//TC_CLK = 0;

A12BitTempL = A12BitRet; // de in ra coi bit 2 OPEN hay CLOSE
//A12BitTempH = A12BitRet+1; // de in ra coi bit 2 OPEN hay CLOSE
A12BitTempH = A12BitRet >> 8; //


}

//========================================
//

Regards,

LB
wantanamo69 vẫn chưa có mặt trong diễn đàn  
Old 24-03-2008, 06:30 AM   #4
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Nhúng asm trong MikroC

Với MikroC, nhúng asm như sau:

asm {
...đặt code asm ở đây... }

thay đổi nội dung bởi: minhsondaklak, 24-03-2008 lúc 06:47 AM.
minhsondaklak vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá

Ðiều Chỉnh
Xếp Bà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:59 AM.


Đượ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