Thông báo

Collapse
No announcement yet.

Cùng Duyphi bắt đầu học lập trình AVR

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

  • #76
    Nguyên văn bởi mrcuongcon Xem bài viết
    Bác Duy Phi ơi, bây giờ em muốn lấy các kí tự từ trong một bảng .db nhưng không lấy lần lượt
    mà lấy bất kỳ, thì làm thế nào. Trong 8051 thì đại để nó thế này: movc a,@a+dptr.
    Trong avrstudio thì nó chỉ có lệnh LDD Rd,Z+q với q là một hằng số và q mang giá trị 0-63. Ý của em là là sao thế chỗ của q bằng một biến (vd như biến .def count R2) Em muốn làm về led 7 thanh mà mắc chố này.
    oh, anh em chạy nhanh quá đi mất! Mãi lo làm kiếm tiền trả tiền phòng nên ko chạy kịp với anh em rồi. hi hi

    Ok, với 8051 thì MOVC A,@A+DPTR với A là con số tham chiếu đến 1 địa chỉ nào đó trong bảng thì với AVR chúng ta sẽ làm như sau:

    LDI ZH,HIGH(BANG DATA CUA CHUNG TA)
    LDI ZL,LOW(BANG DATA CUA CHUNG TA)
    ADD ZL,R23
    <----------Ở đây giá trị của R23 tương đương với thanh ghi A trong 8051
    LMP
    ...............
    ...............
    Xong, giá trị trả về sẽ nằm trong thanh ghi R0.

    Chúc vui!

    Comment


    • #77
      Nguyên văn bởi dongho23 Xem bài viết
      bác DUYPHI có thể cung cấp một số tài liệu về lệnh của AVR được ko?
      ok, để DuyPhi suy tầm cho bạn 1 file hay nhất về tập lệnh. Hiện giờ thì chưa upload lên được-2/9 mà.

      Comment


      • #78
        Hi hi, cám ơn bác Phi nhé, hay thật.
        bác DUYPHI có thể cung cấp một số tài liệu về lệnh của AVR được ko?
        tập lệnh của AVR có ở :
        1_Datasheet của AVR
        2_Trong Help của AVRstudio
        Trong Help của AVrstudio là hay nhất.
        Attached Files

        Comment


        • #79
          Xem giúp em bài này với, kô hiển thị đc. Bác xem các môdul em viết có đúng kô? Nó là hiển thị đếm tăng của 2 con led 7 thanh trên PORTD của atmega8 các chân điều khiển cực dương chung nối vào portb.0 và portb.1
          Code:
          .include"m8def.inc"
          .equ led   = portd   // 7seg
          .def count_led1 = r17
          .def count_led2 = r18
          .def temp1  = r3
          .cseg
          //-----------------------------
          .org 0x00
          rjmp main
          //-----------------------------
          .org 0x50
          main:
           	ldi r16,high(ramend)
          	out sph,r16
          	ldi r16,low(ramend)
          	out spl,r16
          	ser r16
          	out DDRD,r16
          	out PORTD,r16
          	out DDRB,r16
          	out PORTB,r16
          	ldi count_led2,0x00
          	ldi count_led1,0x00
           main1:
           	ldi r21,200
           dis:
              rcall display
           	dec r21
              brne dis
            	rcall inc_count	
           rjmp main1
          ///----------Init stack pointer------------------
          init:
           ret
          //--------------display--------------------------
          Display:
          	ldi zh,high(seg7_number_anot1*2)
          	ldi zl,low(seg7_number_anot1*2)
          	add zl,count_led1
          	ld temp1,z
          	out PORTD,temp1
          	sbi PORTB,0       //display led1
          	rcall delay
          	cbi PORTB,0
          	ldi zh,high(seg7_number_anot1*2)
          	ldi zl,low(seg7_number_anot1*2)
          	add zl,count_led2
          	ld temp1,z
          	out PORTD,temp1
          	sbi PORTB,1      // display led2
          	rcall delay
          	cbi PORTB,1
           ret
          //--------------count_inc----------------
          Inc_count:	
          	inc count_led2
          	cpi count_led2,10
          	breq exit
          	clr count_led2
          	inc count_led1
          	cpi count_led1,10
          	breq exit
          	clr count_led1
          exit:
           ret
          //--------------Delay----------------
          Delay:
          	ldi r19,25
           D1: ldi r20,2
            D2: dec r20
               brne D2
              dec r19
             brne D1
           ret
          //------------------------------
          //-----------Deciman number-anot-A fist-------------------
          seg7_number_anot1:
          	.db 0b00000011,0b10011111,0b00100101,0b00001101,0b10011001
          	.db 0b01001001,0b01000001,0b00011111,0b00000001,0b00001001
          //-----------Hexagon number - anot-A fist-----------------
          seg7_number_anot2:
          	.db 0x03,0x9f,0x25,0x0d,0x99
          	.db 0x49,0x41,0x1f,0x01,0x09
          //-----------Deciman number - katot-A fist----------------
          seg7_number_katot3:
          	.db 0b11111100,0b01100000,0b11011010,0b11110010,0b01100110
          	.db 0b10110110,0b10111110,0b11100000,0b11111110,0b11110110
          //-----------Hexagon number _ katot-A fist----------------
          seg7_number_katot4:
          	.db 0xfc,0x60,0xda,0xf2,0x66
          	.db 0xb6,0xbf,0xe0,0xfe,0xf6
          //---------- Deciaman number_anot
          Attached Files

          Comment


          • #80
            Nguyên văn bởi mrcuongcon Xem bài viết
            Xem giúp em bài này với, kô hiển thị đc. Bác xem các môdul em viết có đúng kô? Nó là hiển thị đếm tăng của 2 con led 7 thanh trên PORTD của atmega8 các chân điều khiển cực dương chung nối vào portb.0 và portb.1]
            Code:
            .include"m8def.inc"
            .equ led   = portd   // 7seg
            .def count_led1 = r17
            .def count_led2 = r18
            .def temp1  = r3
            .cseg
            //-----------------------------
            .org 0x00
            rjmp main
            //-----------------------------
            .org 0x50
            main:
             	ldi r16,high(ramend)
            	out sph,r16
            	ldi r16,low(ramend)
            	out spl,r16
            	ser r16
            	out DDRD,r16
            	out PORTD,r16
            	out DDRB,r16
            	out PORTB,r16
            	ldi count_led2,0x00
            	ldi count_led1,0x00
             main1:
             	ldi r21,200
             dis:
                rcall display
             	dec r21
                brne dis
              	rcall inc_count	
             rjmp main1
            ///----------Init stack pointer------------------
            init:
             ret
            //--------------display--------------------------
            Display:
            	ldi zh,high(seg7_number_anot1*2)
            	ldi zl,low(seg7_number_anot1*2)
            	add zl,count_led1
                         ldi r16,0  //tranh bi tran zl
                         adc zh,r16 //tranh bi tran zl
            	ldz temp1,z //lenh nap tu bo nho chuong trinh
            	out PORTD,temp1
            	sbi PORTB,0       //display led1
            	rcall delay
            	cbi PORTB,0
            	ldi zh,high(seg7_number_anot1*2)
            	ldi zl,low(seg7_number_anot1*2)
            	add zl,count_led2
                         ldi r16,0  //tranh bi tran zl
                         adc zh,r16 //tranh bi tran zl
            	ldz temp1,z //lenh nap tu bo nho chuong trinh
            	out PORTD,temp1
            	sbi PORTB,1      // display led2
            	rcall delay
            	cbi PORTB,1
             ret
            //--------------count_inc----------------
            Inc_count:	
            	inc count_led2
            	cpi count_led2,10
            	breq exit
            	clr count_led2
            	inc count_led1
            	cpi count_led1,10
            	breq exit
            	clr count_led1
            exit:
             ret
            //--------------Delay----------------
            Delay:
            	ldi r19,25
             D1: ldi r20,2
              D2: dec r20
                 brne D2
                dec r19
               brne D1
             ret
            //------------------------------
            //-----------Deciman number-anot-A fist-------------------
            seg7_number_anot1:
            	.db 0b00000011,0b10011111,0b00100101,0b00001101,0b10011001
            	.db 0b01001001,0b01000001,0b00011111,0b00000001,0b00001001
            //-----------Hexagon number - anot-A fist-----------------
            seg7_number_anot2:
            	.db 0x03,0x9f,0x25,0x0d,0x99
            	.db 0x49,0x41,0x1f,0x01,0x09
            //-----------Deciman number - katot-A fist----------------
            seg7_number_katot3:
            	.db 0b11111100,0b01100000,0b11011010,0b11110010,0b01100110
            	.db 0b10110110,0b10111110,0b11100000,0b11111110,0b11110110
            //-----------Hexagon number _ katot-A fist----------------
            seg7_number_katot4:
            	.db 0xfc,0x60,0xda,0xf2,0x66
            	.db 0xb6,0xbf,0xe0,0xfe,0xf6
            //---------- Deciaman number_anot
            chúc bạn thành công
            Last edited by dangdung; 03-09-2008, 18:25.
            Điện thoại:
            email:

            Comment


            • #81
              ldi r16,0 //tranh bi tran zl
              adc zh,r16 //tranh bi tran zl
              ldz temp1,z //lenh nap tu bo nho chuong trinh
              Sao em tìm kô thấy có lệnh nào là "LDZ" cả? Quái thật, sao nó kô chạy đc nhỉ?
              Mạch khi chạy nó vẫn thực hiện quét led nhưng mà không hiển thị đúng, thực ra là không hiển thị bất kỳ ký tự nào cả.
              Last edited by mrcuongcon; 04-09-2008, 12:48.

              Comment


              • #82
                Nguyên văn bởi mrcuongcon Xem bài viết
                Sao em tìm kô thấy có lệnh nào là "LDZ" cả? Quái thật, sao nó kô chạy đc nhỉ?
                Mạch khi chạy nó vẫn thực hiện quét led nhưng mà không hiển thị đúng, thực ra là không hiển thị bất kỳ ký tự nào cả.
                xin lỗi bạn mình viết nhầm
                lpm chứ không phải ldz
                ldi r16,0 //tranh bi tran zl
                adc zh,r16 //tranh bi tran zl
                lpm temp1,z //lenh nap tu bo nho chuong trinh

                giải thích:
                tránh bị tràn zl là
                giả sử Z = 0x00fe

                add zl,count_led1 //(count_led1 =5)
                thì Z = 0x0004

                nếu thêm vào
                ldi r16,0 //tranh bi tran zl
                adc zh,r16 //tranh bi tran zl
                thì Z = 0x0104 thi mới đúng

                sau đó nạp từ bộ nhớ chương trình từ Z*2 vào temp1
                lpm temp1,z //lenh nap tu bo nho chuong trinh
                Điện thoại:
                email:

                Comment


                • #83
                  Oke cảm ơn bác nhiều, em đã hiểu.
                  Vẫn đề chính trong bài lập trình của em là bị trùng biến. Ổn rồi các bác ạ.
                  Nhưng em lại không hiểu tại sao khi gán bảng DPTR thì :
                  LDI Zh,high(TEXT*2)
                  LDI ZL, low(TEXT*2)
                  Tại sao lại là (*2)? Nhân đôi bảng TEXT? X,Y,Z là các thanh ghi 16 bit, nó có gì khác so với con trỏ DPTR của 8051 (cũng là 16 bit)?

                  Comment


                  • #84
                    Nguyên văn bởi MicroDuyphi Xem bài viết
                    Không biết có anh em nào rảnh design nó thành 1 cái PCB mạch không nhỉ???
                    Vả lại vào 1 số trang của anh em cũng không thấy cái PCB TEST nào re rẻ để mua về học. Anh em nào làm thương mại nhớ ghi lại ý kiến góp này của DuyPhi.
                    Giờ em mới để ý thấy việc này.
                    Em đóng góp 1 tay cho anh vậy.
                    Anh thấy đc thì cứ viết tut trên kit này đc không.
                    Em thiết kế gồm chip + mạch nạp tích hợp dạng cổng com dùng chương trình PonyProg:
                    -Giao tiếp UART
                    -1 Số nút nhấn
                    -Vài đèn led

                    Hình của mạch kit đc thiết kế sẵn.
                    Mạch lúc đầu thiết kế có giao tiếp USB hiện thực theo ODBV ( http://www.obdev.at/products/avrusb/index.html )

                    Nhưng do sai sót trong việc thiết kế không để ý về mạch in nên không dùng đc ngoài chức năng cấp nguồn bằng cổng USB (-->bạn nào lấy thì đừng hàn module USB chi cho mất công)

                    Mạch nạp dùng chươgn trình PonyProg chương trình lấy ở đây http://www.lancos.com/prog.html
                    Attached Files

                    Sông dài, Thuyền lớn, Biển rộng bao la.
                    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                    Comment


                    • #85
                      Bổ sung 1 điều.
                      Nếu dùng mạch nạp này các bạn đừng dùng cổng COM dạng USB->COM

                      Anh Namq từng nói rằng USB - COM không cung cấp giao thức điều khiển trực tiếp chân-->mà mạch nạp của ponyprog thuộc dạng simulate chuẩn SPI.
                      Last edited by quoc_thaibk; 05-09-2008, 18:43.

                      Sông dài, Thuyền lớn, Biển rộng bao la.
                      Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                      Comment


                      • #86
                        Các bác cho e hỏi, cái PNLAB nạp như thế nào? E xem thông tin thì nó là cáp nạp, và cần phải có 1 adapter nữa à?

                        Comment


                        • #87
                          Bác DuyPhi sao lại bỏ bê Box thế này nhỉ? Anh em chờ mỏi cổ rồi....! Mình thấy các bạn nên tôn trọng nhau trong box 1 tí...Cái này là dành cho những ai mới học làm quen với AVR mà mình thấy các bạn trao đổi nhiều thông tin mà ...hơi xa trình độ 1 tí.
                          Mình có 1 tài liệu học AVR cơ bản cực hay...ASM.Các bạn coi nha.......!

                          Cho mình hỏi luôn 1 vài vấn đề cần làm rõ:
                          1.SRAM là gì? Nhiệm vụ? Sử dụng như thế nào? Ví dụ?
                          2.Cho 1 ví dụ về KT bảng?

                          Theo mình thì các bạn mới học ta nên down tài liệu của mình về rồi tự tìm hiểu, ...đọc xong 2 tai liệu thì chúng ta bắt đâu ok rồi.! Bác DuyPhi nên vạch rõ 1 hướng đi cho anh em...( các bộ phận cơ bản trong avr, cùng với nhiệm vụ,..khai báo, phương thức hoạt động)
                          Attached Files

                          Comment


                          • #88
                            Anh em cứu cái luồng này đi chứ..................

                            Comment


                            • #89
                              Anh Phi đã chuyển qua hoạt động nhiều hơn ở diễn SUNJSC của BKPro rồi. Đây cũng là luồn Cùng học AVR của anh Phi bên SUNJSC : http://forum.sunjsc.com/showthread.php?t=258

                              Comment


                              • #90
                                em đang làm cái mạch về hiển thị tín hiệu analog (đầu vào là xung hình sin, hiển thị ra LCD) nhưng em ko biết bắt đầu từ đâu, các anh chị đi trước có thể chỉ giúp em một chút về hiển thị analog trong avr được ko ạ?? em cảm ơn rất nhiều

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X