Đang tải...

Chúc buổi chiều tràn đầy sinh lực!

“Chớ lề mề trong công việc phải làm gấp, chớ hấp tấp trong việc không cần vội."

Cơ bản Kỹ thuật ứng dụng vi điều khiển

Thảo luận trong 'Điện - Điện tử' bắt đầu bởi haui, 4/1/11.

Thành viên đang xem bài viết (Users: 0, Guests: 0)

  1. haui
    Offline

    haui Tài xế O-H

    Tham gia ngày:
    5/8/09
    Số km:
    3,004
    Được đổ xăng:
    213
    Xăng:
    -3,114 lít xăng
    Vi điều khiển Tui đang nghiên cứu ở mức abc đó là điều khiển LED. theo yêu câu của mấy Pác tôi entry vài bài mẫu tham khảo(lập trình không chuyên nên không áp dụng các giải thuật C++, lập trình nhúng):
    I. Điều khiển LED
    1. BẢNG CHUYỂN ĐỔI HỆ NHỊ PHÂN SANG THẬP LỤC PHÂN

    0000 === 0
    0001 === 1
    0010 === 2
    0011 === 3
    0100 === 4
    0101 === 5
    0110 === 6
    0111 === 7
    1000 === 8
    1001 === 9
    1010 === A
    1011 === B
    1100 === C
    1101 === D
    1110 === E
    1111 === F

    2. TẠM QUY ƯỚC “TẮT” ”SÁNG”
    0: SÁNG
    1: TẮT
    3.
    PORT DDR
    INPUT 0xFF 0x00
    OUTPUT 0xFF/0x00 0xFF

    4. BÀI TẬP VÍ DỤ (LẬP TRÌNH THEO KHÔNG THEO GIẢI THUẬT)
    /*===================================================================*/
    //KHAI BÁO Ở THƯ VIỆN
    #include <mega32>
    #include <delay>
    //OUT PUT
    #define LED PORTA
    #define LED1 PORTA.0
    #define LED2 PORTA.1
    #define LED3 PORTA.2
    #define LED4 PORTA.3
    #define LED5 PORTA.4
    #define LED6 PORTA.5
    #define LED7 PORTA.6
    #define LED8 PORTA.7
    // INPUT
    #define pb PIND
    #define pb1 PIND.0
    #define pb2 PIND.1
    #define pb3 PIND.2
    #define pb4 PIND.3
    #define pb5 PIND.4
    #define pb6 PIND.5
    #define pb7 PIND.6
    #define pb8 PIND.7
    // DELAY
    #define time_out 500
    #define time 100
    #define time_1 200
    /*=============================================================*/
    void khoi_tao(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0xFF;
    DDRA=0xFF;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0xFF;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    }
    /*==========================================================*/
    // CHƯƠNG TRÌNH LED NHẤP “NHÁY” 3 LẦN
    void Ctr_1(void)
    {
    char i;
    for(i=0;i<3;i++)
    {
    LED=0x00;
    delay_ms(time_out);
    LED=0xFF;
    delay_ms(time_out);
    }
    }
    /*==========================================================*/
    // CHƯƠNG TRÌNH LED SÁNG NGOÀI VÀO VÀ SÁNG TRONG RA 3 LẦN
    void Ctr_2(void)
    {
    char i;
    for(i=0;i<3;i++)
    {
    LED=0x7E; //LED 1,8 SÁNG
    delay_ms(time);

    LED=0x3C; //LED 1,2,7,8 SÁNG
    delay_ms(time);

    LED=0x18; //LED 1,2,3,6,7,8 SÁNG
    delay_ms(time);


    LED=0x00; //LED 1,2,3,4,5,6,7,8 SÁNG
    delay_ms(time);

    LED=0xE7; //LED 4,5 SÁNG
    delay_ms(time);

    LED=0xC3; //LED 3,4,5,6 SÁNG
    delay_ms(time);

    LED=0x81;
    delay_ms(time);

    LED=0x00;
    delay_ms(time);
    }
    }
    /*==========================================================*/
    // CHƯƠNG TRÌNH LED SÁNG TỪ LED.1 ĐẾN LED.8 (3 LẦN)
    void Ctr_3(void)
    {
    char i;
    for(i=0;i<3;i++)
    {
    LED=0x7F; // LED 1 SÁNG
    delay_ms(time);

    LED=0x3F; // LED 1,2 SÁNG
    delay_ms(time);

    LED=0x1F; // LED 1,2,3 SÁNG
    delay_ms(time);

    LED=0x0F; // LED 1,2,3,4 SÁNG
    delay_ms(time);

    LED=0x0F; // LED 1,2,3,4,5 SÁNG
    delay_ms(time);

    LED=0x03; // LED 1,2,3,4,5,6 SÁNG
    delay_ms(time);

    LED=0x01; // LED 1,2,3,4,5,6,7 SÁNG
    delay_ms(time);

    LED=0x00; // LED 1,2,3,4,5,6,7,8 SÁNG
    delay_ms(time);
    }
    }
    /*==========================================================*/
    // CHƯƠNG TRÌNH LED TẮT TỪ LED.1 ĐẾN LED.8 VÀ NGƯỢC LẠI (3 LẦN)
    void Ctr_4(void)
    {
    char i;
    for(i=0;i<3;i++)
    {
    LED=0x00; //TẤT CẢ LED ĐỀU SÁNG
    delay_ms(time_1);

    LED=0x80; // LED 1 TẮT
    delay_ms(time_1);

    LED=0x40; // LED 2 TẮT
    delay_ms(time_1);

    LED=0x20; // LED 3 TẮT
    delay_ms(time_1);

    LED=0x10; // LED 4 TẮT
    delay_ms(time_1);

    LED=0x08;
    delay_ms(time_1);

    LED=0x04;
    delay_ms(time_1);

    LED=0x02;
    delay_ms(time_1);

    LED=0x01;
    delay_ms(time_1);


    /*==================================================*/
    LED=0x00; //TẤT CẢ LED ĐỀU SÁNG
    delay_ms(time_1);

    LED=0x01; // LED 8 TẮT
    delay_ms(time_1);

    LED=0x02; // LED 7 TẮT
    delay_ms(time_1);

    LED=0x04;
    delay_ms(time_1);

    LED=0x08;
    delay_ms(time_1);

    LED=0x10;
    delay_ms(time_1);

    LED=0x20;
    delay_ms(time_1);

    LED=0x40;
    delay_ms(time_1);

    LED=0x80;
    delay_ms(time_1);
    }
    }
    /*==========================================================*/
    // CHƯƠNG TRÌNH LED SÁNG TỪ LED.1 ĐẾN LED.8 (3 LẦN)
    void Ctr_5(void)
    {
    char i;
    for(i=0;i<3;i++)
    {
    LED=0xFF; // TẤT CẢ LED ĐỀU TẮT
    delay_ms(time_1);

    LED=0x7F; // LED 1 SÁNG
    delay_ms(time_1);

    LED=0xBF; // LED 2 SÁNG
    delay_ms(time_1);

    LED=0xDF; // LED 3 SÁNG
    delay_ms(time_1);

    LED=0xEF;
    delay_ms(time_1);

    LED=0xF7;
    delay_ms(time_1);

    LED=0xFB;
    delay_ms(time_1);

    LED=0xFD;
    delay_ms(time_1);

    LED=0xFE;
    delay_ms(time_1);
    }
    }
    /*==========================================================*/
    void main(void)
    {
    char i;
    khoi_tao();
    while (1)
    {
    if (pb1==0) // Nếu phím 1 nhấn thì chương trình 1 chạy,(giữa pb1 và 0 là hai dấu”=”)
    Ctr_1();

    if(pb2==0) // nếu nhấn phím 2 thì Ctr_2,Ctr_3,Ctr_4 chạy
    {
    Ctr_2();
    Ctr_3();
    Ctr_4();
    Ctr_5();
    }
    if(pb3==0) // Nhấn phím 3 thì thực hiện doạn lệnh dưới.
    {
    for(i=0;i<5;i++)
    {
    LED=~LED; // TẤT CẢ LED NHẤP NHÁY
    delay_ms(time_1);
    }
    }
    };
    }


    II. ĐIỀU CHỈNH TẦN SỐ.(LED sáng dần hoặc tối dần)

    B1. điều chỉnh timers trước khi lưu file như bảng:
    khai báo ở timers:
    B2. VIẾT CHƯƠNG TRÌNH
    Program type : Application
    Clock frequency : 11,059200 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 512
    *****************************************************/
    // Bài 1 TRƯỜNG HỢP LED 6 SÁNG DẦN
    #include <mega32> ( viết ở chổ khai báo)
    #include <delay>
    #define pwm OCR1AL
    char n=0,time_out=0;

    interrupt [TIM2_OVF] void timer2_ovf_isr(void) (cái này có do bước 1 )
    {
    time_out++;
    pwm=time_out;
    if(time_out>254)
    {
    time_out=0 ;
    }

    }
    // Declare your global variables here
    /*=========================================================================*/
    void khoi_tao(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=Out Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=0 State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0xA0;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 10,800 kHz
    // Mode: Ph. correct PWM top=00FFh
    // OC1A output: Inverted
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xC1;
    TCCR1B=0x05;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 10,800 kHz
    // Mode: Phase correct PWM top=FFh
    // OC2 output: Inverted PWM
    ASSR=0x00;
    TCCR2=0x77;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // Global enable interrupts
    #asm("sei")
    }

    /*==================================================================*/
    void main(void)
    {
    khoi_tao();
    while (1)
    {

    };
    }
    ===========================================================================
    //Bài 2. TRƯỜNG HỢP LED 6 TỐI DẦN
    #include <mega32>
    #include <delay>
    #define pwm OCR1AL
    char n=0,time_out=254;

    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    time_out--;
    pwm=time_out;
    if(time_out<0)
    {
    time_out=254 ;
    }

    }
    /*==================================================*/
    void khoi_tao(void)
    PHẦN NÀY LÀ CHƯƠNG TRÌNH CON GIÔNG TRÊN (ĐOẠN MÀU XANH) KO VIET LẠI NỮA NHA.
    /*==================================================*/
    void main(void)
    {
    khoi_tao();
    while (1)
    {

    };
    }
    ===========================================================================
    // Bài 3 ĐIỀU CHỈNH SÁNG DẦN CHO 8 LED
    #include <mega32>
    #include <delay>
    #define LED PORTD
    void delay(int time_out)
    {
    int i;
    for(i=0;i<time_out;i++)
    delay_us(50);
    }
    /*==================================================*/
    void khoi_tao(void)
    PHẦN NÀY LÀ CHƯƠNG TRÌNH CON GIÔNG TRÊN (ĐOẠN MÀU XANH) KO VIET LẠI NỮA NHA. Lưu ý ở
    PORTD=0x00;
    DDRD=0xFF;
    /*==================================================*/
    void main(void)
    {
    khoi_tao();
    while (1)
    {
    char i,n;
    for(n=0;n<30>254)
    i=0;
    };
    }
    =============================================
    // Bài 4 ĐIỀU CHỈNH TỐI DẦN CHO 8 LED

    GIỐNG BÀI 3 HOÀN TOÀN CHỈ SỦA Ở MỤC TRONG while (1) HAI CHỔ MÀU XANH

    while (1)
    {
    char i,n;
    for(n=0;n<30;n++)
    LED=0x00;
    delay(i);
    LED=0xFF;
    delay(254-i);
    i--;
    if(i<0)
    i=254;

    };
    }
    (Viết cho 8 LED hoàn toàn có thể làm cho 1 LED. bàng cách cho từng PORT. ví dụ: PORTD.0 =.........)
     

Chia sẻ trang này