20 Dec 09:52
Mikro
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#define GPIO_PINS_ALL (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7)
int calculateNWD(a, b) {
if(a%b != 0) {
b = a%b;
a = b;
calculateNWD(a, b);
}
else return b;
}
int main(void)
{
uint8_t counterH = 0;
uint8_t counterJ = 0;
uint8_t difference = 0;
uint8_t nwd = 0;
uint8_t NWW = 0;
ROM_SysCtlClockSet(SYSCTL_SYSDIV_20 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PINS_ALL);
for (;;)
{
if (GPIOPinRead(GPIO_PORTH_BASE, GPIO_PINS_ALL))
{
counterH++;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PINS_ALL, counterH);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PINS_ALL, counterJ);
}
if (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_0))
{
counterJ++;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PINS_ALL, counterH);
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PINS_ALL, counterJ);
}
nwd = calculateNWD(counterH, counterJ);
NWW = (counterH*counterJ)/nwd;
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PINS_ALL, nwd);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PINS_ALL, NWW);
difference = counterH - counterJ;
GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PINS_ALL, difference);
SysCtlDelay(SysCtlClockGet() / 2);
}
return 0;
}