Shift Register Service

This service is responsible for displaying the time elapsed in binary through a shift register that controls 6 LEDs.

Constants and Module Variables

Module Defines

Static uint8_t Elapsed, ONE_SEC 1000

Constants

#define SR_DATA LATBbits.LATB12

#define SR_DATA_MODE TRISBbits.TRISB12

#define SR_SRCLK LATAbits.LATA4

#define SR_SRCLK_MODE TRISAbits.TRISA4

#define SR_STCLK LATBbits.LATB6

#define SR_STCLK_MODE TRISBbits.TRISB6

Module Functions

PulseClock

Set SR_SRCLK to 1 

set uint16_t curr_time to ES_Timer_GetTime()

init timer for 10ms

while currentTime is less than curr_time + 10();

set SR_SRCLK to 0

curr_time to ES_Timer_GetTime()

init timer for 10ms

while currentTime is less than curr_time + 10();


PulseLatch

Set SR_STCLK to 1 

set uint16_t curr_time to ES_Timer_GetTime()

init timer for 10ms

while currentTime is less than curr_time + 10();

set SR_STCLK to 0


send_data

Input: uint8_t LEDVal 

for (int i = 0 between 8, i++):

set SR_DATA to (LEDVal >> i) & (0x01)

call PulseClock()

call PulseLatch()


PostSRService

Input: ES_Event_t

Post to service(priority, event)

Service Initialization

InitSRService

Input: priority

Create ES_Event_t ThisEvent

Set SR_DATA_MODE, SR_SRCLK_MODE, SR_STCLK_MODE to 0

Set SR_DATA, SR_SRCLK, SR_STCLK to 0

Post initial ES_INIT

Service Run

RunSRService

Input: Event ThisEvent


Declare ReturnEvent to be ES_NO_EVENT

Declare PostEvent to be ES_NO_EVENT


Switch statement for CurrentEvent

Case ES_BEGIN:

Set Elapsed to 0b00000000

Init Timer ONE_SEC

Break;

Case ES_TIMEOUT:

Set SR_STCLK to 0

Increment Elapsed by 0b00000001

if elapsed exceeds 0b010000000:

set elapsed to 0b00000000

sendData(Elapsed)

Init Timer ONE_SEC

Break;

return ReturnEvent