Thông báo

Collapse
No announcement yet.

chia sẻ cách tạo code delay chính xác nhất

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

  • chia sẻ cách tạo code delay chính xác nhất

    đây là đoạn code tạo trễ tổng quát
    delay :
    push 5
    push 6
    push 7
    mov r5,#m
    mov r6,#n
    mov r7,#p
    djnz r7,$
    djnz r6,$-4
    djnz r5,$-8
    pop 7
    pop 6
    pop 5
    ret
    với m,n,p là số tự nhiên từ 1 đến 255
    khi đó chu kì máy sau khi chạy hết vòng lặp là ((2p+1)xn+2n+1)xm+2m+1 (MC)
    làm thế nào để tìm m,n,p cho chính xác nhất
    mình đã tạo 1 code c để tìm m,n,p với độ chính xác khá cao như sau
    //tinh chu ki delay
    #include<conio.h>
    #include<stdio.h>
    void main()
    {
    clrscr();
    float m, n,p;
    float m1,m2,t;
    float tem=1,tem2,n1,p1;
    float i,j;
    printf ("nhap so chu ki may\n");
    scanf("%f",&t);
    printf("\nnhap n p \n");
    scanf ("%f",&n);
    scanf("%f",&p);
    for ( i=1;i<=n;i++)
    {
    for ( j=1;j<=p;j++)
    {

    m1=(t-1)/(3*i+3+2*j*i);


    m2=long ((t-1)/(3*i+3+2*j*i)); //lay phan nguyen

    tem2=m1-m2; // sai lech

    if (m1<=255&&tem2<=tem) { m=m1; n1=i ; p1=j;tem=tem2; }

    }

    }
    printf(" m=%f\n n=%f\n p=%f \n",m,n1,p1);

    getch();


    }

    vidu: nếu muôn delay 1s thì nhập : so chu ki may=1000000
    nhap n, p lân lượt 255
    255
    ket qua rat tròn m=63 n=230 p=33
    vì m tròn nên sai số là không có
    code delay nay chi sai 14 chu kì máy bởi 3 lệnh push (3x2=6 MC) và lệnh pop (2x3 MC) va 1 lênh ret ( 2 MC)
    nên sai số là 14us/1s =0.0014%
    Last edited by dinhlongbk93; 19-04-2014, 13:18.

  • #2
    bài này mình thấy có ích mà không ai bình luận nhị. cái code c nó ứng dung rất nhiều vào tính delay
    chia sẻ mà không ai quan tâm. chán ...

    Comment


    • #3
      Hì, bạn đưa ra 1 ví dụ bằng code Assembler, giải quyết lại bằng code C thì ai biết mà đọc được bạn.
      Thân!
      "Cái quý nhất của con người ta là sự sống. Đời người chỉ sống có một lần.Phải sống sao cho khỏi xót xa ân hận..."
      Lê lết, lay lất sống qua ngày! >:)

      Comment


      • #4
        Nguyên văn bởi BabyKid Xem bài viết
        Hì, bạn đưa ra 1 ví dụ bằng code Assembler, giải quyết lại bằng code C thì ai biết mà đọc được bạn.
        Thân!
        chắc bạn chưa hiểu rồi. bạn có thể viết delay chính xác thời gian tùy ý mà không dùng timer không?
        cụ thể dùng vòng lặp này:
        mov r5,#m
        mov r6,#n
        mov r7,#p
        djnz r7,$
        djnz r6,$-4
        djnz r5,$-8
        bài toán đặt ra ở đây là chọn m , n, p như thế nào để delay vói số giây nhất định,
        với vòng lặp trên thì mỗi vòng lặp có thể chạy tối đa 256 lần nếu chon m=n=p=0,
        như vậy có thể delay thời gian lên tới và hơn giây thì đủ sức dùng rồi,
        nếu 8051 có xung nhịp là 12mhz thì 1 chu kì máy là 1MC= 1us.
        lênh :
        mov Rn,#data có chu kì 1 MC
        djnz Rn,rel có chu kì là 2 MC
        vậy số chu kì trong vòng lặp trên là : (2p+1)n+2n+1)m+2m+1
        nếu muốn delay 1s =1000000 chu kì máy thì bạn chọn m ,n ,p như thế nào??? tính tay à , hay ước lượng khoảng nào đó. mình nói với bạn là sẽ sai lệch rất lớn lên cả nghìn MC, không tin thì cứ chọn m n p đi để mình kiểm tra cho ma xem. mà không đuọc dùng đoạn code c để tính nhé
        Last edited by dinhlongbk93; 24-04-2014, 19:34.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • Andrea14
          Vấn đề về tốc độ quay
          bởi Andrea14
          Chào mọi người,

          Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
          Hôm qua, 12:42
        • bqviet
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi bqviet
          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
          06-12-2025, 17:17
        • nguyendinhvan
          Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
          bởi nguyendinhvan
          Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
          05-12-2025, 19:59
        • afrendly
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi afrendly
          Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
          04-12-2025, 01:27
        Đang tải...
        X