PDA

View Full Version : PIC - CCS compiler


noisePIC
02-08-2005, 09:04 AM
Đối với người mới học PIC việc đầu tiên cần quan tâm là nên chọn con PIC nào?riêng noisepic chọn con 16F84 nó có ít chân với lại trên mạng có rất nhiều tutorial về PIC 16F84 và các dự án của nó. Theo lời khuyên của mọi người khi làm việc với PIC thì cứ học từng bài một:I/O,timer,interrupt,ADC..cứ từng bài mộtkhi gặp một bài toán thực tế .Ghép chúng lại với nhau thôi! làm càng nhiều càng lên tay như kiểu văn ôn võ luyện.
Tại sao học CCS? Đơn giản là dễ học,dễ làm..gần gũi với C standard thư viện đồ sộ ứng dụng thực tế rất nhanh với lại dễ mua (Rẻ bằng 1/2 HT PIC).
Còn chương trình biên dịch C nữa là HT PIC ... cái này bác binhanh siêu lắm!

Trước khi bắt tay vào CCS noispic khuyên các bạn tham khảo bài viết của bác falleaf về MPASM và dành chút thời gian đọc cái này nhé
http://picvietnam.sytes.net/noisepic/PicTutorial.chm
nó dạy làm pic như ru ngủ ấy!! đọc đi đọc lại ..dần dần khác ngấm!
Nếu các bạn không đọc thì chương trình của bạn chạy sai chỗ nào cũng không biết đâuBài học đầu tiên mà mọi người hay làm là cho nháy 1 LED, Cho Led chạy vòng quanh,hiển thị lên Led 7 đoạn, lên LCD...Đây là các dạng về I/O thuần túy và trễ thời gian.
Bài đầu tiên: Cho một đèn LED nháy với khoảng thời gian trễ là 100ms

//************************************************** *
// CHUONG TRINH LED NHAY
//author:noisepic@gmail.com
//date:1/08/2005
//status:
//Details:
//************************************************** ***
#include<16F84a.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
main()
{
while(TRUE)
{
output_high(PIN_A1);
delay_ms(100);
output_low(PIN_A1);
delay_ms(100);
}
}

Các bạn nên có dòng *** để cho biết chương trình của bạn đã hoàn thành chưa, chạy tốt chưa phần cứng thế nào? Ngày hoàn thành...để đánh giá tiến độ và nhật kí làm việc của bạn.
Phân tích chương trình

#include<16F84a.h> Dòng này khai báo con PIC bạn sử dụng.Trong file 16f84a.h định nghĩa các thanh ghi.các bit quan trọng!
#fuses NOWDT,PUT,HS,NOPROTECT //thiết lập các tham số cho PIC
#use delay(clock=4000000)// khai báo tần số dao động cấp cho PIC (thạch anh)

Ta cắm vào led vào chân A1(Chân số 18 trên 16F84).Và phải để chân này là output.Trong ASM như các bạn biết để led trên chân A1 sáng thì cần
Giả sử cổng A có duy nhất A1 là Output,các chân còn lại là INPUT
bạn phải thực hiện
- Chuyển sang Bank1
- Đặt giá trị cho thanh ghi TRISA
-Chuyển sang Bank0
- Đặt giá trị cho thanh ghi PORTA
công việc này được CCS làm hộ với lệnh output_high(PIN_A1).Không tin các bạn VIEW C/ASM ..rồi coi!
Hàm delay_ms(100); // trễ 100ms PIC chẳng làm gì cả! Chạy lòng vòng.Nếu trong chươngtrình còn ứng dụng khác thì có thể tận dụng khoảng thời gian này để làm việc!!
Nhiệm vụ của các bạn:
- Xem file 16f84a.h có gì? có hàm gì? ..và tra HELP tìm hiểu các hàm.Đặc biệt trong
phần build in function có các hàm vào ra cơ bản. Đọc và hiểu nó!

Để bắt đầu các bạn tạo một PROJECT File/New/Project
http://picvietnam.sytes.net/noisepic/project.jpg

Có 2 cách làm bằng tay(manual) hoặc làm theo hướng dẫn(wizard).Bạn nên tạo một thư mục cho từng ứng dụng cụ
thể và file chuẩn để test (biết đâu con PIC của bạn chết lúc nào không biết!).Bạn cứ làm theo kiểu MANUAL
http://picvietnam.sytes.net/noisepic/bai1.jpg
Trước tiên bạn soạn thảo và ghi lại ví dụ bai1.c
Sau khi soạn thảo xong tiến hành dịch chương trình
http://picvietnam.sytes.net/noisepic/napbutton.jpg
Nếu thành công!
http://picvietnam.sytes.net/noisepic/nap.jpg

noisePIC
25-08-2005, 10:24 AM
Những bạn nào quan tâm đến PIC thì hãy chia sẻ cùng mọi người. Mỗi hôm học được một ít, sau nhiều hôm túi kiến thức của bạn cũng kha khá ..lấy cái đó để làm "vốn" làm ăn sau này. Một người học thì như vậy..nhưng 10 người cùng học hiệu quả sẽ gấp nhiều lần(Max=10,Min=1). noisepic hi vọng các bạn đọc datasheet và post bài trong "cùng học PIC" để cho quá trình học nhanh và hiệu quả.
[noisepic]

noisePIC
25-08-2005, 10:34 AM
TMRO là thanh ghi 8 bit. Nó được nạp giá trị ban đầu và bắt đầu đếm khi có xung clock, nó sẽ đếm từ giá trị đó tới FFh rồi lại bắt đầu đếm tiếp 00..FFh ...0.Khi có xảy ra sự tràn từ FFh-00h bít cờ ngắt Timer0 TOIF được bật.
Timer0 thường dùng để định thời (chương trình trễ thời gian), hay dùng để đếm sự kiện.
Các bit và thanh ghi liên quan khi làm việc với TMR0

- Thanh ghi OPTION_REG
TOCS// chọn nguồn xung nào?
TOSE// xung lên , hay xung xuống?
PSA// prescaler gán cho TMR0 hay WDT?
PS2,PS1,PS0 chia tỉ lệ thế nào?
- Thanh ghi INTCON
GIE// có sử dụng ngắt không?
TOIE// có sử dụng ngắt TMRO không?
TOIF//báo hiệu xảy ra sự tràn!
- Thanh ghi TMR0
Giá trị ban đầu là bao nhiêu?TMR0=?

Khi trả lời hết câu hỏi trên bạn bắt đầu viết chương trình.
cụ thể hơn các bạn xem trong 2 file này

noisePIC
25-08-2005, 10:44 AM
Những dữ liệu quan trọng cần phải lưu vào EEPROM, những dữ liệu mà khi mất điện bạn không muốn nó mất cũng lưu vào EEPROM.

Bộ nhớ EEPROM có thể đọc hoặc viết dữ liệu.
Để truy cập vào EEPROM ta sử dụng 4 thanh ghi chức
năng đặc biệt
EECON1
EECON2
EEDATA
EEADR

EEDATA giữ 8 bit dữ liệu để đọc và viết
EEADR giữ địa chỉ vùng nhớ trong EEPROM đang được truy cập.
PIC16F84A có 64 bytes EEPROM từ địa chỉ 00h đến 3Fh

PIC viết vào EEPROM theo trình tự sau:

0. EEADR=addr // địa chỉ trong EEPROM
1. EEDATA=data // giá trị viết vào EEPROM
2. GIE=0 //disable all interrupts
3. WREN=1 // cho phép viết vào EEPROM
4. Viết 55h vào EECON2
5. Viết AAh vào EECON2
6. WR=1 bắt đầu viết vào EEPROM
....và đợi PIC viết vào EEPROM...
7. GIE=1


Các bạn sử dụng trình mô phỏng simulatoride để kiểm tra
Đọc dữ liệu từ EEPROM

1.EEADR= địa chỉ đọc
2.RD=1 bắt đầu đọc từ EEPROM

giá trị đọc được lưu trong thanh ghi EEDATA.

Chi tiết hơn trong file noisepic_eeprom

tuanva
02-11-2005, 03:24 PM
Sao không thấy noisePIC tiếp tục luồng này nữa nhỉ. Cậu có thể cho 1 ví dụ về serial communication với CCS đc không?

minhpic
27-02-2006, 08:52 AM
Minh cam thay neu cac ban viet tren CCS ma su dung qua nhieu cac ham co san thi dieu do minh cam thay se khong toi uu, thong thuong voi kinh nghiem cua minh noi chung khi viet tren C thi minh nen tao ra cac header de tien hon cho viec lap trinh va cam thay than thien hon voi Asembler. Cac ban da lay duoc defs_f84 bay gio minh se chia se cung anh em mot defs_87x nua

minhpic
27-02-2006, 08:53 AM
#define W 0
#define F 1

//----- Register Files------------------------------------------------------

#byte INDF =0x00
#byte TMR0 =0x01
#byte PCL =0x02
#byte STATUS =0x03
#byte FSR =0x04
#byte PORTA =0x05
#byte PORTB =0x06
#byte PORTC =0x07

#byte PCLATH =0x0A
#byte INTCON =0x0B
#byte PIR1 =0x0C
#byte PIR2 =0x0D

#byte TMR1L =0x0E
#byte TMR1H =0x0F
#byte T1CON =0x10
#byte TMR2 =0x11
#byte T2CON =0x12

#byte SSPCON =0x14
#byte CCPR1L =0x15
#byte CCPR1H =0x16
#byte CCP1CON =0x17
#byte RCSTA =0x18
#byte TXREG =0x19
#byte RCREG =0x1A
#byte CCPR2L =0x1B
#byte CCPR2H =0x1C
#byte CCP2CON =0x1D

#byte ADRESH =0x1E
#byte ADCON0 =0x1F

/* bank 1 registers */

#byte OPTION_REG =0x81

#byte TRISA =0x85
#byte TRISB =0x86
#byte TRISC =0x87

#byte PIE1 =0x8C
#byte PIE2 =0x8D
#byte PCON =0x8E

#byte SSPCON2 =0x91
#byte PR2 =0x92
#byte SSPADD =0x93
#byte SSPSTAT =0x94

#byte TXSTA =0x98
#byte SPBRG =0x99

#byte ADRESL =0x9E
#byte ADCON1 =0x9F

/* bank 2 registers */

#byte EEDATA =0x010C
#byte EEADR =0x010D
#byte EEDATH =0x010E
#byte EEADRH =0x010F

/* bank 3 registers */

#byte EECON1 =0x018C
#byte EECON2 =0x018D


//----- STATUS Bits --------------------------------------------------------

// For Assembly Language - Note upper case
#define IRP 7
#define RP1 6
#define RP0 5
#define NOT_TO 4
#define NOT_PD 3
#define Z 2
#define DC 1
#define C 0

//----- INTCON Bits for c --------------------------------------------------------

#bit gie = 0x0b.7
#bit eeie = 0x0b.6
#bit t0ie = 0x0b.5
#bit inte = 0x0b.4
#bit rbie = 0x0b.3
#bit t0if = 0x0b.2
#bit intf = 0x0b.1
#bit rbif = 0x0b.0

//---------PORTA bits------------------
#bit ra5 =0x05.5
#bit ra4 =0x05.4
#bit ra3 =0x05.3
#bit ra2 =0x05.2
#bit ra1 =0x05.1
#bit ra0 =0x05.0

//---------PORTB bits------------------
#bit rb7 =0x06.7
#bit rb6 =0x06.6
#bit rb5 =0x06.5
#bit rb4 =0x06.4
#bit rb3 =0x06.3
#bit rb2 =0x06.2
#bit rb1 =0x06.1
#bit rb0 =0x06.0

//---------PORTC bits------------------
#bit rc7 =0x07.7
#bit rc6 =0x07.6
#bit rc5 =0x07.5
#bit rc4 =0x07.4
#bit rc3 =0x07.3
#bit rc2 =0x07.2
#bit rc1 =0x07.1
#bit rc0 =0x07.0

//----- PIR1 Bits ----------------------------------------------------------
#bit PSPIF =0x0C.7
#bit ADIF =0x0C.6
#bit RCIF =0x0C.5
#bit TXIF =0x0C.4
#bit SSPIF =0x0C.3
#bit CCP1IF =0x0C.2
#bit TMR2IF =0x0C.1
#bit TMR1IF =0x0C.0

//----- PIR2 Bits ----------------------------------------------------------
#bit CMIF =0x0D.6
#bit EEIF =0x0D.4
#bit BCLIF =0x0D.3
#bit CCP2IF =0x0D.0

//----- T1CON Bits ---------------------------------------------------------
#bit T1CKPS1 =0x10.5
#bit T1CKPS0 =0x10.4
#bit T1OSCEN =0x10.3
#bit T1SYNC =0x10.2
#bit TMR1CS =0x10.1
#bit TMR1ON =0x10.0

//----- T2CON Bits ---------------------------------------------------------
#bit TOUTPS3 =0x12.6
#bit TOUTPS2 =0x12.5
#bit TOUTPS1 =0x12.4
#bit TOUTPS0 =0x12.3
#bit TMR2ON =0x12.2
#bit T2CKPS1 =0x12.1
#bit T2CKPS0 =0x12.0

//-------------SSPCON bits--------------------------
#bit WCOL =0x14.7
#bit SSPOV =0x14.6
#bit SSPEN =0x14.5
#bit CKP =0x14.4
#bit SSPM3 =0x14.3
#bit SSPM2 =0x14.2
#bit SSPM1 =0x14.1
#bit SSPM0 =0x14.0

//---------------CCP1CON bits--------
#bit CCP1X =0x17.5
#bit CCP1Y =0x17.4
#bit CCP1M3 =0x17.3
#bit CCP1M2 =0x17.2
#bit CCP1M1 =0x17.1
#bit CCP1M0 =0x17.0

//---------------RCSTA bits-------------------

#bit SPEN =0x18.7
#bit RX9 =0x18.6
#bit SREN =0x18.5
#bit CREN =0x18.4
#bit ADDEN =0x18.3
#bit FERR =0x18.2
#bit OERR =0x18.1
#bit RX9D =0x18.0

//-----------------------CCP2CON bits----------

#bit CCP2X =0x1D.5
#bit CCP2Y =0x1D.4
#bit CCP2M3 =0x1D.3
#bit CCP2M2 =0x1D.2
#bit CCP2M1 =0x1D.1
#bit CCP2M0 =0x1D.0

//----- ADCON0 Bits --------------------------------------------------------
#bit ADCS1 =0x1F.7
#bit ADCS0 =0x1F.6
#bit CHS2 =0x1F.5
#bit CHS1 =0x1F.4
#bit CHS0 =0x1F.3
#bit ADGO =0x1F.2
#bit ADON =0x1F.0

//----- OPTION_reg Bits --------------------------------------------------------

#bit RBPU =0x81.7
#bit INTEDG =0x81.6
#bit T0CS =0x81.5
#bit T0SE =0x81.4
#bit PSA =0x81.3
#bit PS2 =0x81.2
#bit PS1 =0x81.1
#bit PS0 =0x81.0

//------------------TRISA bits---------------------------

#bit TRISA5 =0x85.5
#bit TRISA4 =0x85.4
#bit TRISA3 =0x85.3
#bit TRISA2 =0x85.2
#bit TRISA1 =0x85.1
#bit TRISA0 =0x85.0

//-----------------TRISB bits-----------------------------

#bit TRISB7 =0x86.7
#bit TRISB6 =0x86.6
#bit TRISB5 =0x86.5
#bit TRISB4 =0x86.4
#bit TRISB3 =0x86.3
#bit TRISB2 =0x86.2
#bit TRISB1 =0x86.1
#bit TRISB0 =0x86.0

//----------------TRISC bits-------------------

#bit TRISC7 =0x87.7
#bit TRISC6 =0x87.6
#bit TRISC5 =0x87.5
#bit TRISC4 =0x87.4
#bit TRISC3 =0x87.3
#bit TRISC2 =0x87.2
#bit TRISC1 =0x87.1
#bit TRISC0 =0x87.0

//----- PIE1 Bits ----------------------------------------------------------

#bit PSPIE =0x8C.7
#bit ADIE =0x8C.6
#bit RCIE =0x8C.5
#bit TXIE =0x8C.4
#bit SSPIE =0x8C.3
#bit CCP1IE =0x8C.2
#bit TMR2IE =0x8C.1
#bit TMR1IE =0x8C.0

//----- PIE2 Bits -----------------------------------------------------

#bit CMIE =0x8D.6
#bit EEIE =0x8D.4
#bit BCLIE =0x8D.3
#bit CCP2IE =0x8D.0

//----- PCON Bits ----------------------------------------------------------

#bit POR =0x8E.1
#bit BOD =0x8E.0

//-----------SSPCON2 bits---------------------------------------------

#bit GCEN =0x91.7
#bit ACKSTAT =0x91.6
#bit ACKDT =0x91.5
#bit ACKEN =0x91.4
#bit RCEN =0x91.3
#bit PEN =0x91.2
#bit RSEN =0x91.1
#bit SEN =0x91.0

//---------------------SSPSTAT bits------------------------

#bit STAT_SMP =0x94.7
#bit STAT_CKE =0x94.6
#bit STAT_DA =0x94.5
#bit STAT_P =0x94.4
#bit STAT_S =0x94.3
#bit STAT_RW =0x94.2
#bit STAT_UA =0x94.1
#bit STAT_BF =0x94.0

//----------------TXSTA bits-----------------

#bit CSRC =0x98.7
#bit TX9 =0x98.6
#bit TXEN =0x98.5
#bit SYNC =0x98.4
#bit BRGH =0x98.2
#bit TRMT =0x98.1
#bit TX9D =0x98.0

//--------------ADCON1 bits---------------

#bit ADFM =0x9F.7
#bit ADCS2 =0x9F.6
#bit PCFG3 =0x9F.3
#bit PCFG2 =0x9F.2
#bit PCFG1 =0x9F.1
#bit PCFG0 =0x9F.0

//-----------EECON1 bits----------

#bit EEPGD =0x018C.7
#bit WRERR =0x018C.3
#bit WREN =0x018C.2
#bit WR =0x018C.1
#bit RD =0x018C.0

minhpic
27-02-2006, 08:56 AM
chu y nhe, o day vi minh dung 876 nen co nhu vay, neu ban nao dung cho loai 40 chan thi viet them mot chut nua nhe. cac ban co the donw defs_f84 tren mang.

NTVinh
27-04-2006, 06:28 PM
Gui cac bac mot dia chi ve Pic:
http://www.cmccord.co.uk/FYP/final_report.htm

NTVinh
27-04-2006, 06:49 PM
Gui cac bac mot dia chi nua ve Pic:
http://www.vermontficks.org/pic.htm

dohoangnam
21-07-2006, 11:15 AM
Cảm ơn các bác nhiều!!!