Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <mega32.h>
- #ifndef RXB8
- #define RXB8 1
- #endif
- #ifndef TXB8
- #define TXB8 0
- #endif
- #ifndef UPE
- #define UPE 2
- #endif
- #ifndef DOR
- #define DOR 3
- #endif
- #ifndef FE
- #define FE 4
- #endif
- #ifndef UDRE
- #define UDRE 5
- #endif
- #ifndef RXC
- #define RXC 7
- #endif
- #define FRAMING_ERROR (1<<FE)
- #define PARITY_ERROR (1<<UPE)
- #define DATA_OVERRUN (1<<DOR)
- #define DATA_REGISTER_EMPTY (1<<UDRE)
- #define RX_COMPLETE (1<<RXC)
- // USART Receiver buffer
- #define RX_BUFFER_SIZE 8
- char rx_buffer[RX_BUFFER_SIZE];
- #if RX_BUFFER_SIZE <= 256
- unsigned char rx_wr_index,rx_rd_index,rx_counter;
- #else
- unsigned int rx_wr_index,rx_rd_index,rx_counter;
- #endif
- // This flag is set on USART Receiver buffer overflow
- bit rx_buffer_overflow;
- // USART Receiver interrupt service routine
- interrupt [USART_RXC] void usart_rx_isr(void)
- {
- char status,data;
- status=UCSRA;
- data=UDR;
- if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
- {
- rx_buffer[rx_wr_index++]=data;
- #if RX_BUFFER_SIZE == 256
- // special case for receiver buffer size=256
- if (++rx_counter == 0)
- {
- #else
- if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
- if (++rx_counter == RX_BUFFER_SIZE)
- {
- rx_counter=0;
- #endif
- rx_buffer_overflow=1;
- }
- }
- }
- #ifndef _DEBUG_TERMINAL_IO_
- // Get a character from the USART Receiver buffer
- #define _ALTERNATE_GETCHAR_
- #pragma used+
- char getchar(void)
- {
- char data;
- while (rx_counter==0);
- data=rx_buffer[rx_rd_index++];
- #if RX_BUFFER_SIZE != 256
- if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
- #endif
- #asm("cli")
- --rx_counter;
- #asm("sei")
- return data;
- }
- #pragma used-
- #endif
- // USART Transmitter buffer
- #define TX_BUFFER_SIZE 8
- char tx_buffer[TX_BUFFER_SIZE];
- #if TX_BUFFER_SIZE <= 256
- unsigned char tx_wr_index,tx_rd_index,tx_counter;
- #else
- unsigned int tx_wr_index,tx_rd_index,tx_counter;
- #endif
- // USART Transmitter interrupt service routine
- interrupt [USART_TXC] void usart_tx_isr(void)
- {
- if (tx_counter)
- {
- --tx_counter;
- UDR=tx_buffer[tx_rd_index++];
- #if TX_BUFFER_SIZE != 256
- if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
- #endif
- }
- }
- #ifndef _DEBUG_TERMINAL_IO_
- // Write a character to the USART Transmitter buffer
- #define _ALTERNATE_PUTCHAR_
- #pragma used+
- void putchar(char c)
- {
- while (tx_counter == TX_BUFFER_SIZE);
- #asm("cli")
- if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
- {
- tx_buffer[tx_wr_index++]=c;
- #if TX_BUFFER_SIZE != 256
- if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
- #endif
- ++tx_counter;
- }
- else
- UDR=c;
- #asm("sei")
- }
- #pragma used-
- #endif
- // Standard Input/Output functions
- #include <stdio.h>
- // Declare your global variables here
- void main(void)
- {
- // Declare your local variables here
- bit state = 0;
- unsigned int Press_Conf = 0;
- char cmd[] = "vertical:13";
- PORTC=0x02;
- DDRC=0x00;
- PORTD=0x00;
- DDRD=0x02;
- // Timer(s)/Counter(s) Interrupt(s) initialization
- TIMSK=0x00;
- UCSRA=0x02;
- UCSRB=0xD8;
- UCSRC=0x86;
- UBRRH=0x00;
- UBRRL=0x0C;
- ACSR=0x80;
- SFIOR=0x00;
- // Global enable interrupts
- #asm("sei")
- while (1)
- {
- // Place your code here
- if(PINC.1 == 0)
- {
- Press_Conf++;
- if(Press_Conf >= 6800)
- {
- if(state == 0)
- {
- puts(cmd);
- state = 1;
- }
- else
- state = 0;
- Press_Conf=0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment