![]() |
Em bắt đầu học pic, vào đây hơi trễ. Nên link phần mềm CCS mất rồi.
Vậy có ai cho em link mới nhé. Cám ơn nhiều. |
thanks các bạn nhiều, cái này rất hay.
|
loạt bài về CCs pic đâu hết tiêu rùi :((
|
-protues phần mềm mô phỏng ko tin tưởng đâu các bác, theo em nghĩ nó chỉ là mô phỏng ý tưởng và giải thuật chương trình mình viết, còn thực tế thì khác xa
-muốn nạp chương trình vào protues bạn phải có sẵn file hex, trong protues nhấp đúp vào pic chọn đường dẫn file==>ok==>xong, phía dưới bên trái có bảng mô phỏng |
-protues phần mềm mô phỏng ko tin tưởng đâu các bác, theo em nghĩ nó chỉ là mô phỏng ý tưởng và giẩi thuật chương trình mình viết, còn thực tế thì khác xa
-muốn nạp chương trình vào protues bạn phải có sẵn file hex, trong protues nhấp đúp vào pic chọn đường dẫn file==>ok==>xong, phía dưới bên trái có bảng mô phỏng |
-protues phần mềm mô phỏng ko tin tưởng đâu các bác, theo em nghĩ nó chỉ là mô phỏng ý tưởng và giẩi thuật chương trình mình viết, còn thực tế thì khác xa
-muốn nạp chương trình vào protues bạn phải có sẵn file hex, trong protues nhấp đúp vào pic chọn đường dẫn file==>ok==>xong, phía dưới bên trái có bảng mô phỏng |
ccs phiên bản 4.0 cả tài liệu học ccs tiếng việt đây
tài liệu hướng dẫn protues lun http://www.mediafire.com/?sharekey=3...eb367ee4828c31 các sư huynh dowload đi |
Trích:
Mình cũng đang làm đề tài ghi đọc thẻ nhớ MMC dùng PIC 16F877A qua chuẩn SPI. Nhưng ko rõ MMC nó cấu trúc bộ nhớ như thế nào? Bạn nào có thể hướng dẫn qua giúp mình về chuẩn ghi đọc dữ liệu trên thẻ MMC với? Hoặc có thể nêu ra các bước thực hiện lập trình ghi đọc trên MMC giúp mình với. Cảm ơn những gợi ý quý báu của các bạn:)! |
hỏi về câu lệnh
các bạn cho mình hỏi ý nghĩa của hai câu lenh sau là sao >Chân thành cảm ơn !
lcd_init(); lcd_putc('\f'); |
vấn đề Code
Cho mình hỏi là sao đoạn code của anh Linh không có lệnh trisc và tại sao ở lệnh LCD_putcmd(0xC3):thì 0xC3 là vị trí thứ 4 của dòng thứ 2
#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) #include <lcd_lib_4bit.c> // Thu vien ham cho LCD void main() { trisa = 0xFF; trisb = 0x01; trisd = 0x00; LCD_init(); Printf(LCD_putchar," PICVIETNAM tut"); LCD_putcmd(0xC3); Printf(LCD_putchar," LCD 4bit "); } |
Trích:
vd lcd_init() tức là gọi hàm void lcd_init(void){...} đây có lẽ là hàm khởi tạo cho lcd, còn hàm còn lại là hàm đẩy 1 ký tự (char) đi thôi. |
Trích:
|
lcd_lib_4bit
Bạn cho mình hỏi là : khi mình viết một chương trình có dùng LCD thì cứ bê y nguyên code LCD4bit vào ,chỉ việc gắn chân cho phù hợp phải không bạn ?rồi mới viết thêm một số lệnh cho LCD theo bài của mình ?Cảm ơn bạn nhiều .
|
Trích:
|
Em tải CCS bản CCS-PCWHD4.065 về máy, cài đặt được nhưng không chạy được. Máy em cài win Vista, các anh có bản nào chạy trên vista không share cho em nhé, crack luôn nhé. Thanks
|
Mọi người ơi cho em hỏi, em mới học pic và đang code những bài đầu tiên dùng C với chương trình MPLAB. Em type theo đoạn code nhấp nháy led của anh Linh mà khi compile thấy báo lỗi TRISB và PORTB chưa được khai báo, khi em cho dấu chú thích vào thì compile mới thành công?
Vậy 2 biến TRISB và PORTB có cần khai báo j không? edit: Em đã thử bằng cách khác, cho dòng #include<defs_16f877a.h> vào sau dấu // và có khai báo hai biến TRISB, PORTB kiểu int16 thì dịch thành công. Nhưng em vẫn chưa hiểu, muốn khai báo TRISB và PORTB thì phải làm ra sao? Còn file defs_16f877a.h thì có cần thiết khi mình dùng mạch nạp thật để test bài tutorial đầu tiên này k? edit1: Lên mạng kiếm được file def_877a.h rồi thì em cho vào device rồi include vào chương trình. Bỏ dòng khai báo TRISB và PORTB ( tự viết để xem chạy thế nào ) đi thì build success. |
Mọi người cho em hỏi:
Em viết thử ct ADC nhưng cứ báo lỗi thế này: " can't change device type this far in to the code" và con trỏ nằm ở dòng này: #device *=16 ADC=8 Mong nhận được giúp đỡ sớm! Thanks trước nha. |
Em mới học ccs,cho em hỏi các bác cái def_877A là cái gì mà em tìm không có,mấy chương trình của các bác có khai báo nhưng có khi dịch được có khi thi không ,nhờ các bác?
|
1 Attachment(s)
bạn đem về cho nó vào c/program file/picc/devices nhé. Còn trong đó có gì bạn mở ra sẽ biết thôi.
|
cứu em với
Trích:
em viết chương trình này sao không mô phỏng bằng proteus được trả lời giúp em sớm nhé thanks #include<16f877a.h> #fuses NOWDT,PUT,HS,NOPROTECT #device PIC16f877a*=16 ADC=10 #use delay(clock=4000000) #include <lcd.c> #byte portb=0x06 #byte portd=0x08 #bit b0=portb.0 #bit b1=portb.1 #bit b2=portb.2 #bit b3=portb.3 #bit b4=portb.4 #bit b5=portb.5 #bit b6=portb.6 #bit b7=portb.7 #int_rb void docphim() { if(b0&&b4) lcd_putc("giang"); if(b1&&b4) lcd_putc("hoang"); if(b2&&b4) lcd_putc("k9a"); if(b3&&b4) lcd_putc(" "); if(b0&&b5) lcd_putc("hoang"); if(b1&&b5) lcd_putc("giang"); }//end int void main(void) { set_tris_b(0xf0); set_tris_d(0x00); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); ext_int_edge(H_to_L); { portb=1; portb=2; portb=4; portb=8; lcd_putc("hoang giang !!!"); delay_ms(100); lcd_putc("\f"); } while(true);} |
help me
code của em không chạy các bác ơi
Code:
#include<16f877a.h> |
while (true); /// mình nghĩ có vấn đề ở dấu ' ; '
|
Code:
#include<16F887.h> |
Trích:
Chương trình của bạn không có một vòng lặp vô tận ở cuối để tránh cho vi điều khiển chạy tiếp những lệnh vô nghĩa phía sau mã chương trình. Với loại bài toán thay đổi trạng thái LED, không nên dùng Proteus để mô phỏng. Thân, |
Trích:
|
không hiểu tại sao khi em chép <DEF_16F877A.H> vào thư mục Devices rồi mà khi kiểm lỗi vẩn báo lỗi , các bác giúp em với. chưởng trình như sau
/*******BAT DAU CHUONG TRINH************/ #INCLUDE <16F877A.H> #INCLUDE <DEF_16F877A.H> #DEFINE STOP PIN_B4 #DEFINE DKTH PIN_B5 #DEFINE DKNG PIN_B6 #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) //SU DUNG THACH ANH 20MHZ #USE FAST_IO(A) #USE FAST_IO(B) #USE FAST_IO(D) INT8 I,BCHUC,BDVI,VDVI,VCHUC; INT8 SBUOC=0,A,SVONG=0; INT8 R_KEY=0; CONST UNSIGNED CHAR DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0}; CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6}; /************************************************** ******* CHUONG TRINH DIEU KHIEN LED QUAY THUAN SU DUNG LOAI DONG CO BUOC 48 RANG DIEU KHIEN NUA BUOC */ //CHUONG TRINH NGAT RB #INT_RB VOID NGAT_RB() { IF(RBIF==1) { IF(INPUT(STOP)==0){A=0;} IF(INPUT(DKTH)==0){A=1;} IF(INPUT(DKNG)==0){A=2;} } RBIF=0; } //CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD HEX_BCD() { VCHUC=SVONG/10; VDVI=SVONG%10; BCHUC=SBUOC/10; BDVI=SBUOC%10; } HIENTHI1() { PORTC=DIG[BDVI]; //HIEN THI SO BUOC DON VI PORTD=0X0F; DELAY_US(100); PORTD=0; //CHONG LEM PORTC=DIG[BCHUC]; //HIEN THI SO BUOC CHUC PORTD=0X17; DELAY_US(100); PORTD=0; PORTC=0XBF; //HIEN THI DAU GACH PHAN CACH PORTD=0X1B; DELAY_US(100); PORTD=0; PORTC=DIG[VDVI]; //HIEN THI SO VONG DON VI PORTD=0X1D; DELAY_US(100); PORTD=0; PORTC=DIG[VCHUC]; //HIEN THI SO VONG CHUC PORTD=0X1E; DELAY_US(100); PORTD=0; } HIENTHI() { I=0; SBUOC++; IF(SBUOC>95){ SBUOC=0; SVONG++; IF(SVONG>99){SVONG=0;} } HEX_BCD(); WHILE(I<10) { HIENTHI1(); I++; } } QUAYTHUAN() { PORTA=ROTATE[R_KEY]; HIENTHI(); IF (R_KEY < 7){R_KEY++;} ELSE R_KEY=0; } QUAYNGICH() { IF (R_KEY > 0){R_KEY--;} ELSE R_KEY=7; PORTA=ROTATE[R_KEY]; HIENTHI(); } STP() { OUTPUT_A(0XFF); HEX_BCD(); HIENTHI1(); } VOID MAIN () { SET_TRIS_A(0); // PORTA DIEU KHIEN DONG CO BUOC SET_TRIS_B(0XFF); // PORTB LA PORT NHAP DU LIEU SET_TRIS_C(0); // PORTC XUAT MA HIEN THI SET_TRIS_D(0); // PORTD QUET LED ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP NGAT TOAN CUC ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT RB EXT_INT_EDGE(H_TO_L); //CHO PHEP NGAT CANH XUONG A=0; WHILE(1) { SWITCH(A) { CASE 0 : STP(); //NEU A=0 THI STOP BREAK; CASE 1 : QUAYTHUAN(); //NEU A=1 THI QUAY THUAN BREAK; CASE 2 : QUAYNGICH(); //NEU A=2 THI QUAY NGHICH BREAK; } } } |
không hiểu tại sao khi em chép <DEF_16F877A.H> vào thư mục Devices rồi mà khi kiểm lỗi vẩn báo lỗi , các bác giúp em với. chưởng trình như sau
/*******BAT DAU CHUONG TRINH************/ #INCLUDE <16F877A.H> #INCLUDE <DEF_16F877A.H> #DEFINE STOP PIN_B4 #DEFINE DKTH PIN_B5 #DEFINE DKNG PIN_B6 #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) //SU DUNG THACH ANH 20MHZ #USE FAST_IO(A) #USE FAST_IO(B) #USE FAST_IO(D) INT8 I,BCHUC,BDVI,VDVI,VCHUC; INT8 SBUOC=0,A,SVONG=0; INT8 R_KEY=0; CONST UNSIGNED CHAR DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0}; CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6}; /************************************************** ******* CHUONG TRINH DIEU KHIEN LED QUAY THUAN SU DUNG LOAI DONG CO BUOC 48 RANG DIEU KHIEN NUA BUOC */ //CHUONG TRINH NGAT RB #INT_RB VOID NGAT_RB() { IF(RBIF==1) { IF(INPUT(STOP)==0){A=0;} IF(INPUT(DKTH)==0){A=1;} IF(INPUT(DKNG)==0){A=2;} } RBIF=0; } //CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD HEX_BCD() { VCHUC=SVONG/10; VDVI=SVONG%10; BCHUC=SBUOC/10; BDVI=SBUOC%10; } HIENTHI1() { PORTC=DIG[BDVI]; //HIEN THI SO BUOC DON VI PORTD=0X0F; DELAY_US(100); PORTD=0; //CHONG LEM PORTC=DIG[BCHUC]; //HIEN THI SO BUOC CHUC PORTD=0X17; DELAY_US(100); PORTD=0; PORTC=0XBF; //HIEN THI DAU GACH PHAN CACH PORTD=0X1B; DELAY_US(100); PORTD=0; PORTC=DIG[VDVI]; //HIEN THI SO VONG DON VI PORTD=0X1D; DELAY_US(100); PORTD=0; PORTC=DIG[VCHUC]; //HIEN THI SO VONG CHUC PORTD=0X1E; DELAY_US(100); PORTD=0; } HIENTHI() { I=0; SBUOC++; IF(SBUOC>95){ SBUOC=0; SVONG++; IF(SVONG>99){SVONG=0;} } HEX_BCD(); WHILE(I<10) { HIENTHI1(); I++; } } QUAYTHUAN() { PORTA=ROTATE[R_KEY]; HIENTHI(); IF (R_KEY < 7){R_KEY++;} ELSE R_KEY=0; } QUAYNGICH() { IF (R_KEY > 0){R_KEY--;} ELSE R_KEY=7; PORTA=ROTATE[R_KEY]; HIENTHI(); } STP() { OUTPUT_A(0XFF); HEX_BCD(); HIENTHI1(); } VOID MAIN () { SET_TRIS_A(0); // PORTA DIEU KHIEN DONG CO BUOC SET_TRIS_B(0XFF); // PORTB LA PORT NHAP DU LIEU SET_TRIS_C(0); // PORTC XUAT MA HIEN THI SET_TRIS_D(0); // PORTD QUET LED ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP NGAT TOAN CUC ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT RB EXT_INT_EDGE(H_TO_L); //CHO PHEP NGAT CANH XUONG A=0; WHILE(1) { SWITCH(A) { CASE 0 : STP(); //NEU A=0 THI STOP BREAK; CASE 1 : QUAYTHUAN(); //NEU A=1 THI QUAY THUAN BREAK; CASE 2 : QUAYNGICH(); //NEU A=2 THI QUAY NGHICH BREAK; } } } |
em đã tim ra lỗi, cam ơn
|
sao mình sử dụng chương trình CCS để viết chương trình cho PIC thì sau khi viết xong lại không thể compile để chuyển thành file .hex được vì nút compile đó bị mờ đi, mình bấm thử F9 cũng không được, xin mọi người chỉ giúp. Đa tạ!
|
hix, các bác ơi. Khó hiểu thật. Em dùng timer0 để tạo thời gian trễ là 1s. Nháy leg hiển thị số. Em nghĩ đã đúng rồi, vì thử các led nháy 1s đúng mà sao khi bỏ vào led bảy đoạn nó lại chạy quá nhanh kô như ý muốn được. Hix vậy là sao đây ạ?? Muốn xử lý thì thế nào ??
code: #include <16f877a.h> #fuses HS, NOWDT #use delay(clock=4000000) #byte portb=0x06 #byte trisb=0x86 #byte INTCON=0x0b #bit TMR0IF=INTCON.2 #byte TMR0=0x01 #use fast_IO (b) void tre1s (int so) { int i,j; TMR0IF=0; setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_16); set_timer0 (6); for (i=0;i<=so;i++) { while (TMR0IF==0) { } } } void main () { int a,b; int C[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; set_tris_b (0x00); a=0; while (1) { for (a=0;a<=9;a++) { tre1s (250); portb=C[a]; tre1s (250); } } } |
Trích:
|
bác nói rõ hơn một chút được kô ạ?? Còn cái 1s đó kô wan trọng. Theo em nghĩ mình tính toán cũng đúng mà. Thời gian để i tăng lên 1 đơn vị: (255-6+1)*1*16 = 40000. Vậy giá trị số phải là 250. Em wen ở đó kô có dấu bằng xảy ra.
Vấn đề em thắc mắc ở đây. Là cái đoạn sau. Nếu em thay đoạn sau: void main () { int a=0b00000001; set_tris_b(0x00); while (1) { portb=a; tre1s (250); rotate_left (&a,1); } } thì đèn led ở portb của em nháy từng con với thời gian trễ là 1s. Còn nếu em thay cái đoạn trên thì nó nhảy gì gì đâu ấy à. Em kô hiểu được |
Kô ai giúp em với!! Hix em chờ lâu quá mà kô thấy. Cũng tìm khắp diễn đàn rồi mà kô thấy có chỗ nào nói về cái này cả
|
mh cũng gốp zui thêm 1 số chưg trìh ccs,các ct này chạy tốt trên protues7.4
http://www.mediafire.com/?xzynn5nmgnz |
Trích:
Hàm tre1s() của bạn chỉ đơn giản là thực hiện các lệnh trong đó mỗi lệnh tốn khoảng vài us làm sao mà trễ đc đến 1s cơ chứ. |
Bạn thử sửa lại code trên đó thành như này xem sao
Code:
#include <16f877a.h> |
Trích:
đầu tiên gán cho timer0=6. Giá trị timer tăng sau 1 chu kì lệnh với tỉ lệ chia tần số là 16. Vậy sau bao lâu thì giá trị i tăng lên 1 đơn vị: t=(255-6+1)*1us*16=4000us. Vậy giá trị của i phải chạy từ 0 đến 250. Như vậy nó tốn thời gian là 4000us*250=1000000us=1s. đó là cách em tính. Nhưng ở đây em không thắc mắc về tính thời gian trễ này. Nếu ta sửa cái led 7 đoạn bằng một led đơn thì nó vẫn đỏ tắt sau thời gian là 1s. Nhưng nếu nó là led 7 đoạn thì nhảy loạn xạ lên. |
Trích:
-RTCC_DIV_16 chưa nhắc tới, khi hàm tre1s() được gọi và đến khi hàm lệnh set_timer0(6) được thực hiện thì timer0 bắt đầu đếm từ 6, mặc kệ timer0 nó đếm thì vòng lặp for(..) vẫn được thực hiện đúng ko. -Trong khi đang đếm timer0 chưa tràn thì con trỏ CT cứ ở yên trong while(TMR0IF==0) (vì TMR0IF==0 true) vậy sau t=(255-6+1)*1us*16=4000us thì sao, thì timer0 bị tràn và TMR0IF==0 false chứ sao nhỉ, vậy thế thì sao nào. -Như vậy là khi i==0 thì timer0 đã bị tràn rồi và TMR0IF==1 nhưng chưa thể thoát khỏi tre1s() ngay được vì i còn phải tăng đến khi i==so thì mới thoát khỏi vòng lặp for(..) và cũng thoát khỏi hàm tre1s() luôn. Đấy như thế thì hàm tre1s() của bạn chỉ trễ được có 4000us + vài trăm us trong vòng for(..) thôi chứ sao đủ 1s được. Ko biết bạn mô phỏng thế nào chứ mình thấy khi thay đoạn code khác vào thì nó vẫn trễ như thế (vì vấn đề là ở hàm trễ); |
Trích:
vì khi bạn dùng Set_timer0(X) thì thời gian để 1 lần Timer của bạn tràn là : T = 4.(256 - X) / Tấn số thạch anh Cụ thể ở đây của bạn : X = 6 và Tần số thạch anh là : 4MHz -> T = 4.(256 -6) / 4000000 = 250uS . Vậy để trễ 1s bạn cần tràn Timer 4000 lần Nhưng bạn dùng chế độ RTCC_DIV_16 nên Timer tràn 250 lần là bạn có 1s Vì thế bạn chỉ cần sửa chương trình lại như sau là ngon lành : Code:
#include <16f877a.h> :beer: |
Mình vừa viết lại chương trình . Vẫn là dùng Timer bạn xem thế nào ???
http://www.mediafire.com/download.php?mtgyjhjniij Mà bài toán này mục đích của bạn chỉ là hiển thị led 7 thanh thôi hay có ý định gì tiếp theo không ? :D |
Múi giờ GMT. Hiện tại là 05:00 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