Thông báo

Collapse
No announcement yet.

cho hỏi sự khác biệt khi viết "asm" với "C" về dung lượng vi điều khiển 8051

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

  • cho hỏi sự khác biệt khi viết "asm" với "C" về dung lượng vi điều khiển 8051

    e mới học 8051,mong mấy bác chỉ giáo với!
    các bác cho e hỏi cùng một chương trình (tức là cách thiết lập các hiệu ứng nháy led giống nhau) thì mình viết trên C khác với viết bằng asm gì về nguồn tài nguyên hao tổn của 8051 ko ạ?
    có nghĩa là : e mới học vi điều khiển 8051 và làm dàn led trái tim với nhiều hiệu ứng. e viết bằng C , Nhưng đc mỗi 3-4 hiệu ứng là bị xịt vì thiếu dung lượng bộ nhớ của 8051.
    chứ e thấy viết bằng asm nhiều video led hàng chục hiệu ứng mà vẫn dùng 8051.
    mấy bác xem hộ e với!
    ( chương trình e có đính kèm đây ạ )
    Các bác cho e câu trả lời với ạ!
    thank!
    Attached Files

  • #2
    Bạn tham khảo thử code của mình xem thế nào, đây là hiệu ứng sáng dần rồi tắt dần 4 port. Hiệu ứng dài nhất dài khoảng gấp đôi đoạn này là hết à
    Code:
            mov	p0,#0ffh
    	mov	p1,#0ffh
    	mov	p2,#0ffh
    	mov	p3,#0ffh
    	lcall	delay1
    k1:	clr	c
    	mov	a,p0
    	rlc	a
    	mov	p0,a
    	mov	a,p1
    	rlc	a
    	mov	p1,a
    	mov	a,p3
    	rlc	a
    	mov	p3,a
    	mov	a,p2
    	rlc	a
    	mov	p2,a
    	lcall	delay1
    	jc	k1
    ;****************
    	mov	p0,#0h
    	mov	p1,#0h
    	mov	p2,#0h
    	mov	p3,#0h
    	lcall	delay1
    k01:	setb	c
    	mov	a,p0
    	rlc	a
    	mov	p0,a	
    	mov	a,p1
    	rlc	a
    	mov	p1,a
    	mov	a,p3
    	rlc	a
    	mov	p3,a
    	mov	a,p2
    	rlc	a
    	mov	p2,a
    	lcall	delay1
    	jnc	k01

    Comment


    • #3
      Nguyên văn bởi thuongkenny Xem bài viết
      e mới học 8051,mong mấy bác chỉ giáo với!
      các bác cho e hỏi cùng một chương trình (tức là cách thiết lập các hiệu ứng nháy led giống nhau) thì mình viết trên C khác với viết bằng asm gì về nguồn tài nguyên hao tổn của 8051 ko ạ?
      có nghĩa là : e mới học vi điều khiển 8051 và làm dàn led trái tim với nhiều hiệu ứng. e viết bằng C , Nhưng đc mỗi 3-4 hiệu ứng là bị xịt vì thiếu dung lượng bộ nhớ của 8051.
      chứ e thấy viết bằng asm nhiều video led hàng chục hiệu ứng mà vẫn dùng 8051.
      mấy bác xem hộ e với!
      ( chương trình e có đính kèm đây ạ )
      Các bác cho e câu trả lời với ạ!
      thank!
      Vấn đề code C của bạn hao dung lượng rom là vì bạn chỉ quan tâm trạng thái 1 ngỏ ra trên port 8 nhỏ dúng là hao dung lượng. Với lại code C tuy viết để hiểu và ngắn nhưng dung lựong thực so với code ASM lớn nếu so sánh cùng 1 ứng dụng, và thời gian thực hiện code C ko tối ưu bằng so với viết ASM

      Comment


      • #4
        Chương trình của bạn sao ấy chứ. C tuy có nặng hơn ASM nhưng làm gì đến mức nặng thế. Ledimm xuất file hex rất nặng mà còn được rất nhiều hiệu ứng nữa là C
        C tối ưu hóa về thời gian và tính mềm dẻo của chương trình . Được cái lọ mất cái chai mà.

        Comment


        • #5
          thank cac ban! co' j ko hieu minh hoi tiep nhe'! (viet tren dt nen ko dau,cac ban tcam)

          Comment


          • #6
            Nguyên văn bởi thuongkenny Xem bài viết
            e mới học 8051,mong mấy bác chỉ giáo với!
            các bác cho e hỏi cùng một chương trình (tức là cách thiết lập các hiệu ứng nháy led giống nhau) thì mình viết trên C khác với viết bằng asm gì về nguồn tài nguyên hao tổn của 8051 ko ạ?
            có nghĩa là : e mới học vi điều khiển 8051 và làm dàn led trái tim với nhiều hiệu ứng. e viết bằng C , Nhưng đc mỗi 3-4 hiệu ứng là bị xịt vì thiếu dung lượng bộ nhớ của 8051.
            chứ e thấy viết bằng asm nhiều video led hàng chục hiệu ứng mà vẫn dùng 8051.
            mấy bác xem hộ e với!
            ( chương trình e có đính kèm đây ạ )
            Các bác cho e câu trả lời với ạ!
            thank!
            code viết ko khai thác được sức mạnh của C, (viết kiểu này thấy giống ASM quá, thậm chí còn dở hơn dùng ASM), code viết thao tác từng chân của vđk nên rất là dài. chỉ dùng hai thao tác là "bật" và "tắt" nên một hiệu ứng của bác cần dùng từ 64 dòng lệnh trở lên cho 32 led, quá dài, trong khi nếu dùng For thì chỉ còn chưa đến 10 dòng lệnh. Tức là nếu bác viết 2 hiệu ứng (cỡ 128 dòng lệnh) thì em có thể viết được tới cỡ gần 10 hiệu ứng. C có nhiều cấu trúc rất hay như vòng lặp For, While... nếu dùng nó code sẽ ngắn hơn rất nhiều, dĩ nhiên dung lượng file hex xuất ra cũng nhỏ hơn
            Last edited by xe đạp; 08-06-2011, 16:50.

            Comment


            • #7
              Bạn viết như vậy thì chắc chắn là dung lượng IC có lên tới G cũng không thể đáp ứng hết các yêu cầu của bạn được rồi: một cách đơn giản thế này nhé!
              Thay vì bạn định nghĩa tất cả các địa chỉ cho các post (0 - 7) bạn có thể dùng luôn cả post đó và xuất dữ liệu: VD: P2=0x00; P2=0xff; thay vì P2^0=1.....
              rất mất thời gian.
              Tôi ko biết bạn đang dùng trình biên soạn nào, nhưng về cơ bản đã là C thì các câu lệnh và cấu trúc lệnh là giống nhau có khác thì chỉ khác cách khai báo hàm và thư viện, vì mỗi trình biên soạn hỗ trợ một cách khai báo khác nhau:
              VD một bài đơn giản cho bạn:
              #include (reg52.h) // khai báo thư viện trình dịch 8051
              int a, j; // khai báo 2 biến kiểu nguyên
              void delay (void) // tạo hàm trễ với thời gian trễ tương đối
              {
              int i;
              for (i=0;i<20000; i++);
              }
              void main (void) // chuong trình chính
              {
              while (1) // tạo vòng lặp vô hạn
              {
              for (j=0;j<8;j++)
              {
              a=0x01; // gán giá trị cho a là một mã hexa
              P2=a; // Xuất dữ liệu
              a=a<<1; // dịch phải (sáng lần lượt từ P2.0 - P2.7)
              delay();
              }
              P2=0x00;
              delay();
              P2=0xff;
              delay();
              }
              }

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X