Thông báo

Collapse
No announcement yet.

Code Cho VĐK 8051 Bằng Assemnly Không Chậy.

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

  • #31
    Nguyên văn bởi huuthobka Xem bài viết
    các bạn giúp mình giải quyết vấn đề này cái:
    bài mình hỏi là viết code sáng lần lượt 32 led, mỗi lần chỉ có 1 lẽ sáng thôi. mọi lần mình viết theo cách khác, hôm nay lên mạng gặp code thấy ngắn hơn, nhưng khi mô phỏng thử thì nó chậy sai.

    các bạn kiểm tra xem code này sai cú pháp ở đâu mà nó chỉ nháy p0.0 phát rồi thôi luôn:
    Code:
                ORG 00H
                MOV P0,#0FFH
                MOV P1,#0FFH
                MOV P2,#0FFH
                MOV P3,#0FFH
                 CLR C
    LAP_LAI:    MOV A,P0
                RLC A
                MOV P0,A
                MOV A,P1
                RLC A
                MOV P1,A
                MOV A,P2
                RLC A
                MOV P2,A
                MOV A,P3
                RLC A
                MOV P3,A
                ACALL DELAY
                LJMP LAP_LAI            
    DELAY:      MOV R7,#250
    DELAY1:     MOV R6,#250
                DJNZ R6,$
                DJNZ R7,DELAY1
                RET
                END
    các bạn tải luôn phần cứng mình nối về để mô phỏng thử xem : TEST.7z
    Có lẽ tại phần cứng mô phỏng của đồng chí vẽ thiếu mạch reset cho VĐK chứ code trên thì đâu có sai cái gì...!

    Comment


    • #32
      Nguyên văn bởi Ck33spkt Xem bài viết
      Có lẽ tại phần cứng mô phỏng của đồng chí vẽ thiếu mạch reset cho VĐK chứ code trên thì đâu có sai cái gì...!
      mình test thử bài đơn giản sau thì thấy vấn đề nằm ở lệnh MOV A,P0.

      mình test thử code này:

      Code:
                  ORG 00H
      
                  MOV P1,#0FFH
      
                  CLR C
      
      HERE:          MOV A,P1
      
                  RLC A
      
                  MOV P1,A
      
                  ACALL DELAY
      
                  JMP HERE
      
      DELAY:      MOV R7,#250
      
      DELAY1:      MOV R6,#250
      
                  DJNZ R6,$
      
                  DJNZ R7,DELAY1
      
                  RET
      
                  END
      mình kiểm tra thử các mức logic của các chân port 1 bằng phần mềm Keil C thì thấy nó chậy đúng :

      nhưng khi nạp vào mô phỏng thử bằng Proteus thì nó lại nháy chân p1.0 đungs một phát rồi thôi ? thế mới lạ .

      nếu bỏ dong MOV A,P1 ở trong vòng lặp trên đi thì mô phỏng trong PROTEUS lại chậy đúng ??? rất lạ

      vấn đề là tại xao khi kiểm tra mức logic của các chân bằng Keil C thì chậy đúng ,mà kiểm proteus lại mô phỏng sai ?

      bạn thử nạp code của mình vào rồi mô phỏng với trường hợp có và không có lệnh MOV A,P1 xem nó chậy có đúng không ??? (mình đã ghỡ cả PROTEUS ra và cài lại nhưng vẫn vậy)

      Comment


      • #33
        Mình mô phỏng thì cũng bị như bạn. Thực sự cũng chưa hiểu lỗi tại đâu!
        Khi mình kiểm tra debug code thì hoạt động bình thường!
        Cứ như bị ma ám vậy !

        Comment


        • #34
          Nguyên văn bởi huuthobka Xem bài viết
          mình test thử bài đơn giản sau thì thấy vấn đề nằm ở lệnh MOV A,P0.

          mình test thử code này:

          Code:
                      ORG 00H
          
                      MOV P1,#0FFH
          
                      CLR C
          
          HERE:          MOV A,P1
          
                      RLC A
          
                      MOV P1,A
          
                      ACALL DELAY
          
                      JMP HERE
          
          DELAY:      MOV R7,#250
          
          DELAY1:      MOV R6,#250
          
                      DJNZ R6,$
          
                      DJNZ R7,DELAY1
          
                      RET
          
                      END
          mình kiểm tra thử các mức logic của các chân port 1 bằng phần mềm Keil C thì thấy nó chậy đúng :

          nhưng khi nạp vào mô phỏng thử bằng Proteus thì nó lại nháy chân p1.0 đungs một phát rồi thôi ? thế mới lạ .

          nếu bỏ dong MOV A,P1 ở trong vòng lặp trên đi thì mô phỏng trong PROTEUS lại chậy đúng ??? rất lạ

          vấn đề là tại xao khi kiểm tra mức logic của các chân bằng Keil C thì chậy đúng ,mà kiểm proteus lại mô phỏng sai ?

          bạn thử nạp code của mình vào rồi mô phỏng với trường hợp có và không có lệnh MOV A,P1 xem nó chậy có đúng không ??? (mình đã ghỡ cả PROTEUS ra và cài lại nhưng vẫn vậy)
          chạy bình thường ???

          Comment


          • #35
            Nguyên văn bởi chung1608 Xem bài viết
            chạy bình thường ???
            Bác chung1608 test thử hộ chủ topic code này đi. Em test bằng Proteus v7.8 nó cũng chỉ nháy mỗi p0.0 rồi đứng thôi.
            Code:
            ORG 00H
                        MOV P0,#0FFH
                        MOV P1,#0FFH
                        MOV P2,#0FFH
                        MOV P3,#0FFH
                        CLR C
            LAP_LAI:    MOV A,P0
                        RLC A
                        MOV P0,A
                        MOV A,P1
                        RLC A
                        MOV P1,A
                        MOV A,P2
                        RLC A
                        MOV P2,A
                        MOV A,P3
                        RLC A
                        MOV P3,A
                        ACALL DELAY
                        LJMP LAP_LAI
            DELAY:      MOV R7,#250
            DELAY1:     MOV R6,#250
                        DJNZ R6,$
                        DJNZ R7,DELAY1
                        RET
            END
            Last edited by Ck33spkt; 20-08-2012, 09:39.

            Comment


            • #36
              Nguyên văn bởi Ck33spkt Xem bài viết
              Bác chung1608 test thử hộ chủ topic code này đi. Em test bằng Proteus v7.8 nó cũng chỉ nháy mỗi p0.0 rồi đứng thôi.
              Code:
              ORG 00H
                          MOV P0,#0FFH
                          MOV P1,#0FFH
                          MOV P2,#0FFH
                          MOV P3,#0FFH
                          CLR C
              LAP_LAI:    MOV A,P0
                          RLC A
                          MOV P0,A
                          MOV A,P1
                          RLC A
                          MOV P1,A
                          MOV A,P2
                          RLC A
                          MOV P2,A
                          MOV A,P3
                          RLC A
                          MOV P3,A
                          ACALL DELAY
                          LJMP LAP_LAI
              DELAY:      MOV R7,#250
              DELAY1:     MOV R6,#250
                          DJNZ R6,$
                          DJNZ R7,DELAY1
                          RET
              END
              thêm cái trở thanh vào P0 thì nó chạy thôi. Ko có trở thanh thì các chân P0 chỉ có 2 trạng thái là low và high-Z. Cả hai trạng thái này thì VDK đọc về đều là giá trị 0

              Comment


              • #37
                Nguyên văn bởi chung1608 Xem bài viết
                thêm cái trở thanh vào P0 thì nó chạy thôi. Ko có trở thanh thì các chân P0 chỉ có 2 trạng thái là low và high-Z. Cả hai trạng thái này thì VDK đọc về đều là giá trị 0
                Vấn đề nữa là nếu trong code có P0, và ta kiểm tra trạng thái các chân bằng cách debug trong Keil C thì sẽ sai và ta cũng kiểm tra lại bằng cách mô phỏng trong Proteus nhưng trường hợp này là có điện trở kéo lên, thì kết quả đúng ?
                Em hỏi cái là làm cách nào để chọn điện trở thanh trong Proteus nhỉ ?

                Comment


                • #38
                  Nguyên văn bởi huuthobka Xem bài viết
                  Vấn đề nữa là nếu trong code có P0, và ta kiểm tra trạng thái các chân bằng cách debug trong Keil C thì sẽ sai và ta cũng kiểm tra lại bằng cách mô phỏng trong Proteus nhưng trường hợp này là có điện trở kéo lên, thì kết quả đúng ?
                  Em hỏi cái là làm cách nào để chọn điện trở thanh trong Proteus nhỉ ?
                  1) như đã nó ko có trở thanh thì chỉ có 2 trạng thái low và high-Z, keilC mô phỏng cũng chỉ đọc về giá trị 0 với 2 trạng thái này.
                  2) trở thanh r pack

                  Comment


                  • #39
                    Code mà bạn huuthobka đưa đều chạy tốt,không có vấn đề gì. Mình dùng Proteus 7.5SP3 chạy ngon lành.

                    Comment


                    • #40
                      Mình đang làm về mạch đồng hồ số sử dụng DS1307 hiển thị lên 7-seg, hiển thị và đọc thì ổn rồi, nhưng bài của mình gặp một lỗi là, khi mình nhấn nút để cài đặt cho ds1307 thì đồng hồ không update thời gian mình cài đặt vào:
                      đây là code và mạch mô phỏng của mình:

                      Code:
                      ;========================================================================
                      ; DINH NGHIA CAC BIEN SE DUNG 
                                    GIAY EQU 30H
                      			  PHUT EQU 31H
                      			  GIO EQU 32H
                      			  NGAY EQU 33H
                      			  THANG EQU 34H
                      			  NAM EQU 35H
                      			  TAM1 EQU 36H
                      			  ADDRESS EQU 37H
                      			  DEM EQU 38H
                      			  DATAS EQU 39H
                      			  MENU BIT P3.0
                      			  TANG BIT P3.1
                      			  CHON BIT P3.2
                      			  SDA BIT P2.7
                      			  SCL BIT P2.6
                      ;========================================================================
                      			  ORG 0000H
                      			  LJMP MAIN0              ; NHAY RA KHOI VECTOR NGAT
                      			  ORG 000BH         
                      			  LJMP TIME0              ; NHAY DEN DIA CHI NGAT
                      			  
                      ;========================================================================;
                      ;          BAT DAU CHUONG TRINH CHINH                                    ;
                      ;========================================================================;
                      			 
                      			  ORG 0030H
                      MAIN0:        MOV P3,#0FFH
                                    MOV P2,#00H
                                    MOV TMOD,#01H
                      			  MOV DEM,#00H
                                    MOV R3,#0
                      			  CLR P3.3
                                    MOV TH0,#HIGH(-50000)
                      			  MOV TL0,#LOW(-50000)
                      			  MOV DPTR,#MA_7_SEG
                      			  MOV P0,#0FFH
                      			  SETB EA
                      			  SETB ET0
                      			  CLR TF0
                      			  SETB TR0
                      MAIN1:        ACALL QUET_PHIM
                                    ACALL READ
                      			  JNB CHON,MAIN2                   ;  CHON HIEN THI NGAY THANG  HAY HIEN THI GIO
                      			  ACALL HIEN_THI_TG
                      			  JMP MAIN1
                      MAIN2:        ACALL HIEN_THI_NT
                                    LJMP MAIN1
                      
                      ;=================================================================;
                      ;             QUET PHIM DE CAI DAT CHO DONG HO                    ;
                      ;=================================================================;
                      QUET_PHIM:    PUSH 00
                                    JB MENU,THOAT_RA       ; KIEM TRA XEM CO MUON CAI DAT KHONG 
                      			  ACALL DELAY
                      			  JNB MENU,$              ; DOI NHA NUT
                      ;========================================
                      ;      THAO TAC VOI GIO                 ;
                      ;========================================
                      
                      SETUP_GIO:    JB TANG,HTHI_H
                                    JNB TANG,$
                      			  INC GIO
                      			  MOV A,GIO
                      			  CJNE A,#24H,HTHI_H
                      			  MOV GIO,#00H
                      			  
                      HTHI_H:       ACALL HIEN_THI_GIO
                      			  JB MENU,SETUP_GIO         ;  DOI CHINH PHUT 
                      			  JNB MENU,$                ; DOI NHA NUT
                      ;========================================
                      ;      THAO TAC VOI PHUT                ;
                      ;========================================
                      SETUP_PHUT:   JB TANG,HTHI_M
                                    INC PHUT
                                    JNB TANG,$
                      			  MOV A,PHUT
                      			  CJNE A,#60H,HTHI_M
                      			  MOV PHUT,#00H
                      			  
                      HTHI_M:       ACALL HIEN_THI_PHUT
                      			  JB MENU,SETUP_PHUT           ; DOI CHINH GIAY
                      			  JNB MENU,$                   ; DOI NHA NUT
                      ;========================================			  
                      ;       THAO TAC VOI GIAY               ; 
                      ;========================================
                      SETUP_GIAY:   JB TANG,HTHI_S
                                    INC GIAY
                                    JNB TANG,$
                      			  MOV A,GIAY
                      			  CJNE A,#60H,HTHI_S
                      			  MOV GIAY,#00H
                      			  
                      HTHI_S:       ACALL HIEN_THI_GIAY
                      			  JB MENU,SETUP_GIAY
                      			  ACALL DELAY
                      			  JNB MENU,$
                      
                      ;========================================
                      ;        GHI DU LIEU VAO DS1307         ;
                      ;========================================
                      			  MOV ADDRESS,#00H
                      			  MOV DATAS,GIAY
                      			  ACALL WRITER_DS1307
                      			  MOV ADDRESS,#01H
                      			  MOV DATAS,PHUT
                      			  ACALL WRITER_DS1307
                      			  MOV ADDRESS,#02H
                      			  MOV DATAS,GIO
                      			  ACALL WRITER_DS1307
                      			  MOV 	A,#15H		;GIA TRI KIEM TRA DS
                      	          ACALL  WRITER_DS1307
                      			  ACALL STOP_I2C
                      
                      ;========================================			  
                      THOAT_RA:     POP 00
                                    RET
                      
                      ;===================================================================;
                      ;         DOC NGAY THANG NAM                                        ;
                      ;===================================================================;
                      READ:         ACALL READ_GIAY
                                    ACALL READ_PHUT
                      			  ACALL READ_GIO
                      			  ACALL READ_NGAY
                      			  ACALL READ_THANG
                      			  ACALL READ_NAM
                      			  RET
                      
                      READ_GIAY:     MOV TAM1,#00H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV GIAY,TAM1
                      			   RET
                      ;========================================
                      READ_PHUT:     MOV TAM1,#01H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV PHUT,TAM1
                      			   RET
                      ;========================================
                      READ_GIO:      MOV TAM1,#02H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV GIO,TAM1
                      			   RET
                      ;========================================
                      READ_NGAY:     MOV TAM1,#04H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV NGAY,TAM1
                      			   RET
                      ;========================================
                      READ_THANG:    MOV TAM1,#05H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV THANG,TAM1
                      			   RET
                      ;========================================
                      READ_NAM:      MOV TAM1,#06H
                                     ACALL READ_DS1307
                      			   ACALL GIAI_MA
                      			   MOV NAM,TAM1
                      			   RET
                      			   
                      ;===================================================================;
                      ;            GIAI MA  TU BCD SANG HEX                               ;
                      ;===================================================================;
                      GIAI_MA:       PUSH 00
                      			   MOV R0,#01H
                                     MOV B,#16
                      			   DIV AB
                      			   MOV R0,B
                      			   MOV B,#10
                      			   MUL AB
                      			   ADD A,R0
                      			   MOV TAM1,A
                      			   POP 00
                      			   RET
                      
                      ;===================================================================;
                      ;         HIEN THI  THOI GIAN TRONG NGAY                            ;
                      ;===================================================================;
                      HIEN_THI_TG:   ACALL HIEN_THI_GIO
                                     ACALL HIEN_THI_PHUT
                      			   ACALL HIEN_THI_GIAY
                      			   RET
                      			   
                      HIEN_THI_GIO:  MOV A,GIO
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.0
                      			   ACALL DELAY
                      			   CLR P2.0
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.1
                      			   ACALL DELAY
                      			   CLR P2.1
                      			   RET
                      ;========================================
                      HIEN_THI_PHUT: MOV A,PHUT
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.2
                      			   ACALL DELAY
                      			   CLR P2.2
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.3
                      			   ACALL DELAY
                      			   CLR P2.3
                      			   RET
                      ;========================================
                      HIEN_THI_GIAY: MOV A,GIAY
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.4
                      			   ACALL DELAY
                      			   CLR P2.4
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.5
                      			   ACALL DELAY
                      			   CLR P2.5
                      			   RET
                      			   
                      ;===================================================================;
                      ;             HIEN THI THONG SO CUA NAM                             ;
                      ;===================================================================;
                      HIEN_THI_NT:  ACALL HIEN_THI_NGAY
                                    ACALL HIEN_THI_THANG
                      			  ACALL HIEN_THI_NAM
                                    RET
                      
                      HIEN_THI_NGAY: MOV A,NGAY
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.0
                      			   ACALL DELAY
                      			   CLR P2.0
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.1
                      			   ACALL DELAY
                      			   CLR P2.1
                      			   RET
                      ;========================================
                      HIEN_THI_THANG:  MOV A,THANG
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.2
                      			   ACALL DELAY
                      			   CLR P2.2
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.3
                      			   ACALL DELAY
                      			   CLR P2.3
                      			   RET
                      ;========================================
                      HIEN_THI_NAM:  MOV A,NAM
                                     MOV B,#10
                      			   DIV AB
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.4
                      			   ACALL DELAY
                      			   CLR P2.4
                      			   MOV A,B
                      			   MOVC A,@A+DPTR
                      			   MOV P0,A
                      			   SETB P2.5
                      			   ACALL DELAY
                      			   CLR P2.5
                      			   RET
                      			   
                      ;===================================================================;
                      ;            READ DS1307: DOC MOT BYTE TU DS1307                    ;
                      ;===================================================================;
                      READ_DS1307:  ACALL START_I2C
                                    MOV A,#0D0H                
                      			  ACALL WRITER_I2C           
                      			  
                      			  MOV A,TAM1
                      			  ACALL WRITER_I2C
                      			  ACALL STOP_I2C
                      			  
                      			  ACALL START_I2C
                      			  MOV A,#0D1H
                      			  ACALL WRITER_I2C
                      			  
                      			  ACALL READ_I2C
                      			  ACALL STOP_I2C
                      			  RET
                      
                      ;===================================================================;
                      ;             WRITER_DS1307 : VIET MOT BYTE VAO  DS1307             ;
                      ;===================================================================;
                      WRITER_DS1307: ACALL START_I2C
                                     MOV A,#0D0H
                      			   ACALL WRITER_I2C
                      			   
                      			   ACALL START_I2C
                      			   MOV A,ADDRESS
                      			   ACALL WRITER_I2C
                      			   
                      			   ACALL START_I2C
                      			   ACALL GIAI_MA_HEX
                      			   ACALL WRITER_I2C
                      			   ACALL STOP_I2C
                      			   RET
                      			   
                      ;========================================;
                      ;         CHUYEN TU HEXAN SANG BCD       ;
                      ;========================================;
                      GIAI_MA_HEX:  PUSH 00
                                    MOV A,DATAS
                                    MOV B,#10
                      			  DIV AB
                      			  MOV R0,B
                      			  MOV B,#16
                      			  MUL AB
                      			  ORL A,R0
                                    POP 00
                      			  RET
                      			  
                      ;===================================================================;
                      ;             WRITER I2C : CACH TRUYEN MOT BYTE VAO I2C             ;
                      ;===================================================================;
                      WRITER_I2C:   PUSH 00
                                    MOV R0,#8
                      			  CLR C
                      WRITER_I2C_1: RLC A
                      			  MOV SDA,C
                      			  SETB SCL
                      			  CLR SCL
                      			  DJNZ R0,WRITER_I2C_1
                      			  SETB SCL                    ; TAO BIT ACK
                      			  CLR SCL
                                    POP 00
                      			  RET
                      
                      ;===================================================================;
                      ;             READ I2C                                              ;
                      ;===================================================================;
                      READ_I2C:     PUSH 00
                                    CLR C
                                    MOV R0,#8
                      READ_I2C_1:   MOV C,SDA
                      			  SETB SCL
                      			  CLR SCL
                      			  RLC A
                      			  DJNZ R0,READ_I2C_1
                      			  SETB SCL                            ; TAO BIT ACK
                      			  CLR SCL
                      			  POP 00
                      			  RET
                      			  
                      ;===================================================================;
                      ;              START I2C                                            ;
                      ;===================================================================;
                      START_I2C:    SETB SCL 
                                    SETB SDA
                      			  CLR SDA
                      			  CLR SCL
                      			  RET
                      			  
                      ;===================================================================;
                      ;          STOP I2C                                                 ;
                      ;===================================================================;
                      STOP_I2C:     SETB SCL
                                    CLR SDA
                      			  SETB SDA
                      			  RET
                      ;===================================================================;
                      ;          TAO TRE THOI GIAN                                        ;
                      ;===================================================================;
                      DELAY:        PUSH 00
                                    PUSH 01
                                    MOV R0,#40
                      DELAY1: 	  MOV R1,#60
                      			  DJNZ R1,$
                      			  DJNZ R0,DELAY1
                      			  POP 01
                      			  POP 00
                      			  RET
                      			  
                      ;===================================================================;
                      ;          CHUONG TIRNH CON PHUC VU NGAT                            ;
                      ;===================================================================;
                      TIME0:        CLR C
                                    CLR TR0 
                                    MOV TH0,#HIGH(-50000)
                      			  MOV TL0,#LOW(-50000)
                      			  INC R3
                      			  CJNE R3,#6,KT_C
                      KT_C:         JC THOAT 
                      			  CPL P3.3
                      			  MOV R3,#0
                      THOAT:   	  SETB TR0
                                    RETI
                      			  
                      ;===================================================================;
                      MA_7_SEG:     DB   0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                                    END
                      [img]http://nq9.upanh.com/b3.s31.d2
                      /7c6178161d8b4a10992e1036921b4237_49328629.untitled .png[/img]


                      Click image for larger version

Name:	Untitled.jpg
Views:	1
Size:	141.4 KB
ID:	1367225

                      READ_TIME_DS1307_UPDATE.7z

                      các bạn xem hộ mình cái (mình nghĩ vấn đề là nằm ở hai khối mình bôi đỏ, vì thao tác chỉnh xủa thời gian trong DS1307 chỉ liên quan tới hai khối lệnh đó).
                      thank.
                      Last edited by huuthobka; 21-09-2012, 19:51.

                      Comment


                      • #41
                        Nguyên văn bởi huuthobka Xem bài viết
                        Mình đang làm về mạch đồng hồ số sử dụng DS1307 hiển thị lên 7-seg, hiển thị và đọc thì ổn rồi, nhưng bài của mình gặp một lỗi là, khi mình nhấn nút để cài đặt cho ds1307 thì đồng hồ không update thời gian mình cài đặt vào:
                        đây là code và mạch mô phỏng của mình:

                        Code:
                        ;========================================================================
                        ; DINH NGHIA CAC BIEN SE DUNG 
                                      GIAY EQU 30H
                        			  PHUT EQU 31H
                        			  GIO EQU 32H
                        			  NGAY EQU 33H
                        			  THANG EQU 34H
                        			  NAM EQU 35H
                        			  TAM1 EQU 36H
                        			  ADDRESS EQU 37H
                        			  DEM EQU 38H
                        			  DATAS EQU 39H
                        			  MENU BIT P3.0
                        			  TANG BIT P3.1
                        			  CHON BIT P3.2
                        			  SDA BIT P2.7
                        			  SCL BIT P2.6
                        ;========================================================================
                        			  ORG 0000H
                        			  LJMP MAIN0              ; NHAY RA KHOI VECTOR NGAT
                        			  ORG 000BH         
                        			  LJMP TIME0              ; NHAY DEN DIA CHI NGAT
                        			  
                        ;========================================================================;
                        ;          BAT DAU CHUONG TRINH CHINH                                    ;
                        ;========================================================================;
                        			 
                        			  ORG 0030H
                        MAIN0:        MOV P3,#0FFH
                                      MOV P2,#00H
                                      MOV TMOD,#01H
                        			  MOV DEM,#00H
                                      MOV R3,#0
                        			  CLR P3.3
                                      MOV TH0,#HIGH(-50000)
                        			  MOV TL0,#LOW(-50000)
                        			  MOV DPTR,#MA_7_SEG
                        			  MOV P0,#0FFH
                        			  SETB EA
                        			  SETB ET0
                        			  CLR TF0
                        			  SETB TR0
                        MAIN1:        ACALL QUET_PHIM
                                      ACALL READ
                        			  JNB CHON,MAIN2                   ;  CHON HIEN THI NGAY THANG  HAY HIEN THI GIO
                        			  ACALL HIEN_THI_TG
                        			  JMP MAIN1
                        MAIN2:        ACALL HIEN_THI_NT
                                      LJMP MAIN1
                        
                        ;=================================================================;
                        ;             QUET PHIM DE CAI DAT CHO DONG HO                    ;
                        ;=================================================================;
                        QUET_PHIM:    PUSH 00
                                      JB MENU,THOAT_RA       ; KIEM TRA XEM CO MUON CAI DAT KHONG 
                        			  ACALL DELAY
                        			  JNB MENU,$              ; DOI NHA NUT
                        ;========================================
                        ;      THAO TAC VOI GIO                 ;
                        ;========================================
                        
                        SETUP_GIO:    JB TANG,HTHI_H
                                      JNB TANG,$
                        			  INC GIO
                        			  MOV A,GIO
                        			  CJNE A,#24H,HTHI_H
                        			  MOV GIO,#00H
                        			  
                        HTHI_H:       ACALL HIEN_THI_GIO
                        			  JB MENU,SETUP_GIO         ;  DOI CHINH PHUT 
                        			  JNB MENU,$                ; DOI NHA NUT
                        ;========================================
                        ;      THAO TAC VOI PHUT                ;
                        ;========================================
                        SETUP_PHUT:   JB TANG,HTHI_M
                                      INC PHUT
                                      JNB TANG,$
                        			  MOV A,PHUT
                        			  CJNE A,#60H,HTHI_M
                        			  MOV PHUT,#00H
                        			  
                        HTHI_M:       ACALL HIEN_THI_PHUT
                        			  JB MENU,SETUP_PHUT           ; DOI CHINH GIAY
                        			  JNB MENU,$                   ; DOI NHA NUT
                        ;========================================			  
                        ;       THAO TAC VOI GIAY               ; 
                        ;========================================
                        SETUP_GIAY:   JB TANG,HTHI_S
                                      INC GIAY
                                      JNB TANG,$
                        			  MOV A,GIAY
                        			  CJNE A,#60H,HTHI_S
                        			  MOV GIAY,#00H
                        			  
                        HTHI_S:       ACALL HIEN_THI_GIAY
                        			  JB MENU,SETUP_GIAY
                        			  ACALL DELAY
                        			  JNB MENU,$
                        
                        ;========================================
                        ;        GHI DU LIEU VAO DS1307         ;
                        ;========================================
                        			  MOV ADDRESS,#00H
                        			  MOV DATAS,GIAY
                        			  ACALL WRITER_DS1307
                        			  MOV ADDRESS,#01H
                        			  MOV DATAS,PHUT
                        			  ACALL WRITER_DS1307
                        			  MOV ADDRESS,#02H
                        			  MOV DATAS,GIO
                        			  ACALL WRITER_DS1307
                        			  MOV 	A,#15H		;GIA TRI KIEM TRA DS
                        	          ACALL  WRITER_DS1307
                        			  ACALL STOP_I2C
                        
                        ;========================================			  
                        THOAT_RA:     POP 00
                                      RET
                        
                        ;===================================================================;
                        ;         DOC NGAY THANG NAM                                        ;
                        ;===================================================================;
                        READ:         ACALL READ_GIAY
                                      ACALL READ_PHUT
                        			  ACALL READ_GIO
                        			  ACALL READ_NGAY
                        			  ACALL READ_THANG
                        			  ACALL READ_NAM
                        			  RET
                        
                        READ_GIAY:     MOV TAM1,#00H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV GIAY,TAM1
                        			   RET
                        ;========================================
                        READ_PHUT:     MOV TAM1,#01H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV PHUT,TAM1
                        			   RET
                        ;========================================
                        READ_GIO:      MOV TAM1,#02H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV GIO,TAM1
                        			   RET
                        ;========================================
                        READ_NGAY:     MOV TAM1,#04H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV NGAY,TAM1
                        			   RET
                        ;========================================
                        READ_THANG:    MOV TAM1,#05H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV THANG,TAM1
                        			   RET
                        ;========================================
                        READ_NAM:      MOV TAM1,#06H
                                       ACALL READ_DS1307
                        			   ACALL GIAI_MA
                        			   MOV NAM,TAM1
                        			   RET
                        			   
                        ;===================================================================;
                        ;            GIAI MA  TU BCD SANG HEX                               ;
                        ;===================================================================;
                        GIAI_MA:       PUSH 00
                        			   MOV R0,#01H
                                       MOV B,#16
                        			   DIV AB
                        			   MOV R0,B
                        			   MOV B,#10
                        			   MUL AB
                        			   ADD A,R0
                        			   MOV TAM1,A
                        			   POP 00
                        			   RET
                        
                        ;===================================================================;
                        ;         HIEN THI  THOI GIAN TRONG NGAY                            ;
                        ;===================================================================;
                        HIEN_THI_TG:   ACALL HIEN_THI_GIO
                                       ACALL HIEN_THI_PHUT
                        			   ACALL HIEN_THI_GIAY
                        			   RET
                        			   
                        HIEN_THI_GIO:  MOV A,GIO
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.0
                        			   ACALL DELAY
                        			   CLR P2.0
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.1
                        			   ACALL DELAY
                        			   CLR P2.1
                        			   RET
                        ;========================================
                        HIEN_THI_PHUT: MOV A,PHUT
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.2
                        			   ACALL DELAY
                        			   CLR P2.2
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.3
                        			   ACALL DELAY
                        			   CLR P2.3
                        			   RET
                        ;========================================
                        HIEN_THI_GIAY: MOV A,GIAY
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.4
                        			   ACALL DELAY
                        			   CLR P2.4
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.5
                        			   ACALL DELAY
                        			   CLR P2.5
                        			   RET
                        			   
                        ;===================================================================;
                        ;             HIEN THI THONG SO CUA NAM                             ;
                        ;===================================================================;
                        HIEN_THI_NT:  ACALL HIEN_THI_NGAY
                                      ACALL HIEN_THI_THANG
                        			  ACALL HIEN_THI_NAM
                                      RET
                        
                        HIEN_THI_NGAY: MOV A,NGAY
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.0
                        			   ACALL DELAY
                        			   CLR P2.0
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.1
                        			   ACALL DELAY
                        			   CLR P2.1
                        			   RET
                        ;========================================
                        HIEN_THI_THANG:  MOV A,THANG
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.2
                        			   ACALL DELAY
                        			   CLR P2.2
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.3
                        			   ACALL DELAY
                        			   CLR P2.3
                        			   RET
                        ;========================================
                        HIEN_THI_NAM:  MOV A,NAM
                                       MOV B,#10
                        			   DIV AB
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.4
                        			   ACALL DELAY
                        			   CLR P2.4
                        			   MOV A,B
                        			   MOVC A,@A+DPTR
                        			   MOV P0,A
                        			   SETB P2.5
                        			   ACALL DELAY
                        			   CLR P2.5
                        			   RET
                        			   
                        ;===================================================================;
                        ;            READ DS1307: DOC MOT BYTE TU DS1307                    ;
                        ;===================================================================;
                        READ_DS1307:  ACALL START_I2C
                                      MOV A,#0D0H                
                        			  ACALL WRITER_I2C           
                        			  
                        			  MOV A,TAM1
                        			  ACALL WRITER_I2C
                        			  ACALL STOP_I2C
                        			  
                        			  ACALL START_I2C
                        			  MOV A,#0D1H
                        			  ACALL WRITER_I2C
                        			  
                        			  ACALL READ_I2C
                        			  ACALL STOP_I2C
                        			  RET
                        
                        ;===================================================================;
                        ;             WRITER_DS1307 : VIET MOT BYTE VAO  DS1307             ;
                        ;===================================================================;
                        WRITER_DS1307: ACALL START_I2C
                                       MOV A,#0D0H
                        			   ACALL WRITER_I2C
                        			   
                        			   ACALL START_I2C
                        			   MOV A,ADDRESS
                        			   ACALL WRITER_I2C
                        			   
                        			   ACALL START_I2C
                        			   ACALL GIAI_MA_HEX
                        			   ACALL WRITER_I2C
                        			   ACALL STOP_I2C
                        			   RET
                        			   
                        ;========================================;
                        ;         CHUYEN TU HEXAN SANG BCD       ;
                        ;========================================;
                        GIAI_MA_HEX:  PUSH 00
                                      MOV A,DATAS
                                      MOV B,#10
                        			  DIV AB
                        			  MOV R0,B
                        			  MOV B,#16
                        			  MUL AB
                        			  ORL A,R0
                                      POP 00
                        			  RET
                        			  
                        ;===================================================================;
                        ;             WRITER I2C : CACH TRUYEN MOT BYTE VAO I2C             ;
                        ;===================================================================;
                        WRITER_I2C:   PUSH 00
                                      MOV R0,#8
                        			  CLR C
                        WRITER_I2C_1: RLC A
                        			  MOV SDA,C
                        			  SETB SCL
                        			  CLR SCL
                        			  DJNZ R0,WRITER_I2C_1
                        			  SETB SCL                    ; TAO BIT ACK
                        			  CLR SCL
                                      POP 00
                        			  RET
                        
                        ;===================================================================;
                        ;             READ I2C                                              ;
                        ;===================================================================;
                        READ_I2C:     PUSH 00
                                      CLR C
                                      MOV R0,#8
                        READ_I2C_1:   MOV C,SDA
                        			  SETB SCL
                        			  CLR SCL
                        			  RLC A
                        			  DJNZ R0,READ_I2C_1
                        			  SETB SCL                            ; TAO BIT ACK
                        			  CLR SCL
                        			  POP 00
                        			  RET
                        			  
                        ;===================================================================;
                        ;              START I2C                                            ;
                        ;===================================================================;
                        START_I2C:    SETB SCL 
                                      SETB SDA
                        			  CLR SDA
                        			  CLR SCL
                        			  RET
                        			  
                        ;===================================================================;
                        ;          STOP I2C                                                 ;
                        ;===================================================================;
                        STOP_I2C:     SETB SCL
                                      CLR SDA
                        			  SETB SDA
                        			  RET
                        ;===================================================================;
                        ;          TAO TRE THOI GIAN                                        ;
                        ;===================================================================;
                        DELAY:        PUSH 00
                                      PUSH 01
                                      MOV R0,#40
                        DELAY1: 	  MOV R1,#60
                        			  DJNZ R1,$
                        			  DJNZ R0,DELAY1
                        			  POP 01
                        			  POP 00
                        			  RET
                        			  
                        ;===================================================================;
                        ;          CHUONG TIRNH CON PHUC VU NGAT                            ;
                        ;===================================================================;
                        TIME0:        CLR C
                                      CLR TR0 
                                      MOV TH0,#HIGH(-50000)
                        			  MOV TL0,#LOW(-50000)
                        			  INC R3
                        			  CJNE R3,#6,KT_C
                        KT_C:         JC THOAT 
                        			  CPL P3.3
                        			  MOV R3,#0
                        THOAT:   	  SETB TR0
                                      RETI
                        			  
                        ;===================================================================;
                        MA_7_SEG:     DB   0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                                      END
                        [img]http://nq9.upanh.com/b3.s31.d2
                        /7c6178161d8b4a10992e1036921b4237_49328629.untitled .png[/img]


                        [ATTACH=CONFIG]52153[/ATTACH]

                        READ_TIME_DS1307_UPDATE.7z

                        các bạn xem hộ mình cái (mình nghĩ vấn đề là nằm ở hai khối mình bôi đỏ, vì thao tác chỉnh xủa thời gian trong DS1307 chỉ liên quan tới hai khối lệnh đó).
                        thank.
                        _____________________________________________
                        sai chổ này ;
                        ;========================================
                        ; GHI DU LIEU VAO DS1307 ;
                        ;========================================
                        MOV ADDRESS,#00H
                        MOV DATAS,GIAY
                        ACALL WRITER_DS1307
                        MOV ADDRESS,#01H
                        MOV DATAS,PHUT
                        ACALL WRITER_DS1307
                        MOV ADDRESS,#02H
                        MOV DATAS,GIO
                        ACALL WRITER_DS1307
                        MOV A,#15H ;GIA TRI KIEM TRA DS
                        ACALL WRITER_DS1307
                        ACALL STOP_I2C
                        bạn sữa lại là nên ghi từng cái riêng
                        ví dụ ghi giơ;

                        MOV A,#0D0H
                        LCALL START_I2C
                        LCALL WRITER_I2C
                        MOV A,#02H
                        LCALL WRITER_I2C
                        MOV A,GIO
                        ACALL GIAI_MA_HEX;chổ nay bỏ MOV A,DATAS đi
                        LCALL WRITER_I2C
                        LCALL STOP_I2C


                        ghi phut và giay cũng nhu thế,

                        chúc thành công!

                        Comment


                        • #42
                          Nguyên văn bởi CONGMINHfs Xem bài viết
                          _____________________________________________
                          sai chổ này ;
                          ;========================================
                          ; GHI DU LIEU VAO DS1307 ;
                          ;========================================
                          MOV ADDRESS,#00H
                          MOV DATAS,GIAY
                          ACALL WRITER_DS1307
                          MOV ADDRESS,#01H
                          MOV DATAS,PHUT
                          ACALL WRITER_DS1307
                          MOV ADDRESS,#02H
                          MOV DATAS,GIO
                          ACALL WRITER_DS1307
                          MOV A,#15H ;GIA TRI KIEM TRA DS
                          ACALL WRITER_DS1307
                          ACALL STOP_I2C
                          bạn sữa lại là nên ghi từng cái riêng
                          ví dụ ghi giơ;

                          MOV A,#0D0H
                          LCALL START_I2C
                          LCALL WRITER_I2C
                          MOV A,#02H
                          LCALL WRITER_I2C
                          MOV A,GIO
                          ACALL GIAI_MA_HEX;chổ nay bỏ MOV A,DATAS đi
                          LCALL WRITER_I2C
                          LCALL STOP_I2C


                          ghi phut và giay cũng nhu thế,

                          chúc thành công!
                          OK thanhk nha, mình thay vào thì đã chậy ổn rồi,
                          nhưng bạn cho mình hỏi là đoạn code đó mình viết xao nó không ghi được vào DS1307 nhỉ ? theo mình thì dòng này của bạn:
                          Code:
                          MOV A,#0D0H
                          LCALL START_I2C
                          LCALL WRITER_I2C
                          MOV A,#02H
                          LCALL WRITER_I2C
                          MOV A,GIO
                          ACALL GIAI_MA_HEX;chổ nay bỏ MOV A,DATAS đi
                          LCALL WRITER_I2C
                          LCALL STOP_I2C
                          tương đường dòng này của mình
                          Code:
                          MOV ADDRESS,#02H
                          			  MOV DATAS,GIO
                          			  ACALL WRITER_DS1307
                          và code mình ghi vào DS1307 cũng theo thứ tự giây phút giờ ???

                          Không nhiểu có điều gì đó mình đang mắc phải ở đây, mong bạn chỉ giúp
                          thank

                          Comment


                          • #43
                            vấn đề ở đây:

                            WRITER_DS1307: ACALL START_I2C
                            MOV A,#0D0H
                            ACALL WRITER_I2C

                            ACALL START_I2C;dư bỏ đi
                            MOV A,ADDRESS
                            ACALL WRITER_I2C

                            ACALL START_I2C;dư bỏ đi
                            ACALL GIAI_MA_HEX ;sủa lại add data
                            ACALL WRITER_I2C
                            ACALL STOP_I2C

                            RET

                            ;=======================================

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X