Thông báo

Collapse
No announcement yet.

Hỏi về tập lệnh trong PSOC

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

  • Hỏi về tập lệnh trong PSOC

    Chào các bác ! Xin các bác chỉ giùm em cái?
    Trong 89C51 chúng ta thường dùng lệnh DIV để đưa một số thập phân ra led7 theo đoạn mã như ví dụ :
    mov A,#99
    mov B,#10
    div AB
    Còn đối với PSOC ,tập lênh của nó không có lệnh DIV .Vậy thì phải làm thế nào để đưa một số thập phân ra led7 trong PSOC

  • #2
    Bạn nên dùng C để lập trình cho PSoC để hợp thời nhất, dùng ASM cực lắm, nhất là đối với PSoC, nửa kín nửa hở
    -------------------

    Comment


    • #3
      Sao lại nửa kín nửa hở? Muốn học PSoC tốt nhất nên viết ASM trước chứ, bụp một cái mà phang C vào lại toàn dùng API của nó thì chả biết cái chó gì đâu, con này có đến cả ngàn thanh ghi ấy chứ, viết ASM cho nó thì hiểu rõ nhất. Ông mà chỉ viết C thì có bao giờ ông biết nó có mấy bank không? Ở chỗ tôi có mấy thằng cũng học PSoC nhưng cuối cùng chỉ biết dùng API cho mấy khối số của nó thôi.
      Kha kha, lên thành viên chính thức rồi à, phải ăn mừng thôi.

      Comment


      • #4
        He he... bác này vui tính thật, vậy người lập trình C cho VDK họ ko hiêu về cấu trúc a?
        Nếu dùng C, lười thì cứ tương hàm API của nó, nếu muốn hiểu cặn kẽ thì tự viết ra hàm và tương tác với thanh ghi.
        Vậy bác viết ASM thì có hiểu thấu đáo nó hoạt động tường tận như 8951 ko? nó chạy như thế nào? boot và một đám khởi tạo = hình ảnh nối nhằng nhịt... em lắng nghe đây.
        -------------------

        Comment


        • #5
          Ờ cái này thì hiểu làm deck gì cho nó nhức đầu, có ghi trong PSoC TRM đấy. Nhưng theo tôi thì newbie thì nên chơi ASM thôi, sau chuyển C thì càng lợi. Nhưng thế học C có biết bank của nó không bác? Mà thôi, anh em cãi nhau vì cái này làm deck gì, vô bổ, đang phải làm bài tập lớn 89C52 đây, chán vật.

          Comment


          • #6
            Chào các bạn tôi cũng lập trình nhiều với Psoc rồi. Bắt đầu tôi cũng lập trình bằng C
            Còn khi nào vào hàm ngắt thì mới xử dụng đến ASM. Các bạn nói lập trình với Asm thì mới hiểu thấu đáo về nguyên lý hoạt động của các con vi điều khiển nói chung và chip Psoc nói riêng thì rất đúng. Tuy nhiên tôi thấy các việc thực hiện phép nhân, hoặc chia trong Psoc là rất khó khăn. Chính vì vậy là kết hợp cả ASM và C.
            Các bạn thử tham khảo application note của Cypress dưới đây. Hy vọng sẽ
            giúp ích được các bạn.

            Comment


            • #7
              Cám ơn các bác đã góp ý kiến! Tuy biết viết bằng C dễ hơn ASM.Nhưng nới thiệt là em hiểu rất ít về ngôn ngữ C nên không dám dùng.Vả lại em đọc trong Asembly language nó có nói đền lệnh DIV nhưng ở dạng Expression ký hiệu "/" ,nhưng nó không chỉ rõ cách dùng
              Vì vậy bác nào đã dùng lệnh này rùi hay có cách hiển thị số thập phân lên LED 7 thì chỉ giúp cho em học hỏi
              Sẵn đây cho em hỏi bác nào có keycode của C dùng trong PSoC thi cho em xin

              Comment


              • #8
                Bác ducthangs cho em hỏi .
                Em đã đọc kỹ cái file bác gửi rồi và cũng đã làm thử với phép cộng, trừ, nhân thì không sao nhưng với phép chia em chưa hiểu lắm. bác cho em hỏi phép chia "/" lấy thương số bỏ đi phần dư thì thương số của nó sẽ được lưu vào thanh ghi X phải không ? đối với phép chia lấy dư "%" thì em thử rồi kết quả ra đúng, giá trị của nó được nhớ trong thanh ghi A.

                Comment


                • #9
                  Ây , nói chung mới lập trình cho PSoC, thì xài cái gì cũng được cả C hay ASM cũng thế thôi. Chỉ có điều dùng C thì nhanh hơn à, nhưng mà không hiểu lắm về cấu trúc bên trong. Nói vậy thôi, nhưng muốn làm với con này đàng nào chẳng phải học tất cả các khối , các thanh ghi của nó . Bác nào xài C mà không biết các thabnh ghi thì cũng chẳng làm được gì cả (đơn giản nhwu việc xuất LED cũng khó rồi). Trong khi chỉ dùng các hàm API , chỉ xử lý được mấy công việc đặc thù từng khối thôi, còn làm chung thì cũng chiu!. Tui đang xài C nhưng vấn đề thanh ghi cũng không được bỏ qua à. Xử dụng mấy lệnh truy cập trực tiếp thanh ghi tốc độ đáp ứng nhanh hơn nhiêu ha.
                  Còn cái vụ xuất ra LED thì bác coi mấy cái thanh ghi Port ây, trong 8051 có máy lệnh gán thanh ghi sử dụng tên , thì đây cũng vậy thôi, mỗi port đều có tên cả. Tên của nó trong mấy cái file thư viện có cả đống các bác.Trong file m8c.h có nhiều thanh ghi dùng chung lắm à,
                  Còn có cả mấy cái macro nữa , không biét thì cũng khó lắm! :
                  Havefun
                  >:D< >:D<

                  Comment


                  • #10
                    Chào các bác!
                    Em có viết một đoạn mã quét led7 nhưng khổ nỗi nó xuất lẹ quá chỉ thấy đươc hàng chục. Các bác coi thử rồi góp ý dùm cái
                    push A
                    mov A,[leddv]; leddv: mã led hàng đơn vị
                    mov reg[PRT2DR],A
                    mov reg[PRT0DR],7fh; port0.7=0
                    call delay
                    mov reg[PRT0DR],ffh; port0.7=1
                    pop A
                    mov A,[ledch];mã led hàng chuc6
                    mov reg[PRT2DR],A
                    mov reg[PRT0DR],bfh
                    call delay
                    mov reg[PRT0DR],ffh
                    ret
                    delay: mov [t3],10 ;thời gian delay10us
                    loop: dec [t3]
                    jnz loop
                    ret

                    Comment


                    • #11
                      bạn nào có cái tập lệnh của Psoc dung ám ko share cho mình với
                      I will never fall in love again !!

                      Comment


                      • #12
                        Nguyên văn bởi Tino
                        Chào các bác!
                        Em có viết một đoạn mã quét led7 nhưng khổ nỗi nó xuất lẹ quá chỉ thấy đươc hàng chục. Các bác coi thử rồi góp ý dùm cái
                        push A
                        mov A,[leddv]; leddv: mã led hàng đơn vị
                        mov reg[PRT2DR],A
                        mov reg[PRT0DR],7fh; port0.7=0
                        call delay
                        mov reg[PRT0DR],ffh; port0.7=1
                        pop A
                        mov A,[ledch];mã led hàng chuc6
                        mov reg[PRT2DR],A
                        mov reg[PRT0DR],bfh
                        call delay
                        mov reg[PRT0DR],ffh
                        ret
                        delay: mov [t3],10 ;thời gian delay10us
                        loop: dec [t3]
                        jnz loop
                        ret
                        Bạn cho lệnh push rồi pop chẳng để làm gì cả, vì sau pop bạn lại mov giá trị mới và thanh ghi A --> xóa mất A rồi còn gì nữa.

                        Phần mềm này của bạn không sai. Chỉ có điều hàng đơn vị quét trong 10us là quá ngắn, kô kịp nhìn thì sang đến hàng chục rồi. Mà sau hàng chục lại kô có lệnh nào thay đổi nên PORT2 và PORT0 vẫn giữ nguyên giá trị --> vì thế mà bạn mới nhìn thấy hàng chục. Không tin bạn thử đổi ngược lại thì sẽ thấy hàng đơn vị mà kô thấy hàng chục. (Đổi ngược lại nghĩa là cho quét hàng chục trước và quét hàng đơn vị sau.

                        Tôi chưa viết ASM cho PSoC bao giờ, nhưng tôi có thể sửa lại chương trình cho bạn để có thể hiển thị LED 7 thanh.

                        start_scan:
                        mov A,[leddv]; leddv: mã led hàng đơn vị
                        mov reg[PRT2DR],A
                        mov reg[PRT0DR],7fh; port0.7=0
                        call delay
                        call delay
                        call delay
                        call delay
                        mov reg[PRT0DR],ffh; port0.7=1
                        mov A,[ledch];mã led hàng chuc6
                        mov reg[PRT2DR],A
                        mov reg[PRT0DR],bfh
                        call delay
                        call delay
                        call delay
                        call delay
                        mov reg[PRT0DR],ffh
                        jmp start_scan ; vòng lặp vô hạn
                        delay:
                        mov [0xEA],250 ;thời gian delay 250 us
                        loop: dec [0xEA]
                        jnz loop
                        ret

                        Bạn thử chạy xem có okie kô?

                        lời khuyên cuối: nên cố mà học C đi, hiểu ASM là được rồi, đừng phát triển ứng dụng trên ASM ---> phức tạp, khó nâng cấp, khó quản lý, khó kế thừa, tóm lại là lợi bất cập hại.

                        Comment


                        • #13
                          Cám ơn bác AFH nhiều lắm

                          Comment


                          • #14
                            Nguyên văn bởi namcan
                            bạn nào có cái tập lệnh của Psoc dung ám ko share cho mình với
                            KHông biết bạn dung bản nào .Mình đang thử với V4.2
                            Trong Psoc desiger có mà bạn tìm trong phần Help / documentation
                            Never say never, think in solutions, not in trouble......
                            Email:
                            Cell phone:0904498179

                            Comment


                            • #15
                              Bạn dùng cả một port để điều khiển 1 LED à
                              Theo tui biết thì nên dùng một cái table trong ROM sau đó truy xuất đến cái ni, gọn nhẹ và khả trình :-)
                              Ở đời khác thường, làm sự nghiệp phi thường...Cùng thì tự tốt lấy ta, đạt thì đem hạnh phúc cho thiên hạ.---(Gia Cát Khổng Minh)

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X