Thông báo

Collapse
No announcement yet.

Cho mình hỏi về ADC0804 và 89V51 !!!

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

  • Cho mình hỏi về ADC0804 và 89V51 !!!

    Mình đang làm đề tai đọc nhiệt độ từ LM35DZ vào ADC 0804 và sau đó đưa giá trị qua 89V51 rồii xuất ra giá trị qua 4 LED 7 đoạn Anod Chung.Minh để sơ đồ mạch dưới đây. Trong quá trình làm mạch mình gặp một rắc rối đó là:
    -Theo lý thuyết thì cần cấp Vref =1.28V thì chỉ cần lấy dữ liệu và xuất ra LED, mình thi để trống nên nhân thêm dữ liệu với 1.953 rồii mới xuất ra lED.
    -Trong quá trình xử lý và xuất LED, nếu mình thử nhập thằng giá trị thập phân cho hàm xuất thì giá trị ra 4 LED 7 đoạn rất tốt.Nhưng khi mình lấy dữ liễu từ ADC vào, xử lý, thì lại gặp rắc rối:
    - LED thứ 4 (hàng trăm ) ko sáng đúng, luôn hiện số 8.
    - 2 LED còn lại (hàng chục, đơn vị ) thì sáng lúc đầu , sau đó tắt đi, và chỉ còn LED thứ 4 sáng, lúc này thì LED thứ 4 sáng đúng giá trị, nhưng 2 LED kia đã tắt và cứ như vậy luôn cho đến khi reset mạch.
    -Mạch xử lý tín hiệu vào và xuất ra chậm lắm, khi tăng nhiệt độ bằng cách đốt nóng LM35 thì 4 LED vẫn ko hiện ra liền, mà cần phải reset vài lần, chập chờn rồi mới ra giá tri nhưng lại bị lỗi ở trên.

    Bạn nào biết xin chỉ giúp minh với: Sắp tới ngày nộp mạch rồii mà vậy chắc tieu.Xin cám ơn các bạn rất nhiều.:
    đây là code mình viết va so do mach trong file dinhkem:
    #include <REG51.H>
    #include <intrins.h>
    #include <stdio.h>
    // P2 : ma hinh ,du lieu LED 7 doan
    // P0: ma chon 4 LEd 7 doan de quet led

    sbit ADC_RD=P3^2;//bit read va write cua ADC
    sbit ADC_WR=P3^4 ;
    unsigned int nhietdo;
    unsigned char meg_hello[14]={
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x84
    };
    void delay_us(unsigned char n) //ham delay de quet led
    {
    unsigned char i;
    for(i=0;i<n;i++);
    }
    void delay_ms(unsigned int n)
    {
    unsigned int i;
    for(i=0;i<n;i++) delay_us(255);
    }
    void temp_display( int r1) //ham hien thi led, 4 led 7 doan
    {
    unsigned int r3,r4;
    int r2,LED1,LED2,LED3,LED4;//led 1,led2,led3,led 4: tram, chuc, don vi, Chu C
    LED1= r1/100;
    r2=r1-100*LED1;
    LED2=r2/10;
    LED3=r2-LED2*10;
    LED4=10;
    r4=300;
    while(r4--)
    {
    r3=4;
    while(r3--)
    {
    P0=0x01;
    P2=meg_hello[LED4];
    delay_ms(1);
    P0=0x02;
    P2=meg_hello[LED3];
    delay_ms(1);
    P0=0x04;
    P2=meg_hello[LED2];
    delay_ms(1);
    P0=0x08;
    P2=meg_hello[LED1];
    delay_ms(1);

    }
    }
    }
    void batdau() // khoi tao cac gia tri cho ADC chay
    {
    ADC_RD=1;
    ADC_WR=1;
    IT1=1 ;
    EX1=1;
    EA=1;
    }
    void chuyendoi() //cho ADC chuyen doi sang nhi phan 8 bit
    {
    ADC_WR=0;
    ADC_WR=1;
    }
    int1()interrupt 2
    {
    ADC_RD=0;
    nhietdo= P1; //lay nhiet do tu 8 bit ngo ra ADC noi voi P1
    nhietdo=nhietdo*1.953;
    ADC_RD=1;
    temp_display(nhietdo);
    delay_us(33000);
    chuyendoi();
    }
    void main(void)
    {

    while(1)
    {
    batdau();
    chuyendoi();

    }
    }
    Attached Files

Về tác giả

Collapse

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

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

Collapse

Đang tải...
X