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