![]() |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2009
Bài gửi: 6
: |
![]() em làm cái đồng hồ dung 16f877a + ds12c887+ LCD
viết bằng CCS nhưng tới phần ghi và đọc 1 giá trị vào thanh ghi thì gặp 1 lỗi không hiểu được. Đó là chỉ đọc đúng giá trị của thanh ghi vào lần lặp đầu tiên, những lần tiếp theo thì sai. Các bác coi gium em lỗi ở đâu với. Đây là code em tự mò viết: Code:
#include <16F877a.h> #include <DEFS_16F877A.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT #use delay(clock=20000000) #define use_portb_lcd TRUE #include <lcd.c> #define DS RE2 #define R_W RE1 #define AS RE0 #define RTC PORTD int DCD,DCV,DLV,DCS,x,high,medum,low,digit; //ham doc rtc void docrtc(void) { set_tris_E(0); DS =1; R_W=1; AS =1; RTC=DCD; delay_ms(1); AS =0; DS =0; set_tris_D(0xff); delay_ms(1); } //Ham ghi vao rtc void vietrtc(void) { set_tris_E(0); AS = 1; DS = 1; R_W= 1; RTC= DCV; delay_ms(1); AS = 0; delay_ms(1); RTC= DLV; R_W= 0; delay_ms(1); AS = 1; delay_ms(1); } void main(void) { delay_ms(100); // tao tre 100ms cho LCD khoi dong set_tris_D(0); set_tris_E(0); DCV = 0; //xoa dia chi ghi DLV = 0; //xoa du lieu ghi delay_ms(1); DCV = 0x15; // dia chi thanh ghi 0x15 DLV = 0x54; // gia tri cap nhat while(1) { DCS = 0; //xoa dia chi luu DCD = 0; // xoa dia chi doc vietrtc(); delay_ms(1); DCD = 0x15; // doc gia tri thanh ghi 0x15 docrtc(); DCS = RTC; x = DCS; delay_ms(1); AS = 1; lcd_init(); lcd_gotoxy(7,1); // vi tri (x,y)=(7,1)= hang 1, cot 7 lcd_putc(x); delay_ms(1000); } } thay đổi nội dung bởi: namqn, 23-12-2009 lúc 07:57 AM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Apr 2009
Bài gửi: 6
: |
bác namqn ghé qua mà sửa mỗi cái định dạng code sao không cho em chút lời khuyên với. Em bế tắc chỗ này quá!!!
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
đây là đoạn code đề đọcthanh ghi giây ![]() #include <16F877A.h> #include <def_877a.h> #include <DEFS_16F877A.h> #device *=16 //su dung het ram trong pic # fuses NOWDT, XT, NOPROTECT, NOLVP, PUT # use delay (clock = 4000000) int DATA_W,ADDRESS_W,DATA_R ,ADDRESS_R ; #define CS RC5 #define AS RC4 #define RW RC3 #define DS RC1 #define RE_SET RC0 #define DATAPORT PORTB #define LEDPORT PORTD void read_12C887(void);//khai bao chuong trinh con void write_12C887(void);//khai bao chuong trinh con void main() { TRISB=0; TRISC=0x04; TRISD=0; TRISE=0; ADCON1=0x06; RE_SET=1; CS =1; delay_ms(1000); DATA_W= 0x2F;//b'00101111' //dua gia tri vao thanh ghi "register A" //BIT 5=1 THOI GIAN THUC BIT 0...3=1 TAO F=2HZ TAI CHAN SQW ADDRESS_W=10;//THANH GHI A write_12C887(); DATA_W= 0x5E;//'01011110' ; dua gia tri vao thanh ghi "register B" //BIT 3=1 CHO PHEP TAO SONG VUONG TAI CHAN SQW // BIT 1=1 dang du lieu 24 gio //BIT 2=1 dang du lieu Binary ADDRESS_W=11;//THANH GHI B write_12C887(); //DOC TRANG THAI CUA DS12C887 XEM DA SAN SANG DOC DU LIEU HAY CHUA LAP:; ADDRESS_R=10;//THANH GHI A read_12C887(); while(DATA_R,7==1)// { ADDRESS_R=10;//THANH GHI A read_12C887(); } //DATA_R,7=0 DA CHO PHEP DOC DU LIEU ADDRESS_R=00;//D/C THANH GHI giay read_12C887(); LEDPORT=DATA_R; GOTO LAP; }//DAU KET THUC CHUONG TRINH CHINH //**********write_12C887*************** //**********write_12C887*************** void write_12C887(void) { TRISB=0; DATAPORT=ADDRESS_W; AS=0; DS=1; RW=1; #ASM; nop; #ENDASM; AS=1; CS=0; #ASM; nop; #ENDASM; AS=0; #ASM; nop; #ENDASM; DATAPORT=DATA_W; RW=0; #ASM; nop; #ENDASM; AS=1; RW=1; CS=1; } void read_12C887(void) { TRISB=0; DATAPORT=ADDRESS_R; DS=1; RW=1; #ASM; nop; #ENDASM; AS=1; CS=0; #ASM; nop; #ENDASM; AS=0; #ASM; nop; #ENDASM; DS=0; #ASM; nop; #ENDASM; TRISB=0xFF; DATA_R=DATAPORT; AS=1; CS=1; }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Mar 2009
Bài gửi: 2
: |
Em đã làm theo code của bác "tdm", Tuy nhiên khi chạy mô phỏng Trên proteus, với hàm hiển thị LCD như sau:
void hienthi(int so){ LCD_SetPosition(LINE_1); printf(lcd_putchar,"second = %u",so); } hoặc thậm chí chỉ dùng hàm delay_ms(1) thì vẫn bị lỗi như "thuong008": Tức là chỉ hiện đúng giá trị đọc đầu tiên, sau đó em không thấy vi điều khiển truy cập vào Đồng hồ nữa, các giá trị trên các chân nối VDK với Đồng hồ vẫn không thay đổi. Song khi bỏ phần hiển thị trên LCD, rồi chạy mô phỏng nó lại tiếp tục truy cập đồng hồ như bình thường. Vậy lỗi là do chương trình mô phỏng hay do trễ khi sử dụng thêm các hàm khác thì chương trình chạy sai? Mong các bro chỉ giáo giùm. thay đổi nội dung bởi: s8dtvt, 10-05-2010 lúc 12:31 AM. Lý do: update |
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 4
: |
co so do nguyen ly ko cho minh voi
|
![]() |
![]() |
![]() |
#6 | |
Nhập môn đệ tử
Tham gia ngày: Apr 2010
Bài gửi: 5
: |
Trích:
nếu mà bác tự tạo gủi cho em phát với. còn cái chuyện của bạn thuong000 thì chắc tuần tới em giải quyết cho . |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 36
: |
proteus 7.5 trở lên mới có con ds12c bạn à, cũng có 7.7 rồi bạn
|
![]() |
![]() |
![]() |
#8 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 36
: |
nhờ các bác cao thủ nào rành chỉ giúp : tại sao khi quét trên led 7 đoạn , mình đã kiểm tra bit uip(bit 7) mà sao nó chẳng chịu update. Mỗi lần bấm lại start thì cập nhật lại số khác thì đúng???????????????????
|
![]() |
![]() |
![]() |
#9 |
Nhập môn đệ tử
Tham gia ngày: Apr 2010
Bài gửi: 5
: |
Đây là mạch và code tôi đã làm xong ( chỉ mô phỏng thôi )
song tôi đang bị vấn đề khi nạp code vào vi điều khiển PIC vấn đề như sau : Khi nạp chương trình thì vẫn chạy tốt ( tức là programming completed ) thuy nhiên khi tôi bật nguồn cho chạy đễ test các chân đầu ra thì không thấy tín hiệu ra như trong code test của tôi . không biết chíp có hỏng không nữa. Rất mong các bác ai có thiện chị chỉ giáo tôi với Lâu nay quen AVR rồi chuyển sang con PIC theo ý thấy và bây giờ gặp khó khăn quá. Mong mọi người giúp đỡ ! |
![]() |
![]() |
![]() |
#10 |
Nhập môn đệ tử
Tham gia ngày: Apr 2010
Bài gửi: 5
: |
có ai từng làm PIC chỉ giáo em với . Không hiểu sao vẫn nạp vào chíp bình thương nhưng không thấy các chân thay đổi tín hiệu như mình cài đặt. Đo thấy toàn mức điện áp 3.2 - 4.5 V mặc dù Output_high(); hay Output_low() cũng không thấy thay đôi gì
|
![]() |
![]() |
![]() |
#11 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2008
Bài gửi: 26
: |
![]() Trích:
Mua một con mới về thử rồi sẽ thấy. |
|
![]() |
![]() |
![]() |
#12 | |
Nhập môn đệ tử
Tham gia ngày: Apr 2010
Bài gửi: 5
: |
Trích:
có khi nào do thạch anh không nhỉ tôi lập trình với code thạch anh là 8Mhz nhưng do mạch thực tế tôi không biết thạch anh là bao nhiêu ? không biết có phải do lỗi đấy k nhỉ ? |
|
![]() |
![]() |
![]() |
|
|