Announcement

Collapse
No announcement yet.

Góc học tập vi xử lý- vi điều khiển

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #61
    Originally posted by 10520181 View Post
    Mấy bạn cho mình hỏi sao code part 2 chạy nó báo lỗi chỗ này vậy?



    sai lỗi cú pháp!
    bạn xem lại bạn dùng mode nào? 8bit hay 16bit. nếu 8bit thì nó sẽ báo lỗi.
    Lê Bá Nhựt UIT-CE05
    Phone: 0968-868-300
    Email: nhutlbuit@gmail.com

    Enthuse + Creative + Try => Success

    Comment


    • #62
      chỉnh mode chỗ nào vậy Nhựt?

      Comment


      • #63
        Originally posted by 10520181 View Post
        chỉnh mode chỗ nào vậy Nhựt?
        MOV 89H,#01H ; 89H is byte address of register TMOD.
        Lê Bá Nhựt UIT-CE05
        Phone: 0968-868-300
        Email: nhutlbuit@gmail.com

        Enthuse + Creative + Try => Success

        Comment


        • #64
          :doubt: làm vi điều khiển khi gán giá trị thì phải để ý xem thử đối tượng lưu trữ (thanh ghi, vùng nhớ) có đủ không... không phải compiler nào cũng báo error chỗ này đâu... mà những lỗi này thường rất khó phát hiện :doubt:... vì nó quá sơ đẳng :baffle:
          Một khẩu súng giữ hai trời Nam Bắc,
          Một dấu chân in màu đất hai miền.

          ------------------------------------------------------

          Comment


          • #65
            • Timer sử dụng chế độ 1: Chế độ hoạt động như bộ định thời 16 bits, khi Timer tràn phải tự load lại TL và TH.
            • Timer sử dụng chế độ 2: Chế độ hoạt động như bộ định thời 8 bits, khi Timer tràn, thanh ghi TL được nạp lại từ thanh ghi TH (giá trị của TH không thay đổi).

            bạn nào biết cho mình hỏi: khi Timer tràn phải tự load lại TL và TH.và thanh ghi TL được nạp lại từ thanh ghi TH (giá trị của TH không thay đổi) là như thế nào vậy?
            Lê Bá Nhựt UIT-CE05
            Phone: 0968-868-300
            Email: nhutlbuit@gmail.com

            Enthuse + Creative + Try => Success

            Comment


            • #66
              Originally posted by 10520397 View Post
              • Timer sử dụng chế độ 1: Chế độ hoạt động như bộ định thời 16 bits, khi Timer tràn phải tự load lại TL và TH.
              • Timer sử dụng chế độ 2: Chế độ hoạt động như bộ định thời 8 bits, khi Timer tràn, thanh ghi TL được nạp lại từ thanh ghi TH (giá trị của TH không thay đổi).

              bạn nào biết cho mình hỏi: khi Timer tràn phải tự load lại TL và TH.và thanh ghi TL được nạp lại từ thanh ghi TH (giá trị của TH không thay đổi) là như thế nào vậy?
              Nghĩa của tiếng Việt kinh khủng thật. Theo mình thì thanh ghi TLx sẽ đếm (chế độ định thời 8 bit) còn thanh ghi THx chứa giá trị bắt đầu của vòng định thời tiếp theo. Ví dụ: ban đâu bạn cho chạy từ 0 - 255 sau khi chạy hết thì bộ định thời sẽ chạy từ 100 đến 250. Thì ban đầu ta cho TLx = 0, THx = 100. Vòng đầu tiên TLx chạy từ 00h đến FFh, chạy phát nữa ==> tràn ==> set cờ tràn ==> nạp 100 từ THx vào TLx. Xong TLx lại bắt đầu đếm từ 100 đến 255. ....
              Có sai gì nhờ các anh và các bạn chỉ giáo.

              P/s: "Thanh ghi THx lưu trữ giá trị nạp lại" sách viết vậy!
              Last edited by 10520496; 23-10-2012, 23:37.
              TRẦN QUANG VINH
              ĐT: 01688200 sáu sáu sáu
              mail: vinhtq191@gmail(dot)com

              Comment


              • #67
                Cái này là dùng ở chế độ 2, theo mình biết thì ở chế độ này, ví dụ như ta gán cho TH=2AH, thì TL sẽ đếm từ giá trị 2AH đến 0FFH, và lúc này nó bị tràn, thì cờ tràn sẽ bật lên, sau đó sẽ quay lại để TR chạy tiếp, và nó lại bắt đầu từ giá trị 2AH
                No Problems

                Comment


                • #68
                  :beatbrick: các bạn nói gì nghe cao siêu vậy :beatbrick:

                  Timer có hai mode : auto-reload và manual reload . Manual thì các bạn biết rồi nó đếm về 0 thì phải nạp lại giá trị đếm cho nó. Còn auto thì nó sẽ tự nạp lại giá trị đếm... nhưng timer nó đếm giá trị => giá trị của timer sẽ thảy đổi => phải có 1 vùng nào đó dùng để lưu trữ giá trị để nạp lại. Đối với 8051, timer của nó có 16bit. Khi dùng ở mode auto reload thì nó hi sinh 8 bit cao để lưu giá trị nạp lại, chỉ đơn giản thế thôi

                  Ngoài ra 8051 có Timer 2 16 bit có thể auto-reload 16 bit. Khi đó nó có 1 thanh ghi riêng để lưu giá trị reload.

                  Còn bản chất timer là cái gì... thì các bạn học Hệ thống số sẽ rõ :sad:
                  Một khẩu súng giữ hai trời Nam Bắc,
                  Một dấu chân in màu đất hai miền.

                  ------------------------------------------------------

                  Comment


                  • #69
                    Originally posted by 08520229 View Post
                    :beatbrick: các bạn nói gì nghe cao siêu vậy :beatbrick:

                    Timer có hai mode : auto-reload và manual reload . Manual thì các bạn biết rồi nó đếm về 0 thì phải nạp lại giá trị đếm cho nó. Còn auto thì nó sẽ tự nạp lại giá trị đếm... nhưng timer nó đếm giá trị => giá trị của timer sẽ thảy đổi => phải có 1 vùng nào đó dùng để lưu trữ giá trị để nạp lại. Đối với 8051, timer của nó có 16bit. Khi dùng ở mode auto reload thì nó hi sinh 8 bit cao để lưu giá trị nạp lại, chỉ đơn giản thế thôi

                    Ngoài ra 8051 có Timer 2 16 bit có thể auto-reload 16 bit. Khi đó nó có 1 thanh ghi riêng để lưu giá trị reload.

                    Còn bản chất timer là cái gì... thì các bạn học Hệ thống số sẽ rõ :sad:
                    A cho e hỏi giá trị nạp vào thanh ghi TLx và THx (đối với 16bit) có y nghĩa gì vậy.

                    Comment


                    • #70
                      Originally posted by 10520382 View Post
                      A cho e hỏi giá trị nạp vào thanh ghi TLx và THx (đối với 16bit) có y nghĩa gì vậy.
                      Vậy phải coi bạn nạp vào trong trường hợp nào :shy:. TLx và THx là 1 thanh ghi chứ không phải 2 :sogood:
                      Last edited by 08520229; 24-10-2012, 00:40.
                      Một khẩu súng giữ hai trời Nam Bắc,
                      Một dấu chân in màu đất hai miền.

                      ------------------------------------------------------

                      Comment


                      • #71
                        TH1:
                        DELAY1S: MOV R7,#20
                        DL1S: ACALL DELAY50MS
                        DJNZ R7,DL1S
                        RET

                        TH2:
                        MOV R7,#20
                        DELAY1S:
                        CALL DELAY50MS
                        DJNZ R7,DELAY1S
                        RET

                        bạn nào biết cho mình hỏi 2 TH này khác nhau như thế nào vậy?
                        theo mình thấy thì nó không khác nhau,nhưng khi chạy thì lại....................#######
                        Last edited by 10520397; 24-10-2012, 01:25.
                        Lê Bá Nhựt UIT-CE05
                        Phone: 0968-868-300
                        Email: nhutlbuit@gmail.com

                        Enthuse + Creative + Try => Success

                        Comment


                        • #72
                          Originally posted by 08520229 View Post
                          Vậy phải coi bạn nạp vào trong trường hợp nào :shy:. TLx và THx là 1 thanh ghi chứ không phải 2 :sogood:
                          Trường hợp tạo delay đó anh. Ví dụ mình muốn tạo timer 1 khoảng thời gian nào đó, ta thường nạp vào THx và TLx một giá trị nào đó, giá trị đó có ý nghĩa như thế nào trong quá trình thực thi vậy a.

                          Comment


                          • #73
                            Originally posted by 10520397 View Post
                            TH1:
                            DELAY1S: MOV R7,#20
                            DL1S: ACALL DELAY50MS
                            DJNZ R7,DL1S
                            RET

                            TH2:
                            MOV R7,#20
                            DELAY1S:
                            CALL DELAY50MS
                            DJNZ R7,DELAY1S
                            RET

                            bạn nào biết cho mình hỏi 2 TH này khác nhau như thế nào vậy?
                            theo mình thấy thì nó không khác nhau,nhưng khi chạy thì lại....................#######
                            Không biết bạn gọi hàm delay như thế nào?
                            Nếu bạn gọi: ACALL TH1 và ACALL TH2 ==> nó giống nhau đó.
                            Còn nếu bạn gọi: ACALL DELAY1S và ACALL DELAY1S ==> nó khác nhau rồi. (vì ở TH2 chưa nạp 20 cho R7 mà).
                            TRẦN QUANG VINH
                            ĐT: 01688200 sáu sáu sáu
                            mail: vinhtq191@gmail(dot)com

                            Comment


                            • #74
                              Originally posted by 10520496 View Post
                              Không biết bạn gọi hàm delay như thế nào?
                              Nếu bạn gọi: ACALL TH1 và ACALL TH2 ==> nó giống nhau đó.
                              Còn nếu bạn gọi: ACALL DELAY1S và ACALL DELAY1S ==> nó khác nhau rồi. (vì ở TH2 chưa nạp 20 cho R7 mà).
                              ORG 0000H

                              AGAIN:
                              CPL P1.4
                              ACALL DELAY1S
                              JMP AGAIN
                              MOV R7,#20[/COLOR]
                              MOV TMOD,#1H
                              ;----------------------------------------------------------------------------------------------------------
                              ;----------------------------------------- DELAY50MS-----------------------------------------------
                              DELAY50MS: MOV TH0,#3CH
                              MOV TL0,#0AFH
                              SETB TR0
                              JNB TF0,$
                              CLR TR0
                              CLR TF0
                              RET
                              ;------------------------------------------------------------------------------------------------------------
                              ;------------------------------------------DELAY 1S---------------------------------------------------
                              DELAY01S:
                              ACALL DELAY50MS
                              DJNZ R7,DELAY1S
                              RET

                              bạn chạy thử cái này rồi so sanh nè.
                              ORG 0000H

                              AGAIN:
                              CPL P1.4
                              ACALL DELAY1S
                              JMP AGAIN
                              MOV TMOD,#1H
                              ;----------------------------------------------------------------------------------------------------------
                              ;----------------------------------------- DELAY50MS-----------------------------------------------
                              DELAY50MS: MOV TH0,#3CH
                              MOV TL0,#0AFH
                              SETB TR0
                              JNB TF0,$
                              CLR TR0
                              CLR TF0
                              RET
                              ;------------------------------------------------------------------------------------------------------------
                              ;------------------------------------------DELAY 1S---------------------------------------------------
                              [COLOR="#FF0000"]DELAY1S:
                              MOV R7,#20
                              DL1S: ACALL DELAY50MS
                              DJNZ R7,DL1S; như thế này nó sẽ gọi DELAY50MS 20lần,không ảnh hưởng đến mov R7,#20 thì kết quả sao lại khác ở trên??
                              RET
                              Last edited by 10520397; 24-10-2012, 09:42.
                              Lê Bá Nhựt UIT-CE05
                              Phone: 0968-868-300
                              Email: nhutlbuit@gmail.com

                              Enthuse + Creative + Try => Success

                              Comment


                              • #75
                                Ở trường hợp đầu R7 chưa được nạp 20 vào và nhảy phát đến hàm DELAY1S luôn (đến lúc này thì R7 vẫn bằng 0) nên nó sẽ chạy nhanh hơn trường hợp sau đúng không?
                                Bạn sửa lại như thế này thử:

                                AGAIN:
                                CPL P1.4
                                MOV R7,#20
                                ACALL DELAY1S
                                JMP AGAIN
                                ;MOV R7,#20
                                MOV TMOD,#1H
                                TRẦN QUANG VINH
                                ĐT: 01688200 sáu sáu sáu
                                mail: vinhtq191@gmail(dot)com

                                Comment

                                LHQC

                                Collapse
                                Working...
                                X