Thông báo

Collapse
No announcement yet.

Tại sao RESET mà vẫn lưu dữ liệu ?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Tại sao RESET mà vẫn lưu dữ liệu ?

    Mình chậy mạch đếm dùng VĐK AT89S52, khi đếm đến 1 số nào đấy (hiển thị LED) nếu RESET (chuyển từ hở sang Vcc ) thì khi hoạt động nó vẫn đếm tiếp số trước khi RESET mà không bắt đầu lại từ đầu, (mình dùng ngắt ngoài để đếm ). còn nữa, khi mình cấp nguồn nó cũng nhẩy đếm từ 1 giá trị nào đấy chứ không phải từ 0 (trong khi hoạt động đếm vẫn đúng ).Mình chậy mô phỏng ( proteus ) cũng gặp lỗi RESET này (còn lỗi cấp nguồn thì không )
    Mình sắp phải hoàn thành sản phẩm, mong các bạn giúp đỡ.......!
    Last edited by DT3K48DHBK; 13-04-2006, 00:39.

  • #2
    Có 2 ý bạn cần nắm rõ:
    -Một số vị trí RAM sau khi bật nguồn, nó nhận một giá trị ngẫu nhiên nào đó(xxxxxxxx).
    -Một số vị trí RAM nếu gặp reset cứng, nó giữ nguyên giá trị cũ(unchange).
    Những vị trí này có trong datasheet cả.
    Bạn muốn khắc phục hiện tượng này thì ngay trong phần cài đặt, bạn chỉ cần gán biến đó=0

    Comment


    • #3
      Cảm ơn anh Bình Anh, Em sẽ làm lại xem !!

      Comment


      • #4
        Anh Bình Anh À, Em thử lại rồi, đổi địa chỉ ghi mã lệnh khắp nơi mà vẫn mắc lỗi RESET này, ( em chạy mạch thật ). Làm sao đây ????
        Ah Tiện thể em gửi code :
        Code:
        ORG 0000H          ;DIA CHI DAU
        LJMP PROGRAM       ; CHUONG TRINH BAN DAU
        ORG 0003H          ; DIA CHI NGAT 0
        JB 01,NGO
        SETB 00
        SETB 02
        RETI
        NGO:
        CLR 01
        CLR 00
        SETB 04
        SETB 02
        RETI
        ORG 0013H          ; DIA CHI NGAT 1
        JB 00, NG1
        SETB 01
        SETB 02
        RETI
        NG1:
        CLR 00
        CLR 01
        SETB 02 
        SETB 03
        RETI       
        ORG 0030H
        ;////////////////////////////////////CHUONG TRINH
        PROGRAM:
        MOV IE,#10000101B
        SETB TCON.2
        SETB TCON.0
        
        MOV P2,#0FFH
        MOV P1,#0C0H
        MOV P0,#0C0H
        CLR 02
        LJMP HERE
        MAIN:           ;/////////////HAM CHINH
        JB 03,LAP3
        JB 04,LAP4
        JB 00, NHAY__0
        JB 01, NHAY__1
        NHAY__0:
        MOV R0,A
        SUBB A,#99
        JZ NHAY
        MOV A,R0
        INC A
        MOV R0,A
        CLR 02
        LJMP SUBMAIN
        NHAY__1:
        JZ NHAY
        SUBB A,#1
        MOV R0,A
        CLR 02
        LJMP SUBMAIN
        NHAY:
        MOV A,R0
        LJMP HERE
        LAP3:
        CLR 00
        CLR 02
        CLR 03
        LJMP HERE
        LAP4:
        CLR 01
        CLR 02
        CLR 04
        LJMP HERE
        ;//////////////////////////////////CHUONG TRINH DUA RA LED VA DEM SANG
        SUBMAIN:
        JNZ TIEP
        MOV P2,#0FFH
        MOV P1,#0C0H
        MOV P0,#0C0H
        LJMP HERE
        TIEP:
        ;//////////////////////////// CHUONG TRINH DUA RA LED
        MOV B,#10
        DIV AB
        CJNE A,#00H,L11
        MOV P0,#0C0H
        
        L11: CJNE A,#01,L12
        MOV P0,#0F9H
        L12:CJNE A,#02,L13
        MOV P0,#0A4H
        L13:CJNE A,#03,L14
        MOV P0,#0B0H
        L14:CJNE A,#04,L15
        MOV P0,#99H
        L15:CJNE A,#05,L16
        MOV P0,#92H
        L16:CJNE A,#06 ,L17
        MOV P0,#82H
        L17:CJNE A,#07,L18
        MOV P0,#0F8H
        L18:CJNE A,#08 ,L19
        MOV P0,#80H
        L19:CJNE A,#09,L110
        MOV P0,#90H
        L110:
        MOV A,B
        CJNE A,#00H,L21
        MOV P1,#0C0H
        L21: CJNE A,#01H,L22
        MOV P1,#0F9H
        L22:CJNE A,#02H,L23
        MOV P1,#0A4H
        L23:CJNE A,#03,L24
        MOV P1,#0B0H
        L24:CJNE A,#04H,L25
        MOV P1,#99H
        L25:CJNE A,#05,L26
        MOV P1,#92H
        L26:CJNE A,#06 ,L27
        MOV P1,#82H
        L27:CJNE A,#07,L28
        MOV P1,#0F8H
        L28:CJNE A,#08 ,L29
        MOV P1,#80H
        L29:CJNE A,#09,L210
        MOV P1,#90H
        ;/////////////////////////// CHUONG TRINH DUA RA DEN SANG
        L210:
        MOV P2,#0FFH
        MOV A,R0
        CLR P2.0
        MOV B,#10
        DIV AB
        JNZ D2
        LJMP HERE
        D2: 
        CLR P2.1
        MOV B,#20
        MOV A,R0
        DIV AB
        JNZ D3
        LJMP HERE
        D3:
        CLR P2.2
        MOV B,#30
        MOV A,R0
        DIV AB
        JNZ D4
        LJMP HERE
        D4:
        CLR P2.3
        MOV B,#40
        MOV A,R0
        DIV AB
        JNZ D5
        LJMP HERE
        D5:
        CLR P2.4
        MOV B,#50
        MOV A,R0
        DIV AB
        JNZ D6
        LJMP HERE
        D6:
        CLR P2.5
        MOV B,#60
        MOV A,R0
        DIV AB
        JNZ D7
        LJMP HERE
        D7:
        CLR P2.6
        MOV B,#70
        MOV A,R0
        DIV AB
        JNZ D8
        LJMP HERE
        D8: 
        CLR P2.7
        LJMP HERE
        HERE: JNB 02 ,HERE
        MOV A,R0            ;NHAN LAI GIA TRI CUA A
        LJMP MAIN
        END
        ; Và Đây là Sơ Đồ Mạch (Đóng công tắc trên rồi dưới --> đếm tăng
        Đóng công tắc dưới rồi trên -->đếm giảm )
        (BQT: để post các đoạn code, bạn nên đánh dấu đoạn đó, sau đó kích vào biểu tượng dấu #)
        Last edited by DT3K48DHBK; 13-04-2006, 01:28.

        Comment


        • #5
          Có vài cách làm
          1/ Trong phần Main code bạn nên viết một routine startup để xóa data chứa trong ram. Do đó khi MCU reset (từ RST switch hay POR) thì nó sẽ chạy routine đó để xóa data chứa trong ram. Philips có một cái AN nói về warm-boot và cold-boot, bạn nên tham khảo để hiểu rỏ thêm vấn đề.
          Example:
          Code:
                  clr A				; Clear ACC
                  mov R0,#02			; Load pointer 
                  mov R1,#126			; Load counter 
          Clear:  mov @R0,A			; Clear Ram 
                  inc R0				;
                  djnz R1,Clear			;
          	ret				;
          Routine trên khi chạy sẽ xóa ram 126 byte ram từ 02h cho đến FFh

          2/ Dùng một input port pin để reset counter data. Port pin này chỉ dùng để reset counter chứ không phải để reset MCU. Khi MCU nhận input từ pin này thì nó sẽ chạy routine để xóa ram.

          Góp ý
          Khi post code nhớ dùng code format để post và post luôn phần comment để người đọc có thể biết ý bạn muốn làm gì để có thể tiện cho việc giúp đở nếu có thể. Nói thật bạn đừng buồn chứ nhìn code bạn viết tui không muốn đọc tí nào cả.

          Comment


          • #6
            Mình có copy code của MOD THẾLÂM, thực chất là xóa hết bộ nhớ Ram trước khi bắt đầu chương trình, nhưng vấn đề là khi RESET thì nó không bắt đầu chương trình lại từ đầu mà cứ tiếp tục như trước RESET. Có thể vì thế nên hinh như đoạn code không có tác dụng
            Mình viết code chỉ để các bạn nếu có hứng thú thì chạy thử thôi mà, Chứ đọc hiểu nội dung nó chắc chẳng có ai làm. Xin tiếp thu ý kiến của nhóm quản trị !
            Last edited by DT3K48DHBK; 13-04-2006, 20:53.

            Comment


            • #7
              Đoạn code đó chỉ là một ví dụ để tham khảo, bạn copy mà chẳng để ý gì cả. Đoạn code đó khi chạy nó sẽ xóa luôn cả Stack Pointer luôn thì làm sao mà program của bạn có thể chạy đúng được.
              8051 defaut stack pointer là 07h, vậy bạn cần phải làm một trong hai việc sau:
              1/ Dời vị trí của Stack Pointer ra khỏi defaut address, thông thường người ta dùng upper 128 bytes của ram. Vậy câu lệnh đầu tiên của Main chương trình phải là: mov SP,#80h, sau đó bạn muốn làm gì tùy thích.

              2/ Tính toán lại start address của ram khi chạy đoạn code xóa ram. Giả sử bạn vẫn dùng defaut stack pointer address ở 07h thì nên cho stack khoảng memory từ bank 1 cho đến bank 4. Nghĩa là từ 07h cho đến 1fh.
              Vậy đoạn code trên sẽ trở thành:
              Code:
                      clr A				; Clear ACC
                      mov R0,#32			; Load pointer 
                      mov R1,#96			; Load counter 
              Clear:  mov @R0,A			; Clear Ram 
                      inc R0				;
                      djnz R1,Clear			;
              	ret				;

              Comment


              • #8
                Nên dùng tính năng counter của các bộ timer để thực hiện công việc này, như vậy sẽ nhẹ nhàng hơn. Công việc bây giờ chỉ còn là đọc từ các thanh ghi timer và cho hiển thị ra led.
                Ethernet-RS232, PIC Webserver, RFID Reader
                CallerID, Cảnh báo BTS, ...
                0988006696
                linhnc308@gmail.com
                http://linhnc308.blogspot.com

                Comment


                • #9
                  hình như lần trước đồng chí hỏi mình trên mạng thì phải ,nguyên nhân ko phải do mach nạp cậu nên xem lại mạch thiết kế và code ,ở cái phần reset ý
                  SHARE KHO PHIM LỚN

                  Comment


                  • #10
                    Tại sao các bạn không chạy thử chương trình nhỉ ?? Rất tiếc mình đã làm thử nhưng không ăn thua. Phải chăng mình đã làm sai ở đâu. Mong các bạn kiểm nghiệm thực tế ( Hoặc mô phỏng ) giúp mình !!!! (mình có gửi FILE đính kèm sơ đồ mạch và file .hex )
                    Last edited by DT3K48DHBK; 14-04-2006, 22:54.

                    Comment


                    • #11
                      Anh xem lại, hình như không phải reset thì phải. Vì nếu reset, nó sẽ chạy từ địa chỉ 0000 cơ mà? Vậy anh kiểm tra xem đã chập chân Reset xuống GND chưa? dùng đồng hồ đo lại, hoặc kiểm tra nút ấn tiếp xúc không?

                      Comment


                      • #12
                        Reset thì phải chập chân vô nguồn (Vcc) chứ sao lại chập xuống đất (GND)
                        Ôi trời !!!

                        Comment


                        • #13
                          Hihi.. em nhớ nhầm sang PIC, vì lâu lắm ko làm 89, anh check thử xem công tắc có vấn đề gì ko? anh đã gán biến = 0 chưa vậy

                          Comment


                          • #14
                            Toe rồi !! Cuối cùng mình cũng phải nộp cái sản phẩm cho thầy, Thầy mình cũng bó tay không biết tại sao. Không hiểu sao Reset mà vẫn lưu dữ liệu !!!!
                            Last edited by DT3K48DHBK; 16-04-2006, 16:02.

                            Comment


                            • #15
                              đâu sơ đồ mạch đâu sao ko thấy???????
                              cái file đính kèm có mỗi file asm với hex thôi
                              post lại sơ đồ đi tôi xem thử cái gì mà thầy cũng chịu
                              mà lớp DT3 thầy nào dạy thế?? thầy...cái gì Dũng ấy phải ko??

                              Comment

                              Về tác giả

                              Collapse

                              DT3K48DHBK Tìm hiểu thêm về DT3K48DHBK

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X