Jarvis @ JM.me

Micro Processor Lab

Oct 6 · 50min امیرمحمد - حامد سربازی

Little practice for Micro Processor Lab

(حل و پاسخ تمارین آز ریزپردازنده)

Practice 1

Use 8 LED and light them up in simulator

CODE

/*
 * Flasher.c
 *
 * Created: 9/29/2024 11:13:44 AM
 * Author: AMIR-MOHAMMAD-SAFARI
 */

#include <delay.h>
#include <mega32.h>

int i;
void main(void) {
    DDRD = 0xFF;  // Set PORTD as output
    while (1) {
        // First loop to shift bits from 1 to 128
        for (i = 1; i <= 128; i = i * 2) {
            PORTD = i;
            delay_ms(100);
        }

        // Second loop to shift bits from 64 back to 1
        for (i = 64; i >= 1; i = i / 2) {
            PORTD = i;
            delay_ms(100);
        }
    }
}

Schematic


Practice 2

Light up the LED Counter in simulator

  • 0 to 9
  • 9 to 0
  • Speed of counting
  • Count 0 to 5

CODE 0 to 9 and 9 to 0

/*
 * CounterLED.c
 *
 * Created: 10/6/2024 9:43:52 AM
 * Author: AMIR-MOHAMMAD-SAFARI
 */

#include <mega32.h>
#include <stdio.h>
#include <delay.h>

void main (void) {
    DDRC.0 = 0;
    DDRA = 0xFF;

    while(1) {
        if (PINC.0 == 1) {
            int i = 0;

            while(i < 10) {
                PORTA = i;
                i++;
                delay_ms(50); // Speed 50 MS
            }
        }
        else {
            int i = 9;
            while(i >= 0) {
                PORTA = i;
                i--;
                delay_ms(50); // Speed 50 MS
            }
        }
    }
}

Changes that count 0 to 5

while(i < 5) {
    PORTA = i;
    i++;
    delay_ms(50);
}
else {
    int i = 5;
	while(i >= 0) {
	    PORTA = i;
	    i--;
	    delay_ms(50);
	}
}

Schematic


Practice 3

Algorithm that show Sum and Multiply of numbers and show on LED

We have 4 SW_SPDT

  • A0 and A1
  • B0 and B1

Currect project is on ATMEGA32

CODE

/*
 * LED_StarPlus.c
 *
 * Created: 10/13/2024 8:23:08 AM
 * Author: JARVIS
 */

#include <mega32.h>
#include <stdio.h>
#include <delay.h>

void main (void) {
    DDRD = 0xFF;
    DDRC.0 = 0;
    DDRA = 0x00;
    DDRB = 0x00;
    
    while (1) {
        if (PINC.0 == 1) {
            PORTD = PINA + PINB;
        }
        else {
            PORTD = PINA * PINB;
        }
    }
}

Schematic


Practice 4

Showing something on LCD, which is LM016L. We can even clear screen or change position of things on LCD.

Currect project is on ATMEGA32

CODE

/*
 * LCD_16Bit_Code_C.c
 *
 * Created: 10/20/2024 8:13:19 AM
 * Author: JARVIS
 */

#include <mega32.h>
#include <stdio.h>
#include <delay.h>

#asm
    .equ __lcd_port = 0x18;
#endasm

#include <lcd.h>

void main(void) {
    PORTB = 0x00;
    DDRB = 0x00;
    
    lcd_init(16);
    lcd_clear();
    
    lcd_gotoxy(0,0);
	lcd_putsf("Amir Mohammad");
	
    lcd_gotoxy(9,1);
	lcd_putsf("Safari");
}

Schematic

SCROLLER Practice 4 - 1

CODE

/*
 * LCD_16Bit_Code_C_Move.c
 *
 * Created: 10/20/2024 10:37:27 AM
 * Author: JARVIS
 */

#include <mega32.h>
#include <stdio.h>
#include <delay.h>

#asm
    .equ __lcd_port = 0x18;
#endasm

#include <lcd.h>

void main(void) {
    char name[] = "Amir Mohammad Safari    ";
    int len = 23;
    int i;

    PORTB = 0x00;
    DDRB = 0x00;
    
    lcd_init(32);

    while (1) {
        for (i = 0; i < len - 1; i++) {
            lcd_clear();
            lcd_gotoxy(0, 0);
            lcd_puts(&name[i]);
            delay_ms(20);
        }
    }
}

Credit

  • Mr. Hamed Sarbazi (Teacher)
  • Mr. Amir Mohammad Safari (TA)
> Comment on twitter (X)
 
CC BY-NC-SA 4.0  2009-PRESENT © Nuxsco (AMS) This website rewrite several times from those years up to present