PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   hỏi về lập trình cơ bản cho pic6f877a (http://www.picvietnam.com/forum/showthread.php?t=8571)

nangvang 03-04-2011 10:28 AM

hỏi về lập trình cơ bản cho pic6f877a
 
các bac ơi! em mới bắt đầu làm quen với dòng pic
em đã đọc tài liệu và bắt tay vào lập trình với nhưng ví dụ cơ bản nhung không hiểu sao code của em vẫn không chạy dc...toàn báo lỗi mặc dù em đã viết theo đúng như trong tài liệu hướng dẫn.mong các bác check code giúp em với
ah em lập trình bằng ccs c trong MPLAP
code của em là :
#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()
{

TRISB = 0x00;
PORTB = 0xFF;
While(1)
{
PORTB = 0;
delay_ms(250);
PORTB = 0xFF;
delay_ms(250);
}
}


trình dịch báo lỗi là :
Executing: "C:\Program files\Picc\CCSC.exe" +FM "nhay led don gian.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 18 "nhay led don gian.c" Line 1(9,20): File can not be opened
Not in local "D:\cac ho vi dieu khien\pic\cac vi du thuc hanh\led don\16f877a.h"
*** Error 128 "nhay led don gian.c" Line 3(9,19): A #DEVICE required before this line
*** "nhay led don gian.c" Line 3: Error #128: A #DEVICE required before this line
*** "nhay led don gian.c" Line 4: Error #111: Unknown keyword in #FUSES "NOWRT"
*** "nhay led don gian.c" Line 6: Error #128: A #DEVICE required before this line
*** "nhay led don gian.c" Line 9: Error #12: Undefined identifier TRISB
*** "nhay led don gian.c" Line 10: Error #12: Undefined identifier PORTB
*** "nhay led don gian.c" Line 13: Error #12: Undefined identifier PORTB
*** "nhay led don gian.c" Line 15: Error #12: Undefined identifier PORTB
9 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Sun Apr 03 22:11:13 2011

hcmut.khoamaisi 03-04-2011 10:33 AM

Theo mình nghĩ với lỗi như vậy thì trình biên dịch của bạn có vấn đề.Còn về cái code mình thấy không có vấn đề gì!Bạn nên thử tải bản CCS khác xem sao

nangvang 03-04-2011 10:41 AM

em lúc đầu cài MPlap sau đó cài C30 và cài thêm PIC C Compiler CCS PCWHD v4.0
như vậy có vấn đề j không anh.

hcmut.khoamaisi 03-04-2011 11:01 PM

Bạn đã set môi trường trong MP LAB chưa?

mistdamo 04-04-2011 07:45 PM

Bạn bỏ dấu "//" truớc dòng "//#include <def_877a.h>" này thử xem. Vì trong nó chứa file định nghĩa cho portB mà !

ermine 06-04-2011 12:22 AM

nếu bạn cho dòng #include <def_877a.h> trong chú thích thì code phải là
#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()
{

set_tris_b(0x00);
output_b(0x00);
While(1)
{
output_b(0x00);
delay_ms(250);
output_b(0xff);
delay_ms(250);
}
}

thanh_30april 06-04-2011 10:06 AM

PWM voi pic 16f877a
 
Cac bac cho em hoi:
Em lap trinh dung chan ccp1 de tao xung PWM nhung khong hieu sao em mo phong va do tin hieu o chan PWM khong thay gi,mong cac bac chi giup.Day la code cua chuong trinh:
/////////////////////////////////////
#include <16f877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#byte porta=0x05
#use fast_io(a)
#use fast_io(c)
void main()
{
set_tris_a(0x00);
set_tris_c(0x00);
SETUP_CCP1(ccp_pwm);
SETUP_TIMER_2(T2_DIV_BY_4,200,1);
set_pwm1_duty(100);
while(1)
{
output_high(pin_a0);
delay_ms(10);
output_low(pin_a0);
delay_ms(10);
}
}

Em gui kem ca file mo phong.

nangvang 06-04-2011 10:55 AM

các bác ơi... theo em biết thì muốn sử dụng 2 thanh ghi port và tris để thiết lập cho một cổng nào đó thì mình phải khai báo hàm #include <def_877a.h> nó chứa file định nghĩa cho cổng.. nhưng khi em khai báo thì trình dịch cứ báo lỗi là "File can not be opened"
các bác có thể giải thích giúp em dc k?
ah mà nhân tiện các bác giải thích giúp em nếu mình muốn dùng 2 thanh ghi TRIS
PORT thì mình mình phải khai báo ntn ?
thank trc các bác nha

ermine 06-04-2011 09:23 PM

Trích:

#define W 0
#define F 1

// register files
#byte INDF =0x00
#byte TMR0 =0x01
#byte PCL =0x02
#byte STATUS =0x03
#byte FSR =0x04
#device *=14 adc=8
#byte PORTA =0x05
#byte PORTB =0x06
#byte PORTC =0x07
#byte PORTD =0x08
#byte PORTE =0x09

#byte EEDATA =0x10C
#byte EEADR =0x10D
#byte EEDATH =0x10E
#byte EEADRH =0x10F
#byte ADCON0 =0x1F
#byte ADCON1 =0x9F
#byte ADRESH =0x9F
#byte ADSESL =0x9F

#byte PCLATH =0x0a
#byte INTCON =0x0b
#byte PIR1 =0x0c
#byte PIR2 =0x0d
#byte PIE1 =0x8c
#byte PIE2 =0x8d
#byte OPTION_REG =0x81
#byte TRISA =0x85
#byte TRISB =0x86
#byte TRISC =0x87
#byte TRISD =0x88
#byte TRISE =0x89

#byte EECON1 =0x18C
#byte EECON2 =0x18D

#byte SSPBUF =0x13
#byte SSPCON =0x14
#byte SSPCON2 =0x91
#byte SSPADD =0x93
#byte SSPSTAT =0x94
// SSPCON bit
#bit SSPWCOL = 0x14.7
#bit SSPOV = 0x14.6
#bit SSPEN = 0x14.5
#bit SSPCKP = 0x14.4
#bit SSPM3 = 0x14.3
#bit SSPM2 = 0x14.2
#bit SSPM1 = 0x14.1
#bit SSPM0 = 0x14.0
// SSPSTAT bit
#bit SSPSMP = 0x94.7
#bit SSPCKE = 0x94.6
#bit SSPDA = 0x94.5
#bit SSPP = 0x94.4
#bit SSPS = 0x94.3
#bit SSPRW = 0x94.2
#bit SSPUA = 0x94.1
#bit SSPBF = 0x94.0

// BIT DEFINITION
#bit ra5 =0x05.5
#bit ra4 =0x05.4
#bit ra3 =0x05.3
#bit ra2 =0x05.2
#bit ra1 =0x05.1
#bit ra0 =0x05.0

#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
#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

#bit rD7 =0x08.7
#bit rD6 =0x08.6
#bit rD5 =0x08.5
#bit rD4 =0x08.4
#bit rD3 =0x08.3
#bit rD2 =0x08.2
#bit rD1 =0x08.1
#bit rD0 =0x08.0
#bit rE2 =0x09.2
#bit rE1 =0x09.1
#bit rE0 =0x09.0


#bit trisa5 =0x85.5
#bit trisa4 =0x85.4
#bit trisa3 =0x85.3
#bit trisa2 =0x85.2
#bit trisa1 =0x85.1
#bit trisa0 =0x85.0

#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
#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

#bit trisd7 =0x88.7
#bit trisd6 =0x88.6
#bit trisd5 =0x88.5
#bit trisd4 =0x88.4
#bit trisd3 =0x88.3
#bit trisd2 =0x88.2
#bit trisd1 =0x88.1
#bit trisd0 =0x88.0

#bit trise2 =0x89.2
#bit trise1 =0x89.1
#bit trise0 =0x89.0

// INTCON Bits for C
#bit gie = 0x0b.7
#bit peie = 0x0b.6
#bit tmr0ie = 0x0b.5
#bit int0ie = 0x0b.4
#bit rbie = 0x0b.3
#bit tmr0if = 0x0b.2
#bit int0if = 0x0b.1
#bit rbif = 0x0b.0

// PIR1 for C
#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 for C
#bit cmif = 0x0d.6
#bit eeif = 0x0d.4
#bit bclif = 0x0d.3
#bit ccp2if = 0x0d.0
// PIE1 for C
#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 for C
#bit osfie = 0x8d.7
#bit cmie = 0x8d.6
#bit eeie = 0x8d.4

// OPTION Bits
#bit not_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
// EECON1 Bits
#bit eepgd = 0x18c.7
#bit free = 0x18C.4
#bit wrerr = 0x18C.3
#bit wren = 0x18C.2
#bit wr = 0x18C.1
#bit rd = 0x18C.0

//ADCON0
#bit CHS0 =0x1F.3
#bit CHS1 =0x1F.4
#bit CHS2 =0x1F.5
nội dung file <def_877a.h> toàn là các định nghĩa thôi.
bạn tạo file header (.h) rồi paste vào
C1:sau đó trong .c khai báo thêm dòng #include "Đường dẫn tới file header"
C2: hoặc copy file đó vào folder Devices trong thư mục cài đặt thì chỉ cần #include <def_877a.h>

nếu ko muốn dùng header, chỉ cần đọc file <def_977a.h> rồi thêm đoạn code khai báo như này trong ctrình
#byte PORTB =0x06
#byte TRISB =0x86

nangvang 07-04-2011 12:47 AM

cám on anh ermine !
em da tao ra file def_877a.h va copy vào PICC/Device . Compile lại => chuơng trình chạy OK.
mong anh giúp đõ em những câu hỏi về sau.cảm ơn anh


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam