Hướng dẫn giúp em
Chào tất cả anh em trong diễn đàn
Em đang có 1 vấn đề cần mọi người giúp đỡ: >.< + Làm sao nhận được 16 ký tự số từ VB xuống (note:lưu 16 ký tự số đó vào eeprom của con pic16f877a được ko) + Em muốn hiển thị 16 số đó lên led 7 đoạn >>sử dụng IC74HC595(---> đọc giá trị từ eeprom và hiển thị lên led 7 đoạn) >< còn code VB6.0 em đã làm chạy ok nếu cần em sẽ post lên sau >< Em đang bị bí cái vấn đề vừa nêu trên mong mọi người giúp em Dưới đây là code PIC em đã viết rồi nhưng chưa chạy anh chị kiểm tra giúp em nha... xin cám ơn. #include <16F877A.h> #include <def_877a.h> #include <DS1307.C> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) //#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=9) //Baud_min=4800 Baud_max=115200 #use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9) #define SCL RD5 #define DATA RD6 #define SCK RD7 //#byte TRISD =0x88 void quet(unsigned char x); void layma(); //void luudata(char a); void chot(); unsigned int Mrs232[]={};//mang nhan gia tri tu rs232 int8 Y; unsigned int Z[]={};//mang chua cac gia tri led7 //unsigned int count; unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7 char traloi; #INT_RDA Receive_isr() { traloi=getch(); Mrs232[Y]=traloi; WRITE_EEPROM(Y,Mrs232[Y]); Y++; } void quet(unsigned char x) { int i,temp1; for(i=0;i<8;i++) { temp1=x;//gan bien temp1=temp1&0x80;//lay ra bit dau tien (bit 7) if(temp1==0x80)//so sanh bit DATA=1; //bang 1 thi xuat vao chip =1 else DATA=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK=0; //tao xung tren chan 11 SCK=1; //1 xung dua vào 1 bít } } void chot() { SCL=0; //xuat du lieu ra output SCL=1; } void main() { int i,j; enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); trisd=0x00; trisc=0x40; while(true) { for(i=0;i<16;i++) { Mrs232[i] = READ_EEPROM(i); j=Mrs232[i]-48; Z[i]=ma[j]; quet(ma[j]); chot(); delay_ms(500); } } } |
các anh chị pro ơi giúp em với em đang cần lắm làm ơn giúp em với
|
Trích:
1:bên truyền lên truyền thêm " kí tự" kết thúc một chuỗi truyền. Trích:
(khắc phục mất dữ liệu làm như sau:dữ liệu nhận được ghi vào mảng Mrs232 chỉ khi nào nhận được "kí tự kết thúc chuỗi" mới lấy mảngMrs232 ghi vào EEPROM. 3:phần khai báo mảng lên cho nó con số rõ ràng. vd:unsigned int Mrs232[16]={}; 4:tách từng phần một mà kiểm tra rồi hãy gộp code lại thì sẽ dễ ràng hơn. |
Trích:
#INT_RDA Receive_isr() { traloi=getch(); for(Y=0;Y<16;Y++) { Mrs232[Y]=traloi; WRITE_EEPROM(Y,Mrs232[Y]); delay_ms(5); if (Y==15) goto thoat; } thoat: ; } Nếu ok anh xem giúp em cái phần main--> em thấy nó không ỗn nhưng không biết phải chỉnh như thế nào mong anh giúp đỡ |
1 Attachment(s)
Cho dễ hình dung em xin post code VB+ mô phỏng = protues 7.7
anh tdm nói: "WRITE_EEPROM(Y,Mrs232[Y]);//hàm này mất 5ms">>> nhưng trong VB em có dùng timer delay nên trong code Pic có cần sửa lại không nếu có sửa thì e sửa như trên được chưa anh |
1 Attachment(s)
Trích:
code tham khảo : Code:
#include <16F877A.h> |
for(y=0;y<16;y++)
{ putc((read_EEPROM (y)));//doc du lieu kiem tra } Đoạn code này em không hiểu cho lắm >>> tác dụng và mục đích của nó em thấy nó không rõ cho lắm, theo em nghĩ nếu bỏ đoạn code này thì vẫn ok |
Trích:
|
Trích:
Và bây giờ làm sao đưa 16 ký tự đó ra IC giải mã 74HC595 vậy anh :( |
Trích:
PHẦN HIỂN THỊ: hãy viết một ct khác để test thử phần giao tiếp 74HC595 với 16 led 7 đoạn xem OK hay chưa ? rồi anh hướng dẫn tiếp. |
Trích:
|
Trích:
|
Trích:
Code:
unsigned int Zz[16]={0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5};// nếu phần cứng chưa đúng thì sửa lại. à mà phần code trên do em viết hay là em tham khảo trên mạng. |
Trích:
|
Em dùng mạch Max232 này không biết có đúng không anh tdm
http://i1057.photobucket.com/albums/...Untitled-1.png |
Múi giờ GMT. Hiện tại là 07:57 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