samir82show

transmitter code

Feb 11th, 2014
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. #include <mega32.h>
  2.  
  3. #ifndef RXB8
  4. #define RXB8 1
  5. #endif
  6.  
  7. #ifndef TXB8
  8. #define TXB8 0
  9. #endif
  10.  
  11. #ifndef UPE
  12. #define UPE 2
  13. #endif
  14.  
  15. #ifndef DOR
  16. #define DOR 3
  17. #endif
  18.  
  19. #ifndef FE
  20. #define FE 4
  21. #endif
  22.  
  23. #ifndef UDRE
  24. #define UDRE 5
  25. #endif
  26.  
  27. #ifndef RXC
  28. #define RXC 7
  29. #endif
  30.  
  31. #define FRAMING_ERROR (1<<FE)
  32. #define PARITY_ERROR (1<<UPE)
  33. #define DATA_OVERRUN (1<<DOR)
  34. #define DATA_REGISTER_EMPTY (1<<UDRE)
  35. #define RX_COMPLETE (1<<RXC)
  36.  
  37. // USART Receiver buffer
  38. #define RX_BUFFER_SIZE 8
  39. char rx_buffer[RX_BUFFER_SIZE];
  40.  
  41. #if RX_BUFFER_SIZE <= 256
  42. unsigned char rx_wr_index,rx_rd_index,rx_counter;
  43. #else
  44. unsigned int rx_wr_index,rx_rd_index,rx_counter;
  45. #endif
  46.  
  47. // This flag is set on USART Receiver buffer overflow
  48. bit rx_buffer_overflow;
  49.  
  50. // USART Receiver interrupt service routine
  51. interrupt [USART_RXC] void usart_rx_isr(void)
  52. {
  53. char status,data;
  54. status=UCSRA;
  55. data=UDR;
  56. if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
  57. {
  58. rx_buffer[rx_wr_index++]=data;
  59. #if RX_BUFFER_SIZE == 256
  60. // special case for receiver buffer size=256
  61. if (++rx_counter == 0)
  62. {
  63. #else
  64. if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
  65. if (++rx_counter == RX_BUFFER_SIZE)
  66. {
  67. rx_counter=0;
  68. #endif
  69. rx_buffer_overflow=1;
  70. }
  71. }
  72. }
  73.  
  74. #ifndef _DEBUG_TERMINAL_IO_
  75. // Get a character from the USART Receiver buffer
  76. #define _ALTERNATE_GETCHAR_
  77. #pragma used+
  78. char getchar(void)
  79. {
  80. char data;
  81. while (rx_counter==0);
  82. data=rx_buffer[rx_rd_index++];
  83. #if RX_BUFFER_SIZE != 256
  84. if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
  85. #endif
  86. #asm("cli")
  87. --rx_counter;
  88. #asm("sei")
  89. return data;
  90. }
  91. #pragma used-
  92. #endif
  93.  
  94. // USART Transmitter buffer
  95. #define TX_BUFFER_SIZE 8
  96. char tx_buffer[TX_BUFFER_SIZE];
  97.  
  98. #if TX_BUFFER_SIZE <= 256
  99. unsigned char tx_wr_index,tx_rd_index,tx_counter;
  100. #else
  101. unsigned int tx_wr_index,tx_rd_index,tx_counter;
  102. #endif
  103.  
  104. // USART Transmitter interrupt service routine
  105. interrupt [USART_TXC] void usart_tx_isr(void)
  106. {
  107. if (tx_counter)
  108. {
  109. --tx_counter;
  110. UDR=tx_buffer[tx_rd_index++];
  111. #if TX_BUFFER_SIZE != 256
  112. if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
  113. #endif
  114. }
  115. }
  116.  
  117. #ifndef _DEBUG_TERMINAL_IO_
  118. // Write a character to the USART Transmitter buffer
  119. #define _ALTERNATE_PUTCHAR_
  120. #pragma used+
  121. void putchar(char c)
  122. {
  123. while (tx_counter == TX_BUFFER_SIZE);
  124. #asm("cli")
  125. if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
  126. {
  127. tx_buffer[tx_wr_index++]=c;
  128. #if TX_BUFFER_SIZE != 256
  129. if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
  130. #endif
  131. ++tx_counter;
  132. }
  133. else
  134. UDR=c;
  135. #asm("sei")
  136. }
  137. #pragma used-
  138. #endif
  139.  
  140. // Standard Input/Output functions
  141. #include <stdio.h>
  142.  
  143. // Declare your global variables here
  144.  
  145. void main(void)
  146. {
  147. // Declare your local variables here
  148. bit state = 0;
  149. unsigned int Press_Conf = 0;
  150. char cmd[] = "vertical:13";
  151.  
  152. PORTC=0x02;
  153. DDRC=0x00;
  154. PORTD=0x00;
  155. DDRD=0x02;
  156.  
  157. // Timer(s)/Counter(s) Interrupt(s) initialization
  158. TIMSK=0x00;
  159.  
  160. UCSRA=0x02;
  161. UCSRB=0xD8;
  162. UCSRC=0x86;
  163. UBRRH=0x00;
  164. UBRRL=0x0C;
  165.  
  166. ACSR=0x80;
  167. SFIOR=0x00;
  168.  
  169. // Global enable interrupts
  170. #asm("sei")
  171.  
  172. while (1)
  173. {
  174. // Place your code here
  175. if(PINC.1 == 0)
  176. {
  177. Press_Conf++;
  178. if(Press_Conf >= 6800)
  179. {
  180. if(state == 0)
  181. {
  182. puts(cmd);
  183. state = 1;
  184. }
  185. else
  186. state = 0;
  187. Press_Conf=0;
  188. }
  189. }
  190. }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment