Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. /*
  2. * lab5.c
  3. *
  4. * Created: 10/23/2019 6:18:50 PM
  5. * Author : Nick Grant
  6. */
  7.  
  8. #include <avr/io.h>
  9. #include "scheduler.h"
  10.  
  11. #define SET_BIT(p,i) ((p) |= (1 << (i)))
  12. #define CLR_BIT(p,i) ((p) &= ~(1 << (i)))
  13. #define GET_BIT(p,i) ((p) & (1 << (i)))
  14. #define SHIFT_REG PORTA
  15.  
  16. void transmit_data(unsigned char data){
  17. unsigned char tmp = data;
  18. // SER = 0, RCLK = 1, SRCLK = 2, SRCLR = 3
  19. SET_BIT(SHIFT_REG, 3); // set SRCLR high
  20. CLR_BIT(SHIFT_REG, 1); // set RCLK low
  21. for(int i = 0; i < 8; i++){
  22. CLR_BIT(SHIFT_REG, 2); // set SRCLK low
  23. tmp = GET_BIT(data, i);
  24. if(tmp) {
  25. SET_BIT(SHIFT_REG, 0); // set SER to data to be transmitted
  26. }
  27. else {
  28. CLR_BIT(SHIFT_REG, 0);
  29. }
  30. SET_BIT(SHIFT_REG, 2); // set SRCLK high
  31. }
  32.  
  33. SET_BIT(SHIFT_REG, 1); // set RCLK high
  34. CLR_BIT(SHIFT_REG, 3); // set SRCLR low
  35. }
  36.  
  37. unsigned long tasksPeriod_Sequence = 100;
  38. unsigned long tasksPeriodGCD = 100;
  39. unsigned char tasksNum = 1;
  40. task tasks[1];
  41.  
  42. unsigned char temp, btnAdd, btnSub = 0x00;
  43. enum ADD_SUB {AS_START, AS_WAIT, AS_ADD, AS_SUB, AS_RESET};
  44. int TickFct_AS (int state) {
  45. btnAdd = ~(PINB & 0x01);
  46. btnSub = ~(PINB & 0x02);
  47. switch(state) {
  48. case AS_START:
  49. state = AS_WAIT;
  50. break;
  51. case AS_WAIT:
  52. if (btnAdd) {
  53. if (btnSub) {
  54. state = AS_RESET;
  55. }
  56. state = AS_ADD;
  57. }
  58. else if (btnSub) {
  59. if (btnAdd) {
  60. state = AS_RESET;
  61. }
  62. state = AS_SUB;
  63. }
  64. else {
  65. state = AS_WAIT;
  66. }
  67. break;
  68. case AS_ADD:
  69. state = AS_WAIT;
  70. break;
  71. case AS_SUB:
  72. state = AS_WAIT;
  73. break;
  74. case AS_RESET:
  75. state = AS_WAIT;
  76. break;
  77. default:
  78. state = AS_START;
  79. break;
  80. }
  81. switch(state) {
  82. case AS_START:
  83. temp = 0x00;
  84. transmit_data(0x55);
  85. break;
  86. case AS_WAIT:
  87. break;
  88. case AS_ADD:
  89. if (temp < 0xFF) {
  90. temp++;
  91. }
  92. transmit_data(temp);
  93. break;
  94. case AS_SUB:
  95. if (temp > 0x00) {
  96. temp--;
  97. }
  98. transmit_data(temp);
  99. break;
  100. case AS_RESET:
  101. temp = 0x00;
  102. transmit_data(temp);
  103. break;
  104. default:
  105. break;
  106. }
  107.  
  108. return state;
  109. };
  110.  
  111. int main(void)
  112. {
  113. DDRA = 0xFF; PORTA = 0x00;
  114. DDRB = 0x00; PORTB = 0xFF;
  115. DDRC = 0xFF; PORTC = 0x00;
  116.  
  117. TimerSet(50);
  118. TimerOn();
  119. // transmit_data(0xFA);
  120. tasks[0].TickFct = &TickFct_AS;
  121. tasks[0].state = AS_START;
  122. tasks[0].period = 100;
  123. tasks[0].elapsedTime = 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement