hỏi về nháy led bằng dspic
các bác ơi..em mới bắt đầu vói dspic bằng việc nháy led nhưng mãi mà k dc.các bác kiểm tra giúp em cái code nháy led đơn này với
em viết code...khi biên dịch nó k báo lỗi gì nhưng lại không biên dịch thành công dc. chỉ cảnh báo ở chõ delay thôi..các bác giúp em với nhé. Code:
#include <p30F4011.h> |
Trích:
|
em thiet lap roi ma...noi chung ve dung mplap thi em cung thanh thao roi...chi con truc trac o van de viet code thoi ah
|
code?
Hic! cậu này học c30 cơ bản chưa ? Lấy đâu ra cái hàm delay_ms() thế? Không phải ccs hay mikroC đâu nhá! Viết hàm delay không đơn giản chút nào (với yêu cầu chính xác !).Nếu không yêu cầu khắt khe lắm thì có thể dùng vòng for hoặc dùng timer (tương đối chính xác!)
Còn nếu yêu cầu chính xác thì cần dùng thư viện libpic30.h của C30. Mà cậu học khóa bao nhiêu vậy? Sao không hỏi luôn mấy anh trong trường ấy? |
cac bac oi...em sua lai code roi...e da khai bao ham delay va bien dich thanh cong roi
nhung khi nap vao mach thi led lai k nhay cac bac ah em do dien ap o chan ra noi voi led thi chi co khoang 2v thoi code cua em day...cac bac test giup em voi nhe #include <p30F4011.h> _FOSC(CSW_FSCM_OFF & FRC_PLL4); _FWDT(WDT_OFF); _FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI); _FGS(CODE_PROT_OFF); #define ms_count 125 //So dem tuong ung voi 1 ms, cho timer 1 void Delay_ms(unsigned int); //Tao tre mot so ms void Init_TMR1(void); //Khoi tao Timer 1 unsigned char time_out; int main(void) { Init_TMR1(); //Khoi tao cho TMR1 //LATB = 0x0000; TRISB = 0x0000; ADPCFG = 0xFFFF; // Cong B la dau vao so while(1) { PORTBbits.RB5 = 0; Delay_ms(1000); PORTBbits.RB5 = 1; Delay_ms(1000); } } void Init_TMR1(void) { TMR1 = 0; //Xoa so dem trong TMR1 PR1 = ms_count; //TMR1 tran moi ms _T1IF = 0; //Xoa co ngat cua Timer 1 T1CON = 0x0020; //Dung fcy lam clock, prescale = 1:64, tat Timer 1 _T1IE = 1; //Cho phep ngat Timer 1 } void Delay_ms(unsigned n) { PR1 = n*ms_count; //Dat nguong tran vao PR1 time_out = 0; //Xoa co het thoi gian cho T1CONbits.TON = 1; //Bat timer 1 while (time_out == 0); //Cho den khi het thoi gian cho T1CONbits.TON = 0; //Tat timer 1 TMR1 = 0; } //Chuong trinh xu ly ngat Timer 1 //------------------------------------------------------------------------------ void _ISR _T1Interrupt(void) { _T1IF = 0; //Xoa co ngat time_out = 1; } |
Bạn hãy tham khảo code này! Code nháy 8 LED đơn giản! Cần gì dùng timer cho phiền ra! để đó còn ùng cái khác!
Code:
/* |
Đo điện áp ra 2V, có thể xảy ra 1 trong những nguyên nhân sau :
1. Chập nguồn. 2. Nguồn cung cấp không đủ, gây sụt nguồn. 3. Thời gian delay quá nhanh, dẫn đến việc không thể nhìn thấy led nhấp nháy, chỉ thấy nó sáng mờ mờ. Bạn thử check lại xem nhé ! |
em cảm ơn các bác nhé..em đã biết được lỗi sai của code đó rồi..đó là phải sử dụng cả LATB = 0x0000;
TRISB = 0x0000; code ở trên em chỉ sử dụng mỗi trisb còn latb thì không ah bác HANG1988 oi...bác có thể cho mạil của bác dc k.em thấy bác cũng sành về thằng dspic này...để có gì k hiểu em sẽ mail để hỏi bác.. em đang bắt đầu tìm hiểu về dspic nên cũng gặp nhiều khó khăn... phiền bác bớt chút time chỉ bảo em với nhé.em thấy ví dụ của bác up lên cũng đơn giản và dễ hiểu. nếu bác có mấy cái ví dụ đơn giản viet bang c cho dspic dành cho người mới tìm hiểu thì phiền bác gủi cho em với nhé mail cua em la trinhdieuhvktqs@gmail.com cảm ơn các bác nhiều |
Re: nháy led bằng dspic
Mình không biết ở thời điểm 2010 thì tập tin libpic30.h đã có hàm __delay_ms() và __delay_us() hay chưa, nhưng hiện tại với C30 bản 3.21 mình thấy nó có 2 hàm này, sử dụng bình thường như trong Hi-Tech hay CCS vậy. Có thể delay hẳn 500ms (thực tế chạy thì tương đối).
Nếu bạn là người mới bắt đầu với dsPIC thì hãy thử đoạn code sau, áp dụng cho PIC30F, sử dụng clock nội nên ko cần quan tâm bạn dùng thạch anh bao nhiêu. Code:
/* |
Múi giờ GMT. Hiện tại là 07:33 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