¸®¸ðÄÜ Åë½Å ´ÜÀÚ·Î ¸ðÇüÀÚµ¿Â÷ Á¦¾î
|
/********************************************* This program was produced by the CodeWizardAVR V1.23.8b Standard Automatic Program Generator ?Copyright 1998-2003 HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:office@hpinfotech.ro Project : Version : Date : 2003-06-30 Author : Cheol-Oh Kim
Company : RealSYS
Comments: Chip type :
ATmega128 Program type : Application Clock frequency :
16.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 1024 *********************************************/ #include <mega128.h> #include
<stdio.h> #include
<string.h> #include
<delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B #endasm #include <lcd.h> #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY
(1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART0 Receiver buffer #define RX_BUFFER_SIZE0 8 char rx_buffer0[RX_BUFFER_SIZE0]; unsigned char
rx_wr_index0,rx_rd_index0,rx_counter0; // This flag is set on USART0 Receiver
buffer overflow bit rx_buffer_overflow0; char
sbuf[20],rmCount; eeprom char vel; // USART0 Receiver interrupt service
routine #pragma savereg- interrupt [USART0_RXC] void
uart0_rx_isr(void) { char status,data; #asm push r26 push r27 push r30 push r31 in
r26,sreg push r26 #endasm status=UCSR0A; data=UDR0; if(data == 0x52) {//¹®ÀÚ R rx_wr_index0
= 0; rmCount
= 0; } if ((status & (FRAMING_ERROR |
PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer0[rx_wr_index0]=data; if (++rx_wr_index0 == RX_BUFFER_SIZE0)
rx_wr_index0=0; if (++rx_counter0 == RX_BUFFER_SIZE0) { rx_counter0=0; rx_buffer_overflow0=1; }; }; #asm pop
r26 out
sreg,r26 pop
r31 pop
r30 pop
r27 pop
r26 #endasm if(rx_buffer0[0]==0x52
&& rx_buffer0[1]==0x4d && rmCount==2) { switch(rx_buffer0[2])
{ case
0x00 : //
ÀüÁø PORTC=0x05; break; case
0x01 : //
ÈÄÁø PORTC=0x0a; break; case
0x02 : //
¿ìȸÀü PORTC=0x06; break; case
0x03 : //
ÁÂȸÀü PORTC=0x09; break; case
0x44 : //
Á¤Áö PORTC=0x00; break; case
0x04 : //
¼ÓµµÁõ°¡ if(vel!=0xff) vel++; OCR0 =
vel; break; case
0x05 : //
¼Óµµ°¨¼Ò if(vel!=0x00) vel--; OCR0 =
vel; break; } } rmCount++; } #pragma savereg+ #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART0
Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter0==0); data=rx_buffer0[rx_rd_index0]; if (++rx_rd_index0 == RX_BUFFER_SIZE0)
rx_rd_index0=0; #asm("cli") --rx_counter0; #asm("sei") return data; } #pragma used- #endif // USART0 Transmitter buffer #define TX_BUFFER_SIZE0 8 char tx_buffer0[TX_BUFFER_SIZE0]; unsigned char
tx_wr_index0,tx_rd_index0,tx_counter0; // USART0 Transmitter interrupt service
routine #pragma savereg- interrupt [USART0_TXC] void
uart0_tx_isr(void) { #asm push r26 push r27 push r30 push r31 in
r26,sreg push r26 #endasm if (tx_counter0) { --tx_counter0; UDR0=tx_buffer0[tx_rd_index0]; if (++tx_rd_index0 == TX_BUFFER_SIZE0)
tx_rd_index0=0; }; #asm pop
r26 out
sreg,r26 pop
r31 pop
r30 pop
r27 pop
r26 #endasm } #pragma savereg+ #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART0
Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while (tx_counter0 == TX_BUFFER_SIZE0); #asm("cli") if (tx_counter0 || ((UCSR0A &
DATA_REGISTER_EMPTY)==0)) { tx_buffer0[tx_wr_index0]=c; if (++tx_wr_index0 == TX_BUFFER_SIZE0)
tx_wr_index0=0; ++tx_counter0; } else UDR0=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 // Input/Output Ports initialization // Port A initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T
State4=T State5=T State6=T State7=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func0=Out Func1=Out Func2=Out
Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out // State0=0 State1=0 State2=0 State3=0
State4=0 State5=0 State6=0 State7=0 PORTB=0x00; DDRB=0xFF; // Port C initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T
State4=T State5=T State6=T State7=T PORTC=0x00; DDRC=0xFF; // Port D initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T
State4=T State5=T State6=T State7=T PORTD=0x00; DDRD=0x00; // Port E initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T
State4=T State5=T State6=T State7=T PORTE=0x00; DDRE=0x00; // Port F initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T
State4=T State5=T State6=T State7=T PORTF=0x00; DDRF=0x00; // Port G initialization // Func0=In Func1=In Func2=In Func3=In
Func4=In // State0=T State1=T State2=T State3=T
State4=T PORTG=0x00; DDRG=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected ASSR=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // Timer/Counter 3 initialization // Clock source: System Clock // Clock value: Timer 3 Stopped // Mode: Normal top=FFFFh // OC3A output: Discon. // OC3B output: Discon. // OC3C output: Discon. TCCR3A=0x00; TCCR3B=0x00; TCNT3H=0x00; TCNT3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; OCR3CH=0x00; OCR3CL=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off // INT3: Off // INT4: Off // INT5: Off // INT6: Off // INT7: Off EICRA=0x00; EICRB=0x00; EIMSK=0x00; // Timer(s)/Counter(s) Interrupt(s)
initialization TIMSK=0x00; ETIMSK=0x00; // USART0 initialization // Communication Parameters: 8 Data, 1
Stop, No Parity // USART0 Receiver: On // USART0 Transmitter: On // USART0 Mode: Asynchronous // USART0 Baud rate: 9600 UCSR0A=0x00; UCSR0B=0xD8; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x67; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by
Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") // (1) Fast PWM
Mode ATmega128(L) Data
Book P100 ÁÖ±âÁ¶Àý //
16M(ClkTOS)/1024=15625 Hz TCCR0 = 0x6f; // ATmega128(L) Data
Book P102 µàƼºñÁ¶Àý ÃʱâµàƼ=50 OCR0 = vel; while (1) { // Place your code here }; }
|
Áß¿äÇÔ¼ö |
|