Thông báo

Collapse
No announcement yet.

AVR studio và atmega8535...

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

  • AVR studio và atmega8535...

    Mình đang bắt đầu học lập trình AVR với con Atmega8535L, sử dụng chương trình nạp PonyPro 2000 nạp qua cổng nối tiếp. ASM viết bằng AVR Studio 4, không hiểu sao mình không thể thực hiện được lệnh gọi chương trình con rcall. AVR studio biên dịch không có lỗi nhưng khi nạp vào VDK thì cứ thực hiện đến lệnh này là chương trình không chạy tiếp, các lệnh khác vẫn thực hiện bình thường.
    khi run bằng AVR Studio thì thấy báo lỗi tại lệnh rcall.
    hình như là invalid opcode thì phải. Mong các cao thủ chỉ giúp!
    CODE:

    .cseg
    .org 0
    rjmp RESET
    rjmp RESET
    rjmp RESET

    RESET:

    ldi r16,0xff
    out DDRB,r16

    loop:
    ldi r16,0
    out PORTB,r16
    rcall delay
    ldi r16,0xff
    out PORTB,r16
    rcall delay
    rjmp loop

    delay:
    ldi r17,#200
    d1:
    ldi r18,#200
    d2:
    dec r18
    cpi r18,0
    brne d2
    dec r17
    cpi r17,0
    brne r17,d1
    ret

    Mạch nạp:
    http://www.sunrom.com/p-pi/c-1_24/pn...-programmer.st
    Last edited by sphinx; 07-11-2005, 16:27.
    PNLab
    Mạch nạp/debug ULink2, Jlink ARM USB
    Mạch nạp AVR, PIC, 8051, MSP430 USB
    Mạch phát triển STM32, ARM9, ARM11
    more...www.pnlabvn.com

  • #2
    Sao mà lắm "rjmp RESET" thế??? không biết các hạ định dùng chiêu thức gì đây?

    Các hạ bị tẩu hỏa nhập ma là do chưa khởi tạo con trỏ ngăn xếp. Dùng chương trình con mà không khởi tạo cho ngăn xếp thì ... toi! Với 8051 các hạ có thể chạy tốt chương trình trên vì ngăn xếp có giá trị default là 07h (nằm trong RAM nội và hoàn toàn là giá trị sử dụng được). Với AVR, giá trị default (giá trị ngay sau reset) là 0x0000. Nhắc lại với AVR, không gian địa chỉ dữ liệu gồm có Register File (R0..31), các thanh ghi I/O và cuối cùng là SRAM. Khi ánh xạ vào không gian địa chỉ dữ liệu, SRAM phải nằm từ địa chỉ 0x0060h trở đi. Ngăn xếp lại cư trú trong SRAM, do đó phải nằm từ địa chỉ lớn hơn 0x0060h (vì hoạt động của ngăn xếp khi cất vào thì giảm địa chỉ). Giá trị default bằng 0x0000h rõ ràng là không hợp lệ vì nó trỏ vào địa chỉ dành cho Register File, không phải là vùng SRAM. Khi dịch không báo lỗi vì không có lỗi cú pháp ở đây, nhưng khi Run thì ngăn xếp không được khởi tạo đúng nên báo lỗi, không chạy được lệnh rcall!!!!! Đó là nguyên nhân khiến các hạ bị tẩu hỏa nhập ma.
    Với AVR, do hoạt động của ngăn xếp theo hướng giảm dần địa chỉ khi cất vào nên người ta thường khởi tạo cho SP = địa chỉ cuối cùng của SRAM. Cụ thể trong AVRStudio thì khởi tạo ngăn xếp như sau:
    ...
    ldi r16,high(RAMEND)
    out SPH,r16
    ldi r16,low(RAMEND)
    out SPL,r16
    ...
    RAMEND là hằng số, chính là địa chỉ cuối cùng của SRAM tương ứng với từng loại AVR. Cái này đã được khai báo và định nghĩa trong file *.inc của loại AVR đó rồi.
    Giang hồ hiểm ác, bảo trọng.

    Comment


    • #3
      Tại hạ đã hiểu, đã hiểu!
      Mà kể cũng quái lạ thật, tại sao trong 8051 stack tăng dần, mà trong AVR lại giảm dần nhỉ?
      À mà có phải 32 thanh ghi R được nối trực tiếp với ALU không?
      PNLab
      Mạch nạp/debug ULink2, Jlink ARM USB
      Mạch nạp AVR, PIC, 8051, MSP430 USB
      Mạch phát triển STM32, ARM9, ARM11
      more...www.pnlabvn.com

      Comment


      • #4
        Mà kể cũng quái lạ thật, tại sao trong 8051 stack tăng dần, mà trong AVR lại giảm dần nhỉ?
        Mỗi loại vi điều khiển có một cơ chế stack riêng, cái quan trọng là chúng đều hoạt động theo nguyên lý vào sau ra trước (LIFO - Last In First Out).
        À mà có phải 32 thanh ghi R được nối trực tiếp với ALU không?
        Đúng thế.

        Comment


        • #5
          chào anh .
          anh có thể giúp em với.
          trong coodvisionavr có hàm dựng sẵn về chuẩn giao tiếp spi mà em ko biết
          sài.em giao tiếp spi atmega16 với adc theo chuẩn spi.
          anh giúp em với.
          chi em cách gọi hàm.hay ham chuẩn của no cung được
          cảm ơn anh nhiều

          Comment


          • #6
            Trong code vision có hỗ trợ thư viện cho giao diện SPI.
            Cách tra tài liệu tham khảo như sau:
            CodeVisionAVR --> Help --> Help Topics --> CodeVisionAVR C Compiler Library Functions --> SPI function
            Trong đó mô tả hàm sử dụng cho SPI có dạng:
            unsigned char spi(unsigned char data)

            Như chỉ dẫn trong help, cách sử dụng như sau:
            #include <spi.h>
            ...
            unsigned char temp,data;
            ...
            temp = spi(data);
            ...

            Giải thích:
            Khi thực hiện giao tiếp SPI, về bản chất có sự hoán đổi byte dữ liệu giữa master và slave. Đối với AVR, dữ liệu truyền đi là biến data còn dữ liệu nhận được sau khi kết thúc quá trình truyền là temp.
            Trong một số trường hợp, người ta chỉ quan tâm đến dữ liệu truyền đi (data) mà không quan tâm nhận được cái gì trong temp. Việc gán temp = spi(data) chỉ là để đảm bảo thực hiện đúng cách gọi 1 hàm có trả về giá trị.
            Trong một số trường hợp khác người ta lại chỉ quan tâm đến giá trị nhận được (temp) mà không cần quan tâm đến giá trị truyền đi (data), lúc này truyền đi một giá trị bất kỳ chỉ để khởi tạo 1 phiên giao tiếp SPI, tạo ra clock đồng bộ phục vụ việc trao đổi dữ liệu.
            Và cuối cùng, cũng có những trường hợp người ta quan tâm đến cả dữ liệu truyền đi (data) và dữ liệu nhận về (temp).
            Trong bài toán của bạn, mega16 sẽ đóng vai trò là master (bạn phải cấu hình cho SPI của mega16 ở master mode), còn ADC sẽ đóng vai trò là slave.
            Thân mến,
            blackmoon.

            Comment


            • #7
              Nguyên văn bởi thanhtung86 Xem bài viết
              chào anh .
              anh có thể giúp em với.
              trong coodvisionavr có hàm dựng sẵn về chuẩn giao tiếp spi mà em ko biết
              sài.em giao tiếp spi atmega16 với adc theo chuẩn spi.
              anh giúp em với.
              chi em cách gọi hàm.hay ham chuẩn của no cung được
              cảm ơn anh nhiều
              Bạn có thể tham khảo thêm trên trang web này về việc sử dụng chuẩn giao tiếp SPI của AVR.
              http://www.openavr.org/AVR_SPI_C_Snippets

              Comment


              • #8
                Mình cũng đang xài AVRStuDio mình thấy cũng được nhưng không xài được lệnh call và jmp.....Hình như mình xai call và jmp thì bộ nhớ tăng thêm đi thì phải?

                Em còn gà lắm !

                Comment


                • #9
                  Nguyên văn bởi HiMas88 Xem bài viết
                  Mình cũng đang xài AVRStuDio mình thấy cũng được nhưng không xài được lệnh call và jmp.....Hình như mình xai call và jmp thì bộ nhớ tăng thêm đi thì phải?

                  Em còn gà lắm !
                  thông thường mỗi AVR Atmel đều cung cấp datasheet
                  bạn nên đọc kỹ phần Instruction Set Summary
                  ví dụ trong Mega 8515 không có lệnh jmp và call mà cứ lập trình thì khi biên dịch nó báo lõi là phải rồi

                  chúc các bạn thành công
                  Điện thoại:
                  email:

                  Comment


                  • #10
                    Sao mà lắm "rjmp RESET" thế??? không biết các hạ định dùng chiêu thức gì đây?

                    Các hạ bị tẩu hỏa nhập ma là do chưa khởi tạo con trỏ ngăn xếp. Dùng chương trình con mà không khởi tạo cho ngăn xếp thì ... toi! Với 8051 các hạ có thể chạy tốt chương trình trên vì ngăn xếp có giá trị default là 07h (nằm trong RAM nội và hoàn toàn là giá trị sử dụng được). Với AVR, giá trị default (giá trị ngay sau reset) là 0x0000. Nhắc lại với AVR, không gian địa chỉ dữ liệu gồm có Register File (R0..31), các thanh ghi I/O và cuối cùng là SRAM. Khi ánh xạ vào không gian địa chỉ dữ liệu, SRAM phải nằm từ địa chỉ 0x0060h trở đi. Ngăn xếp lại cư trú trong SRAM, do đó phải nằm từ địa chỉ lớn hơn 0x0060h (vì hoạt động của ngăn xếp khi cất vào thì giảm địa chỉ). Giá trị default bằng 0x0000h rõ ràng là không hợp lệ vì nó trỏ vào địa chỉ dành cho Register File, không phải là vùng SRAM. Khi dịch không báo lỗi vì không có lỗi cú pháp ở đây, nhưng khi Run thì ngăn xếp không được khởi tạo đúng nên báo lỗi, không chạy được lệnh rcall!!!!! Đó là nguyên nhân khiến các hạ bị tẩu hỏa nhập ma.
                    Với AVR, do hoạt động của ngăn xếp theo hướng giảm dần địa chỉ khi cất vào nên người ta thường khởi tạo cho SP = địa chỉ cuối cùng của SRAM. Cụ thể trong AVRStudio thì khởi tạo ngăn xếp như sau:
                    ...
                    ldi r16,high(RAMEND)
                    out SPH,r16
                    ldi r16,low(RAMEND)
                    out SPL,r16
                    ...
                    RAMEND là hằng số, chính là địa chỉ cuối cùng của SRAM tương ứng với từng loại AVR. Cái này đã được khai báo và định nghĩa trong file *.inc của loại AVR đó rồi.
                    Giang hồ hiểm ác, bảo trọng.
                    Vậy nếu khai báo như trên rồi thì vùng nhớ SRAM mình có thể sử dụng được là từ địa chỉ nào tới địa chỉ nào?
                    Ví dụ Atmega8515, có phải Ramend = 025FH?
                    Nếu là vậy thì vùng SRAM mình có thể lưu dữ liệu chắc chỉ có thể từ 0230h trở xuống?
                    |

                    Comment


                    • #11
                      Tôi cũng làm như vậy đó.

                      Comment


                      • #12
                        t góp ý này nhe
                        khi đưa vào ngăn xếp thì SP bắt đầu từ gái trị Ramend giảm xuống (ngược lại lấy ra thì tăng lên), còn khi lưu dữ liệu thì nên dùng đoạn sram khác và địa chỉ cần lưu vào sram chứa trong X,Y hoặc Z khi lưu dữ liệu.
                        Do vậy muốn lưu dữ liệu vào Sram thì cần ước lượng khối lượng dữ liệu cần lưu và khả năng mình cần sử dụng tối đa ngăn xếp. Nếu ko có thể gây lỗi

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        • tuyennhan
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi tuyennhan
                          Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                          Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                          hôm nay, 07:44
                        • vi van pham
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi vi van pham
                          Cám ơn những lời chúc tốt đẹp của em.

                          Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                          Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                          hôm nay, 02:00
                        • nhathung1101
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi nhathung1101
                          Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                          Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                          Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                          Hôm qua, 22:18
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                          Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                          Hôm qua, 14:51
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                          Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                          Hôm qua, 14:39
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                          Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                          Hôm qua, 14:28
                        • bqviet
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi bqviet
                          Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                          21-02-2025, 20:26
                        • mèomướp
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi mèomướp
                          Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                          21-02-2025, 12:32
                        • vi van pham
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi vi van pham
                          Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                          Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                          20-02-2025, 21:31
                        • bqviet
                          Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                          bởi bqviet
                          Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                          20-02-2025, 17:22
                        Đang tải...
                        X