PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-03-2008, 04:33 PM   #1
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
chào anh nam. khi em chạm tay vào chân của pic thì mất dữ liệu, khi đó em cũng không nhớ chân nào nữa. thế các trường hợp tăng hoặc giảm nguồn đột ngột cũng làm mất data trong eeprom phải không anh.
cho em hỏi luông. pic có 256 byte eeprom thế nếu mình dùng hết toàn bộ 256 byte này để chứa data thì có ảnh hưỡng gì đến việc mất data không anh.
các lệnh khai báo trong config có ảnh hưỡng gì đến việc lưu trữ data trong eeprom của pic không.
anh giải thích dùm em nhé. thank you!
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2008, 07:00 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tungtot_vl View Post
chào anh nam. khi em chạm tay vào chân của pic thì mất dữ liệu, khi đó em cũng không nhớ chân nào nữa. thế các trường hợp tăng hoặc giảm nguồn đột ngột cũng làm mất data trong eeprom phải không anh.
cho em hỏi luông. pic có 256 byte eeprom thế nếu mình dùng hết toàn bộ 256 byte này để chứa data thì có ảnh hưỡng gì đến việc mất data không anh.
các lệnh khai báo trong config có ảnh hưỡng gì đến việc lưu trữ data trong eeprom của pic không.
anh giải thích dùm em nhé. thank you!
Bạn nên cho biết phần cứng của bạn thiết kế ra sao, code của bạn viết như thế nào (không cần code chi tiết, chỉ cần chương trình chính, và các phần code liên quan đến đọc/ghi EEPROM).

Những câu hỏi trên của bạn liên quan đến nhiều vấn đề, không thể giải thích đơn giản bằng vài đoạn văn bản.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2008, 04:47 PM   #3
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
Trích:
Nguyên văn bởi namqn View Post
Bạn nên cho biết phần cứng của bạn thiết kế ra sao, code của bạn viết như thế nào (không cần code chi tiết, chỉ cần chương trình chính, và các phần code liên quan đến đọc/ghi EEPROM).

Những câu hỏi trên của bạn liên quan đến nhiều vấn đề, không thể giải thích đơn giản bằng vài đoạn văn bản.

Thân,
cái này chỉ là từng đoạn chường trình thôi. anh coi có giúp gì được cho em không.

Code:
#include<18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#device 18F4550*=16 ADC=10
#use delay(clock=48000000)
#include<E:\595\font9moi.c>
#include<E:\595\font7.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#priority rda
#use fast_io(a)
#byte porta=0x05
#use fast_io(b)
#byte portb=0x06
#use fast_io(c)
#byte portc=0x07
#use fast_io(d)

#byte portd=0x08
#use fast_io(e)
#byte porte=0x09
#define clk pin_b4
#define data pin_b5
#define lock pin_b6
//********** DIA CHI CAC EPPROM ************************************************
#define add1  0x06   // 30 byte
#define add2  0x25   // 34 byte
#define add3  0x49   // 80 byte
#define add4  0x9f   // 100 byte
#define b1    0x01
#define b2    0x02
#define b3    0x03
#define b4    0x04
//==================
      void giao_tiep();
               void viet_eeprom();
               void doc_eeprom1();
               void doc_eeprom2();
               void doc_eeprom3();
               void doc_eeprom4();
               void trabang();
#INT_RDA
void giao_tiep()
   {  int8 c;
      disable_interrupts(global);
      output_low(pin_b0); output_low(pin_b1); output_low(pin_b2); output_low(pin_b3);
      c = getc();
      putc(c);
      k=c;
      if(k==255)
        {
           viet_eeprom();
        }
      else { chu[s]=k; s++; delay_ms(500);}
      enable_interrupts(global);
   }
//****************************************************
 #INT_EEPROM
void viet_eeprom()
   {  int i,l,x;
      disable_interrupts(global);
     if(chu[0]==251)// chuoi 1
       {
         write_eeprom(b1,s);
         for(i=0;i<s;i++)  // s
          { write_eeprom(add1+i,chu[i]); }
       }
     if(chu[0]==252) // chuoi 2
       {
         write_eeprom(b2,s);
         for(i=0;i<s;i++)  // s
          { write_eeprom(add2+i,chu[i]); }
       }
     if(chu[0]==253)// chuoi 3
       {
         write_eeprom(b3,s);
         for(i=0;i<s;i++)  // s
          { write_eeprom(add3+i,chu[i]); }
       }
     if(chu[0]==254) // chuoi 4
       {
         write_eeprom(b4,s);
         for(i=0;i<s;i++)  // s
          { write_eeprom(add4+i,chu[i]); }
       }

      for(i=0;i<s+2;i++) {chu[i] = 10;}
      s=0;
      printf("W ");
      enable_interrupts(global);
   }
//****************************************************
void doc_eeprom1()
   {  int i,l;
      disable_interrupts(global);
      for(i=0;i<f1;i++)
        {
          l = read_eeprom(add1+i);
          chu[i] = l;
        }
      enable_interrupts(global);
      printf("C1 ");
   }
//**********************************************************
 void doc_eeprom2()
   {  int i,l;
      disable_interrupts(global);
      for(i=0;i<f2;i++)
        {
          l = read_eeprom(add2+i);
          chu[i] = l;
        }
      enable_interrupts(global);
      printf("C2 ");
   }
//****************************************************
void doc_eeprom3()
   {  int i,l;
      disable_interrupts(global);
      for(i=0;i<f3;i++)
        {
          l = read_eeprom(add3+i);
          chu[i] = l;
        }
      enable_interrupts(global);
      printf("C3 ");
   }
//**********************************************************
 void doc_eeprom4()
   {  int i,l;
      disable_interrupts(global);
      for(i=0;i<f4;i++)
        {
          l = read_eeprom(add4+i);
          chu[i] = l;
        }
      enable_interrupts(global);
      printf("C4 ");
   }
//====================


void main()
   {
      set_tris_b(0);
      set_tris_a(0);
      set_tris_c(0);
      set_tris_e(0);
      set_tris_d(0);
      output_b(0);
      output_e(16);
      enable_interrupts(INT_eeprom);
      enable_interrupts(INT_RDA);
      enable_interrupts(global);
      printf("v ");
      delay_ms(3000);
      while(true)
        {
         // printf("/");
           f1 = read_eeprom(b1);  f2 = read_eeprom(b2);
           f3 = read_eeprom(b3);  f4 = read_eeprom(b4);
           doc_eeprom1();
            trabang();
           doc_eeprom2();
            trabang();
           doc_eeprom3();
             trabang();
           doc_eeprom4();
             trabang();
            trabang1();
            dichtrai1();

          }
   }

thay đổi nội dung bởi: namqn, 19-03-2008 lúc 06:31 PM.
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2008, 09:28 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Tôi không dùng CCS C, nhưng đọc qua code của bạn, tôi có cảm giác không ổn. Theo tài liệu của CCS C, #INT_EEPROM là ngắt xảy ra khi việc ghi EEPROM hoàn tất. Những gì bạn viết trong trình xử lý ngắt #INT_RDA có thể hiểu được, nhưng những gì bạn viết trong trình xử lý ngắt #INT_EEPROM thì khó hiểu.

Theo cách bạn viết, khi nhận được ký tự, và ký tự đó có giá trị 255 thì bạn sẽ thực hiện việc ghi vào EEPROM. Tuy nhiên, chương trình con mà bạn gọi ở trình xử lý ngắt #INT_RDA lại là trình xử lý ngắt #INT_EEPROM, điều này có thể gây ra rắc rối, vì chương trình xử lý ngắt sẽ trở về bằng lệnh RETI, còn chương trình con bình thường sẽ trở về bằng lệnh RETURN hay RETLW.

Điểm thứ hai, ngắt #INT_EEPROM xảy ra khi việc ghi 1 ô nhớ EEPROM hoàn tất, khi đó, trong chương trình xử lý ngắt #INT_EEPROM của bạn, bạn lại yêu cầu ghi vào EEPROM nữa, vì khi động tác ghi này hoàn tất, nó sẽ sinh ra một ngắt #INT_EEPROM nữa. Trong khi đó, bạn vẫn chưa hoàn tất vòng lặp ghi một mảng giá trị vào EEPROM. Thực sự tôi cũng không hiểu chương trình này sẽ vận hành như thế nào, vì tôi không bao giờ viết code kiểu như vậy.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:27 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam