Thông báo

Collapse
No announcement yet.

Giúp mình muốn tạo 6 xung có độ rộng 120 độ bằng 8051

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

  • Giúp mình muốn tạo 6 xung có độ rộng 120 độ bằng 8051

    mình muốn tạo 6 xung có độ rộng 120 độ. thời điểm phát xung thay đổi được, để điều chỉnh góc mở cho thy từ 150 - 0 độ. mình dùng timer và ngắt theo sườn. bạn nào cho ý tưởng hay code được không.
    đây là hình ảnh dạng xung. giúp mình nhé! thank! Click image for larger version

Name:	xung.PNG
Views:	2
Size:	18.0 KB
ID:	1422284

  • #2
    đây là code do mình viết ai xem giúp mình với

    Mình viết code xong rùi nhưng mà xung không được tạo ra ở các chân P2. Ai sửa giúp mình với! nản quá!
    #include<REGX51.h>

    /* khoi tao cong vao ra va dinh nghia cac ham
    -------------------------------------------------*/

    void Port2_init();
    void delay_ms();
    void timer0_init(); // su dung timer0 de tao xung chum 5khz, che do 2 8bit tu nap
    void timer1_init(); // su dung timer1 de tinh toan phat xung dk, che do 1 16bit

    /* Khai bao cac bien su dung trong chuong trinh
    - a: bien dem so lan ngat timer0
    - b: bien dem so lan ngat theo suon
    - j: chi so cua mang
    - i:
    - y: goc mo alpha
    */
    unsigned int a=0, b=0, c=0, d=0, y=0, j=30;

    /* bang ung voi cac goc mo alpha tu 150 - 0 do, 30 bac khoi dong, giam 5 do 1 luot */
    unsigned char bang[]={ 0x208D, 0x1F77, 0x1E62, 0x1D4C, 0x1C36, 0x1B20, 0x1A0B, 0x18F5,
    0x17DF, 0x16C9, 0x15B3, 0x149D, 0x1388, 0x1722, 0x115C, 0x1047, 0x0F31, 0x0E1B,
    0x0D05, 0x0BEF, 0x0AD9, 0x09C4, 0x08AE, 0x0798, 0x0683, 0x056D, 0x0457, 0x0341, 0x022C,
    0x0116, 0x0000 };

    /* Trien khai cac ham */
    void Port2_init() // khoi tao port2 lam cong ra
    {
    P2=0x00;
    }
    void delay_ms(unsigned int n) // Tao ra tre ms
    {
    unsigned int i,j;
    for(i=0;i<n;i++) // 1 vong for tao ra tre 1,12ms
    for(j=0;j<140;j++);
    }
    void timer0_init() // chuong trinh con khoi tao ngat
    {

    IE=0x86; // cho phep ngat ngoai 1 va ngat timer0, chi so vector 2,1
    IT1=1; // kich hoat ngat theo suon am o chan INT1
    TMOD=0x12; // chon timer0 che do 2 8bit tu nap, timer1 che do 1 16bit
    TL0=0x9C; TH0=0x9C; // Gia tri nap vao de tao tre 0,1ms
    TR0=1;
    }
    void timer1_init()
    {
    TMOD=0x12;
    TL1=0x00; TH1=0x00; // xoa gia tri thanh ghi
    TR1=1; // khoi dong timer1
    if(TF1==1)
    {
    TR1=0; // dung timer1
    TF1=0; // xoa co ngat
    TL1=0x00; // dem lai tu 00
    TH1=0x00;
    TR1=1; // khoi dong timer1
    }
    }

    // trinh phu ngat tao xung chum 5 khz
    void isr_timer0() interrupt 1
    {
    TR0=0;
    P0_0^=1;
    TR0=1;

    }
    // trinh phu ngat ngoai tai chan INT1
    void isr_INT1() interrupt 2
    {
    b++; c++; dTH1&&0x0F)<<8)||TL1; // gan d = gia tri cua thanh ghi timer1 khi co ngat
    y=bang[j];
    if(b<=1000) // chuong trinh khoi dong den goc mo alpha
    {
    if(c>=42) // t kd= 20s, so bac= 24. alpha 150-30do.
    {
    c=0;
    j--;
    }
    }
    if (j<=6) {y=bang[6];}

    }

    /* CHUONG TRINH CHINH LIEN TUC SO SANH CAC GIA TRI TRONG TIMER1 VOI CAC THOI DIEM
    DE PHAT XUONG DIEU KHIEN RA CAC CHAN CONG P2*/
    main()
    {
    Port2_init();
    delay_ms();
    timer0_init();
    timer1_init();
    while(1)
    {
    // chuong trinh phat xung tren cac chan port P2
    if((((TH1&&0x0f)<<8)||TL1)==d+y){P2_0=1;delay_ms(6 );P2_0=0;} //T1

    if((((TH1&&0x0f)<<8)||TL1)==(d+y+0x2710)){P2_1=1;d elay_ms(6);P2_1=0;} //T2

    if((((TH1&&0x0f)<<8)||TL1)==d+y+0x1A0B){P2_2=1;del ay_ms(6);P2_2=0;} //T3

    if((((TH1&&0x0f)<<8)||TL1)==d+0x0000){P2_3=1;delay _ms(6);P2_3=0;} //T4

    if((((TH1&&0x0f)<<8)||TL1)==d+y+0x3415){P2_4=1;del ay_ms(6);P2_4=0;} //T5

    if((((TH1&&0x0f)<<8)||TL1)==d+y+0x0D05){P2_5=1;del ay_ms(6);P2_5=0;} //T6
    }
    }

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X