Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * lab5.c
- *
- * Created: 10/23/2019 6:18:50 PM
- * Author : Nick Grant
- */
- #include <avr/io.h>
- #include "scheduler.h"
- #define SET_BIT(p,i) ((p) |= (1 << (i)))
- #define CLR_BIT(p,i) ((p) &= ~(1 << (i)))
- #define GET_BIT(p,i) ((p) & (1 << (i)))
- #define SHIFT_REG PORTA
- void transmit_data(unsigned char data){
- unsigned char tmp = data;
- // SER = 0, RCLK = 1, SRCLK = 2, SRCLR = 3
- SET_BIT(SHIFT_REG, 3); // set SRCLR high
- CLR_BIT(SHIFT_REG, 1); // set RCLK low
- for(int i = 0; i < 8; i++){
- CLR_BIT(SHIFT_REG, 2); // set SRCLK low
- tmp = GET_BIT(data, i);
- if(tmp) {
- SET_BIT(SHIFT_REG, 0); // set SER to data to be transmitted
- }
- else {
- CLR_BIT(SHIFT_REG, 0);
- }
- SET_BIT(SHIFT_REG, 2); // set SRCLK high
- }
- SET_BIT(SHIFT_REG, 1); // set RCLK high
- CLR_BIT(SHIFT_REG, 3); // set SRCLR low
- }
- unsigned long tasksPeriod_Sequence = 100;
- unsigned long tasksPeriodGCD = 100;
- unsigned char tasksNum = 1;
- task tasks[1];
- unsigned char temp, btnAdd, btnSub = 0x00;
- enum ADD_SUB {AS_START, AS_WAIT, AS_ADD, AS_SUB, AS_RESET};
- int TickFct_AS (int state) {
- btnAdd = ~(PINB & 0x01);
- btnSub = ~(PINB & 0x02);
- switch(state) {
- case AS_START:
- state = AS_WAIT;
- break;
- case AS_WAIT:
- if (btnAdd) {
- if (btnSub) {
- state = AS_RESET;
- }
- state = AS_ADD;
- }
- else if (btnSub) {
- if (btnAdd) {
- state = AS_RESET;
- }
- state = AS_SUB;
- }
- else {
- state = AS_WAIT;
- }
- break;
- case AS_ADD:
- state = AS_WAIT;
- break;
- case AS_SUB:
- state = AS_WAIT;
- break;
- case AS_RESET:
- state = AS_WAIT;
- break;
- default:
- state = AS_START;
- break;
- }
- switch(state) {
- case AS_START:
- temp = 0x00;
- transmit_data(0x55);
- break;
- case AS_WAIT:
- break;
- case AS_ADD:
- if (temp < 0xFF) {
- temp++;
- }
- transmit_data(temp);
- break;
- case AS_SUB:
- if (temp > 0x00) {
- temp--;
- }
- transmit_data(temp);
- break;
- case AS_RESET:
- temp = 0x00;
- transmit_data(temp);
- break;
- default:
- break;
- }
- return state;
- };
- int main(void)
- {
- DDRA = 0xFF; PORTA = 0x00;
- DDRB = 0x00; PORTB = 0xFF;
- DDRC = 0xFF; PORTC = 0x00;
- TimerSet(50);
- TimerOn();
- // transmit_data(0xFA);
- tasks[0].TickFct = &TickFct_AS;
- tasks[0].state = AS_START;
- tasks[0].period = 100;
- tasks[0].elapsedTime = 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement