![]() |
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 |
chắc phải học hỏi từ các bạn nhiều rồi....em mới tham gia pic hii
|
//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; |
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) |
Trích:
goodluck |
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> |
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ó. |
à 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é. |
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 |
Tks
Trích:
Cảm ơn anh nhé. Nó bị lỗi trong device thật. Giờ CCS chạy ngon rồi. ^^~ |
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> |
Trích:
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 . |
Trích:
|
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.
|
Trích:
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 . |
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!
|
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 |
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); } } |
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? |
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); } } |
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 đỡ
|
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 |
Trích:
chúc bạn thành công! |
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 |
Cảm ơn bạn nhiều nhé!!!!!!!!1
|
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(); } |
đội ơn chủ thớt nhiều !!!
|
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 |
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?
|
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?
|
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 |
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.
|
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.
|
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) {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 |
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(); } } } |
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. |
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 :) |
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 |
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; } } |
Trích:
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