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;
- // Input/Output Ports initialization
- // Port A initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTA=0x00;
- DDRA=0x00;
- // Port B initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTB=0x00;
- DDRB=0x00;
- // Port C initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTC=0x02;
- DDRC=0x01;
- // Port D initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTD=0x00;
- DDRD=0x00;
- // Timer/Counter 0 initialization
- // Clock source: System Clock
- // Clock value: Timer 0 Stopped
- // Mode: Normal top=0xFF
- // OC0 output: Disconnected
- TCCR0=0x00;
- TCNT0=0x00;
- OCR0=0x00;
- // Timer/Counter 1 initialization
- // Clock source: System Clock
- // Clock value: Timer1 Stopped
- // Mode: Normal top=0xFFFF
- // OC1A output: Discon.
- // OC1B output: Discon.
- // Noise Canceler: Off
- // Input Capture on Falling Edge
- // Timer1 Overflow Interrupt: Off
- // Input Capture Interrupt: Off
- // Compare A Match Interrupt: Off
- // Compare B Match Interrupt: Off
- TCCR1A=0x00;
- TCCR1B=0x00;
- TCNT1H=0x00;
- TCNT1L=0x00;
- ICR1H=0x00;
- ICR1L=0x00;
- OCR1AH=0x00;
- OCR1AL=0x00;
- OCR1BH=0x00;
- OCR1BL=0x00;
- // Timer/Counter 2 initialization
- // Clock source: System Clock
- // Clock value: Timer2 Stopped
- // Mode: Normal top=0xFF
- // OC2 output: Disconnected
- ASSR=0x00;
- TCCR2=0x00;
- TCNT2=0x00;
- OCR2=0x00;
- // External Interrupt(s) initialization
- // INT0: Off
- // INT1: Off
- // INT2: Off
- MCUCR=0x00;
- MCUCSR=0x00;
- // Timer(s)/Counter(s) Interrupt(s) initialization
- TIMSK=0x00;
- // USART initialization
- // Communication Parameters: 8 Data, 1 Stop, No Parity
- // USART Receiver: On
- // USART Transmitter: On
- // USART Mode: Asynchronous
- // USART Baud Rate: 2400
- UCSRA=0x00;
- UCSRB=0xD8;
- UCSRC=0x86;
- UBRRH=0x00;
- UBRRL=0x19;
- // Analog Comparator initialization
- // Analog Comparator: Off
- // Analog Comparator Input Capture by Timer/Counter 1: Off
- ACSR=0x80;
- SFIOR=0x00;
- // ADC initialization
- // ADC disabled
- ADCSRA=0x00;
- // SPI initialization
- // SPI disabled
- SPCR=0x00;
- // TWI initialization
- // TWI disabled
- TWCR=0x00;
- // Global enable interrupts
- #asm("sei")
- while (1)
- {
- // Place your code here
- if(PINC.1 == 0)
- {
- if(state == 0)
- {
- putchar(128);
- state = 1;
- }
- else
- state = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment