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)
-   -   Mới bắt đầu? Code không chạy? Hãy vào đây! (http://www.picvietnam.com/forum/showthread.php?t=3451)

h2nd0i 18-05-2012 05:03 PM

sửa dùm e cái code mạch đồng hồ này với...
 
http://www.mediafire.com/?99w2emenq1cxb1i đây là file protues



http://www.mediafire.com/?5be6ku4btajr3wk đây la code asm


http://www.mediafire.com/?1tm1asqxl6cnxeo đây là file .hex


mọi người xem dùm e phần code với,sao em nạp trên protues mà mạch ko chạy là sao ạ?mọi người góp ý kiến dùm e nha.thanks 4rum

kaka_87ht 07-07-2012 10:55 AM

chắc phải học hỏi từ các bạn nhiều rồi....em mới tham gia pic hii

nickyshadow 09-07-2012 11:26 AM

//Em chưa hiểu cái lỗi "A numeric expression must be appear here"
//Đoạn CT của em ngắn thế này thôi
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
output_c(0x00);
output_d(0x00);

int j;// nó báo lỗi ngay dòng này cái ỗi "A numeric..,", em đã thử với các kiểu char, int8,...
j=8;

}

//Còn đây là đoạn CT khác, mắc lỗi lặp vô hạn mà em chẳng hiểu tại sao nó vậy
//
char i;
latch=0;
for(i=7;i>=0;i--) //Lỗi lặp vô hạn ở ngay dòng này "The condition always TRUE"
{
int j;
for(j=0;j<8;j++)
{
clk=0;
da=(hang1[i]>>j)&&0x01;
clk=1;
clk=0;
da=(hang2[i]>>j)&&0x01;
}
}
latch=1;

Duynguyen205 29-07-2012 04:17 PM

bác nào cho em hỏi voi. Em có viết 1 đoạn code của bác Linh chạy thử nhưng mà nó báo lỗi hoài.
còn đây là code chương trình

//================================================
#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);
}
}
khi biên dịch nó báo lỗi này mà em ko biết xử lí tn. Mong các bác giúp em. thansk cac bac nhieu.

"eross 128'' C.\program file\PICC\devices\def_f877a.h" Line 7(2,6) A #DEVICE required before this line.


line 7 : #byte INDF =0x00 ( trong file def_877a.h)

buivantuyen89th 30-07-2012 09:02 PM

Trích:

Nguyên văn bởi Duynguyen205 (Post 76406)
bác nào cho em hỏi voi. Em có viết 1 đoạn code của bác Linh chạy thử nhưng mà nó báo lỗi hoài.
còn đây là code chương trình

//================================================
#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);
}
}
khi biên dịch nó báo lỗi này mà em ko biết xử lí tn. Mong các bác giúp em. thansk cac bac nhieu.

"eross 128'' C.\program file\PICC\devices\def_f877a.h" Line 7(2,6) A #DEVICE required before this line.


line 7 : #byte INDF =0x00 ( trong file def_877a.h)

chẳng báo lỗi ở đâu cả bạn ạ. bạn thiếu file def_877a.h thôi. bạn download file này về để trong projec của bạn ấy. không thì bạn copy vào devices trong thư mục cài ccs ấy.
goodluck

nickyshadow 30-07-2012 10:49 PM

nếu đơn giản bạn chỉ muốn nháy led ở port b thôi sao bạn khai báo nhiều vậy
chỉ cần
Code:

#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use fast_io(b) // <<<< dong nay de khai bao dung portb
#byte PORTB=0x006// <<<Đătheo data sheet thì port b là thanh ghi 006
void main()
{
set_tris_b(0x00);
PORTB = 0xFF;
While(1)
{
PORTB = 0;
delay_ms(250);
PORTB = 0xFF;
delay_ms(250);
}
}


Duynguyen205 31-07-2012 08:23 AM

Cảm ơn anh. Đúng là nó bị lỗi trong device thật. Hôm qua có pro giúp em sửa máy. Mới học

gà quá, bị lỗi cũng ko biết. làm em vất vả với nó.

Duynguyen205 31-07-2012 08:26 AM

à tại vì em mới học PIC nên toàn khai báo theo kiểu PIC winar. khai báo đầy đủ nào thì

#fuses

nào thì setup ADC().... ^^.

Bác thấy đoạn code của em thừa chỗ nào thì bỏ hộ em rồi post cho em xem với nhé.

Duynguyen205 31-07-2012 08:32 AM

Có bác nào Viết code mà làm video học PIC luôn ko gửu cho em link với. Đọc sách nhiều cứ

u u cái đầu ý. Tks các pro nhiều

Duynguyen205 31-07-2012 08:36 AM

Tks
 
Trích:

Nguyên văn bởi buivantuyen89th (Post 76553)
chẳng báo lỗi ở đâu cả bạn ạ. bạn thiếu file def_877a.h thôi. bạn download file này về để trong projec của bạn ấy. không thì bạn copy vào devices trong thư mục cài ccs ấy.
goodluck


Cảm ơn anh nhé. Nó bị lỗi trong device thật. Giờ CCS chạy ngon rồi. ^^~

nhquangdt3 17-12-2012 12:49 AM

mình thử viết code dùng CCS điều khiển mấy chân IO của PIC16f877A. mô phỏng thì chạy ngon lành nhưng khi nạp vào chip thì không chạy. mình có POST code lên. ai biết chỉ giúp với. thanks.
Code:

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#define BUTTON_THUAN pin_B5
#define BUTTON_NGHICH pin_B4
#define BUTTON_TANG pin_B3
#define BUTTON_GIAM pin_B2
 
#define LED_THUAN pin_B1
#define LED_NGUOC pin_B0
 
#define DIEU_KHIEN_QUAY_THUAN pin_B7
#define DIEU_KHIEN_QUAY_NGUOC pin_B6
 
#define NGUOC 1
#define THUAN 2
#define DUNG 3
 
#define TAN_SO_BAM 30
 
#use delay (clock = 4000000 ) //dung thach anh 20Mhz
#use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7 )
 
#byte OPTION_REG=0x81
 
int8 chieu_quay;
int16 van_toc=15,van_toc_max=30;
int16 milisec;
 
#int_TIMER0
void TIMER0_isr(void)
{
 
set_timer0(0xD9) ; // Initial Value for 1ms Interrupt
clear_interrupt(int_timer0); // Clear TIMER0 interrupt flag
milisec++;
if(milisec>1000)
milisec=0;
if(input(BUTTON_THUAN)==0)
{
chieu_quay=THUAN;
output_bit(LED_THUAN,1);
output_bit(LED_NGUOC,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);//tat quay nguoc
if(milisec<van_toc)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,1);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else if(milisec<TAN_SO_BAM)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else
milisec=0;
 
}
else if(input(BUTTON_NGHICH)==0)
{
chieu_quay=NGUOC;
output_bit(LED_THUAN,0);
output_bit(LED_NGUOC,1);
if(milisec<van_toc)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,1);
}
else if(milisec<TAN_SO_BAM)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else
milisec=0;
 
}
else
{
output_bit(LED_THUAN,0);
output_bit(LED_NGUOC,0);
}
 
}
 
void main()
{
 
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_1,0,1);
enable_interrupts (int_timer0);//ngat timer 0
enable_interrupts ( global ); //cho phep ngat toan cuc
OPTION_REG=0x07;
while(1)
{
output_high(pin_D0);
output_high(pin_D1);
output_high(pin_D2);
output_high(pin_D3);
output_high(pin_D4);
output_high(pin_D5);
output_high(pin_D6);
output_high(pin_D7);
output_B(0x00);
output_A(0x00);
output_C(0x00);
Delay_ms(500) ;
Output_low (pin_D0);
Output_low (pin_D1);
Output_low (pin_D2);
Output_low (pin_D3);
Output_low (pin_D4);
Output_low (pin_D5);
Output_low (pin_D6);
Output_low (pin_D7);
output_B(0xFF);
output_A(0xFF);
output_C(0xFF);
Delay_ms (500 );
}
 
// TODO: USER CODE!!
while(1)
{
 
if(input(BUTTON_TANG)==0)
{
Delay_ms(100);
van_toc++;
if(van_toc>van_toc_max)
van_toc=van_toc_max;
}
else if(input(BUTTON_GIAM)==0)
{
Delay_ms(100);
van_toc--;
if(van_toc<=0)
van_toc=0;
}
}
 
}


hatuan296 17-12-2012 08:13 AM

Trích:

Nguyên văn bởi nhquangdt3 (Post 80153)
mình thử viết code dùng CCS điều khiển mấy chân IO của PIC16f877A. mô phỏng thì chạy ngon lành nhưng khi nạp vào chip thì không chạy. mình có POST code lên. ai biết chỉ giúp với. thanks.
Code:

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#define BUTTON_THUAN pin_B5
#define BUTTON_NGHICH pin_B4
#define BUTTON_TANG pin_B3
#define BUTTON_GIAM pin_B2
 
#define LED_THUAN pin_B1
#define LED_NGUOC pin_B0
 
#define DIEU_KHIEN_QUAY_THUAN pin_B7
#define DIEU_KHIEN_QUAY_NGUOC pin_B6
 
#define NGUOC 1
#define THUAN 2
#define DUNG 3
 
#define TAN_SO_BAM 30
 
#use delay (clock = 4000000 ) //dung thach anh 20Mhz
#use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7 )
 
#byte OPTION_REG=0x81
 
int8 chieu_quay;
int16 van_toc=15,van_toc_max=30;
int16 milisec;
 
#int_TIMER0
void TIMER0_isr(void)
{
 
set_timer0(0xD9) ; // Initial Value for 1ms Interrupt
clear_interrupt(int_timer0); // Clear TIMER0 interrupt flag
milisec++;
if(milisec>1000)
milisec=0;
if(input(BUTTON_THUAN)==0)
{
chieu_quay=THUAN;
output_bit(LED_THUAN,1);
output_bit(LED_NGUOC,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);//tat quay nguoc
if(milisec<van_toc)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,1);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else if(milisec<TAN_SO_BAM)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else
milisec=0;
 
}
else if(input(BUTTON_NGHICH)==0)
{
chieu_quay=NGUOC;
output_bit(LED_THUAN,0);
output_bit(LED_NGUOC,1);
if(milisec<van_toc)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,1);
}
else if(milisec<TAN_SO_BAM)
{
output_bit(DIEU_KHIEN_QUAY_THUAN,0);
output_bit(DIEU_KHIEN_QUAY_NGUOC,0);
}
else
milisec=0;
 
}
else
{
output_bit(LED_THUAN,0);
output_bit(LED_NGUOC,0);
}
 
}
 
void main()
{
 
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_1,0,1);
enable_interrupts (int_timer0);//ngat timer 0
enable_interrupts ( global ); //cho phep ngat toan cuc
OPTION_REG=0x07;
while(1)
{
output_high(pin_D0);
output_high(pin_D1);
output_high(pin_D2);
output_high(pin_D3);
output_high(pin_D4);
output_high(pin_D5);
output_high(pin_D6);
output_high(pin_D7);
output_B(0x00);
output_A(0x00);
output_C(0x00);
Delay_ms(500) ;
Output_low (pin_D0);
Output_low (pin_D1);
Output_low (pin_D2);
Output_low (pin_D3);
Output_low (pin_D4);
Output_low (pin_D5);
Output_low (pin_D6);
Output_low (pin_D7);
output_B(0xFF);
output_A(0xFF);
output_C(0xFF);
Delay_ms (500 );
}
 
// TODO: USER CODE!!
while(1)
{
 
if(input(BUTTON_TANG)==0)
{
Delay_ms(100);
van_toc++;
if(van_toc>van_toc_max)
van_toc=van_toc_max;
}
else if(input(BUTTON_GIAM)==0)
{
Delay_ms(100);
van_toc--;
if(van_toc<=0)
van_toc=0;
}
}
 
}


Theo bạn mô tả , mô phỏng ok nhưng mạch thật không chạy vậy bạn hãy kiểm tra lại kĩ 2 phần sau .
1/Phần config của thạch anh , mình thấy bạn set là HS trong khi clock lại là 4000000 .
2/Trên mạch thật của bạn có điện trở kéo lên cho MCLR chưa . Các chân nối với phím BUTTON của bạn có các điện trở kéo lên chứ ?

HY vọng giúp được bạn .

nhquangdt3 17-12-2012 09:48 AM

Trích:

Nguyên văn bởi hatuan296 (Post 80159)
Theo bạn mô tả , mô phỏng ok nhưng mạch thật không chạy vậy bạn hãy kiểm tra lại kĩ 2 phần sau .
1/Phần config của thạch anh , mình thấy bạn set là HS trong khi clock lại là 4000000 .
2/Trên mạch thật của bạn có điện trở kéo lên cho MCLR chưa . Các chân nối với phím BUTTON của bạn có các điện trở kéo lên chứ ?

HY vọng giúp được bạn .

thanks bác. e dùng kit nên phần cứng OK. em dùng thạch anh ngoài 4Mhz không biết set fuse thế nào nhỉ? thanks

nhquangdt3 17-12-2012 12:47 PM

có bác nào biết chỉ e với. điều khiển mỗi chân IO mà nó không xuất ra được.

hatuan296 17-12-2012 07:47 PM

Trích:

Nguyên văn bởi nhquangdt3 (Post 80163)
có bác nào biết chỉ e với. điều khiển mỗi chân IO mà nó không xuất ra được.

Mình không dùng CCS bạn ạ , nên giúp bạn chuyên sâu về code thì mình không giúp được rồi . Nhưng tựu chung nó thế này . Bạn nên search trên diễn đàn những code mẫu rồi từ đó bạn rút ra được những đoạn code phù hợp với đề tài của mình .

1/Bạn xem datasheet thì chắc cũng biết , với thạch anh dưới 10Mhz thì ta phải set OSC là XTAL chứ không phải HS
2/ Để điều khiển được từng bit thì bạn phải set bit đó là output trước đã . Thường nó có dạng TRISX.NUMBER=0 , với X là tên port ,vd : b , c . Còn NUMBER là thứ tự bit của PORT đó , vd : portb.0 , portc.5 ....
Khi set cho cả port thì là trisb = %00000000
Trong code của bạn mình chưa thấy bạn làm công việc định chân output này .
3/ Tương tự để nhận một giá trị hoặc 1 bit nào đó thì bạn phải set port hoặc bit là input . Thường có dạng TRISX.NUMBER=1 là cho từng bit , hoặc có dạng TRISX = %11111111 . Trong code của bạn có các phím bấm nhưng mình cũng chưa thấy bạn set phần này .

Về các bước phía trên bạn nên tham khảo thêm các code mẫu có trong diễn đàn nhé , vì mình không chuyên về CCS nên không thể giúp bạn từng câu lệnh được .

Bạn mới bắt đầu nghiên cứu thì tốt hơn là nên thực hành với những bài tập nho nhỏ về phím bấm , về bật tắt led chứ chưa nên đi sâu vào ngắt , vào giao tiếp SPI ....
Từ từ rồi sẽ quen thôi bạn .

learnpicvn 01-01-2013 06:38 PM

Sao phần này dành cho ngưới mới học pic mà nhiều bài viết các bạn gửi mình thấy cao siêu quá, không phải dành cho member là elementary thì phải!

luong9 01-01-2013 08:07 PM

Kính chào các bạn trong 4rum, Mình mới học PIC nên có 1 vấn đề nhỏ mong các bạn giúp đỡ;
Mình tạo 1 project bằng CCS 4.14 bằng PIC Wizard, biên dịch OK, chạy được. Nhưng khi mình Chép sang máy tính khác, mở lên, thì mở file lên không được. Hoặc là khi mình Copy toàn thư mục chứ Project sang 1 ổ đĩa khác thì tình trạng cũng tương tự. Vẫn mở lên nhưng không mở file main.c được. Mong các bác có Video hoặc gì đó giúp mình với...


Link CCS 4.14 Mình up mê đi a phai các bạn tải về và làm các bước tạo dự án của các bạn và quay video gửi cho mình với nhé. Cám ơn nhiều các bạn giúp mình.
Thân ái...

http://www.mediafire.com/?xvd2fod6jvhgy4r

acquydo138 24-01-2013 08:29 PM

e đang viết code để điều khiển động cơ bước. e muốn xuất ra 50 bước code của e ko biết vì sao nó chỉ xuất ta 1 bước mội nguòi xem giúp e nha
signed int i;
void rephai()
{
for (i=0;i<=50;i++)
{
output_high(pin_b0);
delay_ms(2);
output_low(pin_b0);
delay_ms(2);

}
}
void turn_back()
{
for (i=0;i<=50;i++)
{
output_high(pin_b0);
delay_ms(2);
output_low(pin_b0);
delay_ms(2);

}
}

void main()
{
set_tris_b(0x00); //mac dinh port d la dau ra

while(1)
{
output_low(pin_b1);
delay_ms(100);
rephai();
delay_ms(100);
output_high(pin_b1);
turn_back();
delay_ms(100);

}
}

learnpicvn 14-02-2013 06:49 AM

liên quan đến đếm 8bit dùng 8051?
 
Help me!
Chào mọi người, xin lỗi vì lại hỏi mọi người vào phần phúc đáp nhanh!
code:
#include<AT892051.h>
void wait_a_second()
{
unsigned int x;
for(x=0; x<33000; x++);
}
main()
{
int LED=0;
for(;; )
{
P1=~LED;
LED++;
wait_a_second();
}
}
Yêu cầu là dùng 8051 đếm 8 bít tăng dần rồi hiển thị ra led đơn!
Em chưa hiểu là
1) làm sao lại tính được ra con số 33000 để tạo trễ cho chương trình khoảng 1s?
2) dòng lệnh for(;; ) có ý nghĩa như thế nào?
Mong mọi người giải đáp giúp?

MINHENG 21-02-2013 12:52 AM

Chào các Anh,
Em tập viết đoạn code này, mà cái speed nó cứ trơ trơ, không xuất ra chân nào cả, thử biến pulse_Ne, thì nó cũng thế (không bằng 0, cũng không ra giá trị nào cả).
Nhờ các anh chỉ giùm, bế tắt quá.
Em cảm ơn rất nhiều


//================================================== ======
// Ten chuong trinh : DEM XUNG Ne BANG NGAT NGOAI
// Nguoi thuc hien : Minh_mse
// Ngay thuc hien : ………….
// Phien ban : 1.0
// Mo ta phan cung : Dung PIC16F887. Thach anh 20MHz
// : Xung vuong Ne vao chan RB0 (External interrupt)
// : Xuat thu so do toc do ra cac chan RD4-RD6
// :
//================================================== ======
#include<16F887.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD,NOWRT
#use delay(clock=20000000)
int16 pulse_Ne;
float speed;
#int_EXT //Chuong trinh ngat ngoai duoc goi khi co tac dong o chan RB0
EXT_ISR()
{
++pulse_Ne;
}
main()
{
while(1)
{
// Khoi tao ngat ngoai tai RB0
ext_int_edge(H_TO_L); // Ngat canh len RB0
enable_interrupts(INT_EXT); // Cho phep ngat ngoai
enable_interrupts(GLOBAL); // Cho phép ngat toan cuc
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Khoi tao bo dinh thoi gian dem xung-Dung dao dong noi
//(20*10^6)/8=2.500 xung/ms
set_timer1(3037);
//Gia tri ban dau cho timer1 la 65.537-62500=3.037
//timer1 16bits se tran khi bang 65.537
enable_interrupts(INT_TIMER1);
speed=pulse_Ne/(25*1000);
//Tinh bang vong/giay
//Lay mau 25ms/lan
if (speed==0) output_high(PIN_D4);
if ((speed>=1) | (speed<=2))output_high(PIN_D5);
if (speed>3) output_high(PIN_D6);
}
}

hunke92 20-07-2013 11:57 PM

e dùng điện trở nội trong pic 16f887,e dùng lệnh port_B_pullups(1),nhưng nó cứ báo lối undefined indentifier--port_B_pullups, mong các a jup đỡ

thitoantruot 21-08-2013 02:54 PM

nạp code cho pic16f72 không chạy
 
2 Attachment(s)
Mình viết một chương trình đơn giản nạp vào pic16f72

#include <16F72.h>
#device adc=8

#FUSES HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT
#use delay(clock=20000000)

void main()
{
set_tris_b(0);
output_b(0xff);
// TODO: USER CODE!!
while(1)
{
output_b(0);
delay_ms(1000);
output_b(0xff);
delay_ms(1000);
}
}

mình dùng chương trình nạp burn-e và có detect được pic
khi nạp file hex thì có mã hexa như hình vẽ
nhưng sau khi nạp program của pic lại về 3FFF hết
Bạn nào bị lỗi này thì bảo mình với

buivantuyen89th 23-08-2013 05:36 PM

Trích:

Nguyên văn bởi thitoantruot (Post 82772)
Mình viết một chương trình đơn giản nạp vào pic16f72

#include <16F72.h>
#device adc=8

#FUSES HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT
#use delay(clock=20000000)

void main()
{
set_tris_b(0);
output_b(0xff);
// TODO: USER CODE!!
while(1)
{
output_b(0);
delay_ms(1000);
output_b(0xff);
delay_ms(1000);
}
}

mình dùng chương trình nạp burn-e và có detect được pic
khi nạp file hex thì có mã hexa như hình vẽ
nhưng sau khi nạp program của pic lại về 3FFF hết
Bạn nào bị lỗi này thì bảo mình với

Mình cũng chưa bị lỗi này. Nhưng bạn thử kiểm tra lại xem. khi mở chương trình Burn-E bạn phải mở đường dẫn đến file Hex của chương trình của mình.
chúc bạn thành công!

toan_320.vn 13-10-2013 11:25 PM

mọi người xem em cái đoạn code này có sử dụng ngắt timer0 biên dịch ko bị lỗi mà sang mô phỏng chạy ko được, ct em viết hiển thị 2 số 38 lên 2 led 7 đoạn
#INCLUDE P16F877A.INC;/*CHI DAN FILE DINH NGHIA CHIP*//
__CONFIG _XT_OSC&_WDT_OFF&_LVP_OFF;//*KHAI BAO CAU HINH*//


CBLOCK 0X20;KHAI BAO BIEN TAI DAY*//
VONG1,VONG2,VONG3,HCTEMP,HDV,STATUS_TEMP,W_TEMP,DE M
ENDC;//*KET THUC DAT BIEN*//
ORG 0X000;//*CHI THI BIEN DICH*//
;//NHAY TOI CHUONG TRINH CHINH*//
GOTO MAIN
ORG 0X004
GOTO NGAT
ORG 0X005;//*CT CHINH BAT DAU TAI DAY*//
MAIN
BSF STATUS,5;//*CHUYEN TU BANK0 LEN BANK1*//
CLRF TRISD;//*PORTD LA DAU RA*//
CLRF TRISC
MOVLW B'00000100'
MOVWF OPTION_REG
CLRF DEM
BCF INTCON,TMR0IF
BSF INTCON,TMR0IE
BSF INTCON,GIE
BCF STATUS,5; //*CHUYEN XUONG BANK0*//
MOVLW D'100'
MOVWF TMR0
;*****************CHUONG TRINH NGAT***************************
NGAT
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
BCF INTCON,TMR0IF
BTFSC DEM,0
GOTO SAI
GOTO DUNG
DUNG
BCF PORTA,4
BSF PORTA,5
MOVLW D'8' ;// HANG DON VI =8//
CALL BANGMA
MOVWF PORTD
MOVLW D'1'
MOVWF DEM
GOTO THOAT
SAI
BSF PORTA,4
BCF PORTA,5
MOVLW D'3'; // HANG CHUC =3//
CALL BANGMA
MOVWF PORTD
MOVLW D'0'
MOVWF DEM
THOAT
MOVLW D'100'
MOVWF TMR0
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE


;******************CHUONG TRINH BANG MA*************************
BANGMA
ADDWF PCL,F
RETLW 0XC0
RETLW 0XF9
RETLW 0XA4
RETLW 0XB0
RETLW 0X99
RETLW 0X92
RETLW 0X82
RETLW 0XF8
RETLW 0X80
RETLW 0X90
END

bestvietnam999 18-10-2013 12:32 PM

Cảm ơn bạn nhiều nhé!!!!!!!!1

xmentpro 21-10-2013 06:00 PM

Mình mới học pic và làm cái code nay nhưng khôg chạy xin chỉ bảo mih với? và tại sao khi set_tris_x() một port thì các chân ra port đó lại có các giá trị 0,1 khác nhau.tks!
#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
#use fast_io(b)
void nhay_led(){
output_b(0xff);
delay_ms(200);
output_b(0x00);
delay_ms(200);
}
void main(){
set_tris_c(1);
set_tris_b(0);
if(pin_c1==1)
while(1){
nhay_led();

}

hatdieu999 26-10-2013 12:43 PM

đội ơn chủ thớt nhiều !!!

minhzx_yt 05-11-2013 09:02 PM

mình mới viết lập trình PIC,có 1 lỗi này mong mọi nguòi giúp đỡ
MPLINK 4.40, Linker
Device Database Version 1.3
Copyright (c) 1998-2011 Microchip Technology Inc.
Error - Device not specified. Use /p option to specify a device.
Errors : 1

uynhdtvtk34 18-02-2014 10:59 PM

lập trình cho pic
 
mình debug mà nó xuất hiện những lỗi này ko biết phải làm sao?

uynhdtvtk34 18-02-2014 11:06 PM

lập trình cho pic
 
1 Attachment(s)
mình debug mà nó xuất hiện những lỗi này ko biết phải làm sao?

npl.nguyenphi 21-03-2014 11:25 PM

Bác nào rành về lập trình PIC bằng mikroC Pro for PIC cho e hỏi, em bị lỗi ntn là sao

0 304 C:/Users/WIN7/Desktop/Test PIC/2/MyProject.c:15: error: Can't open include file "16f887.h"
0 304 C:/Users/WIN7/Desktop/Test PIC/New folder/MyProject.c:16: error: Unknown ‪#‎directive‬ "device"
0 304 ‪#‎device‬ *= 16 ADC = 10

picvn1188 02-05-2014 12:58 AM

3 Attachment(s)
các anh chị xem giúp e với ak. em khai báo hàm delay rồi mà nó cứ báo lỗi delay thôi ak. em cảm ơn các anh chị ak.

ngockonvang 08-05-2014 10:40 PM

Thanks for this informative post. It help me a lot. And it gave mo ideas on how to make more money in marketing business. I hope lots of people visit this site so they can easily learn this informative post.

shaoljndragon 17-06-2014 07:27 PM

Hien thi 4 chu so!
 
[QUOTE=namqn;33890]Bạn chỉ sửa thế này thôi thì thế nào (tôi không dùng CCS C, nên bạn sửa như dưới đây và dịch xem kết quả ra sao):
Code:

void ht(long a) {
    int nghin,tram,chuc,dvi;
    nghin=(int)a/1000;
    tram=(int)(a%1000)/100;
    chuc=(int)(a%100)/10;
    dvi=(int)(a%10);
    lcd_putchar(nghin+48);
    lcd_putchar(tram+48);
    lcd_putchar(chuc+48);
    lcd_putchar(dvi+48);
}

Bạn cho mình hỏi la hiển thị thê này ra chuỗi số hay số vậy!@@
Bây giờ: Mình muốn chuyển chuỗi số trên lcd thành thành số thì làm thế nào! không dùng hàm " atoi" vì thư viện của mình bị lỗi! thanks

minhphuc0311 28-10-2014 12:55 AM

nhờ sửa code đo nhiệt độ dùng LM35 hiển thị lên LED 7SEG
 
em đang học PIC nên chả biết viết sai chỗ nào nữa,mong anh e chỉ bảo....
code đây ạ
//Cau Hinh PIC
#include <16f877a.h>//KHAI BAO THU VIEN
#fuses XT,NOWDT,NOPUT,BROWNOUT,NOLVP,NOWRT,NODEBUG,NOPROT ECT//KHAI BAO PIC
#device 16F877*=16 ADC=8
#use delay(clock=4000000)//KHAI BAO TAN SO THACH ANH
void convert_bcd(int8 x);
unsigned char const ma_LED[10]= {0xC0,0xcf,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90 };//khai bao ma led
int a,b,chuc, n,donvi;//Cac bien chu so
void convert_bcd(int x)
{
chuc=(int)x%10;
donvi=(int)x/10;
donvi=(int)donvi%10;
}

void hienthi() // quet led
{
for(n=0;n<10;n++)
{

OUTPUT_D( ma_LED[chuc]); output_c(0b00000001);
delay_ms(10);
output_c(0b00000000);
OUTPUT_D( ma_LED [donvi]); output_c(0b00000010);
delay_ms(10);
output_c(0b00000000);
}
}
//CHUONG TRINH CHINH
void main()
{
float nhietdo;

{
set_tris_a(0xff);
SET_TRIS_c(0X00); //Port B là output(ngo ra)
SET_TRIS_D(0x00); //port D la output(ngo ra)

setup_ADC(ADC_clock_internal);//T/G lay mau bang xung clock
setup_ADC_ports(AN0);//Lay Vref=5V
set_ADC_channel(0);//chon chan A0 la chan dua tin hieu Analog vao
delay_us(10);//tao khoang t/g de lay mau
a=read_adc();//doc tin hieu vao
nhietdo = (a)/2.048;
b=nhietdo;
convert_bcd((int8)b);//chuyen doi ADC
delay_us(10);
//Vong lap
while(1)
{
a=read_adc();
nhietdo = (a)/2.048;
convert_bcd((int8)b);
hienthi();
}
}
}

hoacvxd 18-11-2014 03:50 PM

1 Attachment(s)
Tôi đang thử nghiệm với con PIC 16F716. Khi mô phỏng trên Proteus thì không có vấn đề gì, mọi thứ suôn xẻ nhưng khi nạp vào IC thì không chạy.
Chương trình viết trên CCS.
Xin hỏi mọi người lỗi tại đâu.
Cảm ơn mọi người.

matmatinhyeu 20-11-2014 01:08 PM

chào các bạn anh chị. hiện tại mình đang viết chương trình robot Micromouse, mình đang vướng mắc phần thanh ghi Stack trong PIC 18f4550, mình sử dụng CCS C. các bạn hay anh chị nào có thể chỉ cho mình cách thức đọc và ghi vào stack được không ạ:
cụ thể như sau:
STACK của e là 1 mảng có 64 byte khai báo: int8 stackstr[64];
biến con trỏ thanh ghi được khai báo: int: stack_pointer=0;
- khi đọc tài liệu liên quan đến stack register thì vẫn không hiểu nguyên lý hoạt động của nó, làm thế nào để đẩy 1 giá trị vào stack, sau đó lấy nó ra so sánh xong rồi thực hiện vòng lặp liên tục cho đến khi stack rỗng?. Chỗ mình không hiểu là như thế nào là Stack rỗng? và làm sao để biết nó đã rỗng? rổng có phải là giá trị =0 hay là không gán giá trị gì không ạ?
Giúp mình gấp với nhé, Cảm ơn cả nhà nhiều :)

msterdang 04-02-2015 09:41 PM

có thể giúp em về lệnh retlw,với thanh ghi PC được ko ạ.em viết chương trình đếm 0-9 sử dụng bảng dữ liệu cho led7 đoạn .mà sao xem debug nó cứ lặp lại chương trình từ :main - đến goto bangma đên retlw 0xC0 .chương trình đây ạ.mong các anh giúp đỡ.

#include "p16F887.inc"

; CONFIG1
; __config 0xE0D2
__CONFIG _CONFIG1, _FOSC_HS & _WDTE_OFF
; CONFIG2
; __config 0xFFFF
__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
;--------------------khi bao bien--------------
cblock 0x20 ;start of general purpose registers

vong1,vong2,vong3
endc
;************************************************* *********************

;----------------------chong trinh chinh----------------------------------------
org 0x00

goto main ;

org 0x05 ;
main
bsf STATUS,5;
clrf TRISD ; chon port d la cong out
bcf STATUS,5
clrf PORTD
start ; chuong trinh dem
movlw d'0'
goto bangma
movwf PORTD;
goto Delay
;---------------------------
movlw d'1'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'2'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'3'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'4'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'5'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'6'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'7'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'8'
goto bangma
movwf PORTD
goto Delay

;-------------------------------
movlw d'9'
goto bangma
movwf PORTD
goto Delay
goto start
return
;----------------------------------------------------------------
Delay ;chuong trinh con tao tre
movlw d'120'
movwf vong1
movlw d'250'
movwf vong2
movlw d'3'
movwf vong3
decfsz vong1,1
goto $-1
decfsz vong2,1
goto $-3
decfsz vong3,1
goto $-5

return;tro ve ct chinh
bangma ;bang ma cho led
addwf PCL,f
retlw 0xC0
retlw 0xF9
retlw 0xA4
retlw 0xB0
retlw 0x99
retlw 0x92
retlw 0x82
retlw 0xF8
retlw 0x80
retlw 0x90
END

saunai 09-02-2015 08:36 PM

Nhờ mọi người xem dùm e cái code viết cho 8 led đơn sáng nhấp nháy dùng ngắt, đưa vào mô phỏng nó cứ sáng hoài k chịu nháy.

#include <16f877a.h>
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=4M)
#byte portb=0x06

int16 dem;
int8 a;
//Chuong trinh ngat timer0
#int_timer0
void interrupt_timer0()
{

++dem;
if (dem==1000) //1000*500us=500000us=0.5s
{
dem=0;
if (a=0x00)
a=0xff;
else a=0xff;
}
set_timer0(6);
}
void main()
{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6); //Dinh thoi (256-6)*2*1us=500us
a=0xff;
while(true)
{
portb=a;
}
}

buivantuyen89th 10-02-2015 08:49 AM

Trích:

Nguyên văn bởi saunai (Post 85312)
Nhờ mọi người xem dùm e cái code viết cho 8 led đơn sáng nhấp nháy dùng ngắt, đưa vào mô phỏng nó cứ sáng hoài k chịu nháy.

#include <16f877a.h>
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=4M)
#byte portb=0x06

int16 dem;
int8 a;
//Chuong trinh ngat timer0
#int_timer0
void interrupt_timer0()
{

++dem;
if (dem==1000) //1000*500us=500000us=0.5s
{
dem=0;
if (a=0x00)
a=0xff;
else a=0xff;
}
set_timer0(6);
}
void main()
{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6); //Dinh thoi (256-6)*2*1us=500us
a=0xff;
while(true)
{
portb=a;
}
}

bạn bi sai trong chương trình ngắt rồi.
thứ nhất: điều kiện trong lệnh if là "==" chứ k phải là "=".
thứ 2: bạn đang đặt chế độ là. nếu a==0 thì cho a=1. còn khác sẽ là a=1. vì vậy a lúc nào cũng=1.
chúc ạn thành công!


Múi giờ GMT. Hiện tại là 05:46 AM.

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