P4 Changed Interrupt PortB -> PortC; Unfinished implementation of PortB for teens

This commit is contained in:
S170H
2023-12-06 14:14:59 +01:00
parent c6080d47db
commit ee22ff0819
32 changed files with 1904 additions and 152 deletions

View File

@@ -0,0 +1,58 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL // 16MHz clock frequency
#define LED_PIN PD0 // LED is connected to Pin D0
volatile uint32_t systemClock = 0;
void setupTimer0() {
// Configure Timer0 for CTC mode
TCCR0A |= (1 << WGM01); // Set Waveform Generation Mode bits for CTC
TCCR0B |= (1 << CS01) | (1 << CS00); // Set prescaler to 64
OCR0A = 249; // Set Output Compare Register to 249 for ~1ms interrupt
TIMSK0 |= (1 << OCIE0A); // Enable Timer0 Output Compare A Match interrupt
}
// Timer0 Output Compare A Match Interrupt Service Routine
ISR(TIMER0_COMPA_vect) {
systemClock++; // Increment the milliseconds counter
}
uint32_t getSystemClock(){
cli();
uint32_t tempSystemClock = systemClock;
sei();
return tempSystemClock;
}
void waitFor(uint32_t ms) {
uint32_t endTime = getSystemClock() + ms;
while (getSystemClock() != endTime);
}
void waitUntil(uint32_t ms) {
while (getSystemClock() != ms);
}
void initializeLED() {
DDRD |= (1 << LED_PIN); // Set LED_PIN as an output
}
void toggleLED() {
PORTD ^= (1 << LED_PIN); // Toggle the LED
}
int main(void) {
initializeLED(); // Initialize the LED pin
setupTimer0(); // Setup Timer0
//sei(); // Enable global interrupts
waitUntil(500); // Wait until 500 ms have passed
toggleLED(); // Toggle the LED to turn it on
while (1) {
waitFor(500); // Wait for 500 ms
toggleLED(); // Toggle the LED
}
}