fateme91
Member level 2
- Joined
- Nov 18, 2014
- Messages
- 48
- Helped
- 2
- Reputation
- 4
- Reaction score
- 2
- Trophy points
- 18
- Location
- Iran,Mashad
- Activity points
- 349
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 #include <mega128a.h> #include <stdio.h> #include <stdlib.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) // USART0 Receiver buffer #define RX_BUFFER_SIZE0 8 char rx_buffer0[RX_BUFFER_SIZE0]; #if RX_BUFFER_SIZE0 <= 256 unsigned char rx_wr_index0,rx_rd_index0,rx_counter0; #else unsigned int rx_wr_index0,rx_rd_index0,rx_counter0; #endif // This flag is set on USART0 Receiver buffer overflow bit rx_buffer_overflow0; // USART0 Receiver interrupt service routine interrupt [USART0_RXC] void usart0_rx_isr(void) { char status,data; status=UCSR0A; data=UDR0; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer0[rx_wr_index0++]=data; #if RX_BUFFER_SIZE0 == 256 // special case for receiver buffer size=256 if (++rx_counter0 == 0) rx_buffer_overflow0=1; #else if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0; if (++rx_counter0 == RX_BUFFER_SIZE0) { rx_counter0=0; rx_buffer_overflow0=1; } #endif } } #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_BUFFER_SIZE0 != 256 if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0; #endif #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]; #if TX_BUFFER_SIZE0 <= 256 unsigned char tx_wr_index0,tx_rd_index0,tx_counter0; #else unsigned int tx_wr_index0,tx_rd_index0,tx_counter0; #endif // USART0 Transmitter interrupt service routine interrupt [USART0_TXC] void usart0_tx_isr(void) { if (tx_counter0) { --tx_counter0; UDR0=tx_buffer0[tx_rd_index0++]; #if TX_BUFFER_SIZE0 != 256 if (tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0; #endif } } #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_BUFFER_SIZE0 != 256 if (tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0; #endif ++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) { unsigned char h; char data; char a[10]; PORTD=0x00; DDRD=0x01; // 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; #asm("sei") putchar ('A'); while (1) { if (data=='A') { a=='B'; gets (a,10); } } }
#include
#include
#include
#define xtal 4000000L
#define baud 9600
char get_data(void)
{
while((UCSR0A & RXC) == 0)
;
return UDR0;
}
void put_data(char c)
{
while((UCSR0A & UDRE0) == 0)
;
UDR0 =c;
}
void main(void)
{
char k;
UBRR0L=xtal/16/baud-1;
UCSR0B= ((1<<RXEN0)|(1<<TXEN0));
while(1)
{
k = get_data();
put_data(k);
};
}
Sending page #0 multiple times means that it's either not correctly processed by the bootloader or there's a connection problem.
Did you understand the requirements for an application used together with a bootloader?
Tnks but i didnot get my answer....
I think respected FvM sir means did you know that your application really need a bootloader programming.He means Bootloader is used when you need to update your application firmware on the feild or many updates is required in application firmware .Does your application need that? correct me If I am wrong FvM sir
Common error.
-
Wrong fuse bit setting, «Boot on reset, Boot size, Speed» .
-
Wrong setting in ICCAVR option menu.
-
Forget to define your MCU in the assembly.s file.
-
Use the monitor windows in MegaLoad to see if there is communication.
-
If you only need flash programing don’t set the fusebit programing on.
-
If you only need flash programing don’t set the eeprom programing on.
-
See and check above any might be problem and this was mentioned in the tutorial.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?