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)

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);
}
}


Múi giờ GMT. Hiện tại là 09:40 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