AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, << AVR C >> 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2;
AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local variables) 16 32 Zero SUB R16,R24 SUBI R16,1 SBC R17,R25 SBCI R17,0 16
AVR C 9 3 Non-destructive comparison CP R16,R24 CPC CPC CPC R17,R25 R18,R26 R19,R27 Zero Switch Switches CASE Straight forward approach switch switch AVR Atmel IAR
AVR C 9 4 AVR C (Assembly) C : Cryptic code Non-portable C : I/O I/O: temp = PIND; IN R16,LOW(16) I/O: TCCR0 = 0x4F; LDI R16,79 OUT LOW(51),R16 I/O 0x1F I/O: PORTB = (1<<PIND2); SBI LOW(24),LOW(2) ADCSR &= ~(1<<ADEN); CBI LOW(6),LOW(7) 0x1F I/O:TCCR0 &= ~(0x80); IN ANDI R16,LOW(51) R16,LOW(127) OUT LOW(51),R16 I/O 0x1F while(pind & (1<<PIND6)); SBIC RJMP?0002 LOW(16),LOW(6) 0x1F while(!(tifr & (1<<TOV0)));
AVR C 9 5 IN R16,LOW(56) SBRS R16,LOW(0) RJMP?000416 8 : char count8 = 5; do while(--count8); LDI R16,5 DEC R16 BRNE?0004 Total 6 bytes 16 : int count16 = 5; do while(--count16); LDI R24,LOW(5) LDI R25,0 SBIW R24,LWRD(1) BRNE?0004Total 8 Bytes startup SRAM void main(void) char local; local=local - 34; SUBI Total 2 bytes R17,LOW(34) char global; void main(void) global=global - 45;
AVR C 9 6 LDS R16,LWRD(global) SUBI R16,LOW(45) STS LWRD(global),R16Total 10 Bytes : typedef struct int t_count; t; char sec; // global seconds char min; // global minutes t time; Void main(void) t *temp = &time; temp->sec++; temp->min++; temp->t_count++; char add(char number1, char number2) return number1+number2; R16-R23 for(; ;) char counter = 100; do while(--counter) ; Pre-decrement for(;;) do while; C AVR,
AVR C 9 7 9.2 C C C, AVR / UART Tool flow : AT90S8515 C Compiler C AVR Studio AVR SL-AVR AVR : Port D ( ) Port B (LED, ) ( 920.c) #include <io8515.h> /* AT90S8515 */ void main(void) char c; DDRB = 0xFF; /* PortB all outputs */ for(;;) /* Eternal loop */ c = PIND; /* Read Port D */ PORTB = c; /* Port B */ 9.2.1. C IAR Readme,,,, 921,,, 9.2.2 C IAR
AVR C 9 8 922 923
AVR C 9 9 Project -> Options
AVR C 9 10
AVR C 9 11 928 929, Project Make F9,,,,, 929
AVR C 9 12 9., *.d90, *.a90, 9210 9210 9.2.3 AVR Studio, C, 3.2 1. AVR Studio, 2. (TestProg.d90) - File -> Open 9211 AT90S8515 ( ) VIEW I/O (PinB, PortD) Processor Watch»c»PORTB»PIND, Toggle PIND bits 9211 Debug 9.2.4 ( 3.30 AVR )
AVR C 9 13 9.3 Main main C : void main(void) /* */ I/O #include <io8515.h> /* 8515 */ void main(void) DDRD = 0xFF; 9.3.1 / #include <io8515.h> void main(void) char c; /* Port D */ /* AT90S8515 */ DDRB = 0xFF; /* PortB */ for(;;) /* */ c = PIND; /* Port D */ PORTB = c; /* Port B */ 9.3.2 #include <io8515.h> /* 8515 */ void delay(unsigned int delayvalue) unsigned int i; for(i=0;i<delayvalue;i++) /* */ ; /* Do nothing */ 9.3.2A: void main(void)
AVR C 9 14 unsigned char runner = 0x01; DDRB = 0xff; for (;;) if (runner) runner <<= 1; /* Port B */ /* */ else runner = 0x01; PORTB = runner; /* LED */ delay(100); /* */ 9.3.3 /E2PROM /* IAR I/O /E2PROM */ #include <io8515.h> #include <ina90.h> void main(void) char temp = 0; _EEPUT(0x10,temp); /* E2PROM 0x10 */ _EEGET(temp,0x10); /* E2PROM 0x10 */
AVR C 9 15
AVR C 9 16
AVR C 9 17
AVR C 9 18
AVR C 9 19
AVR C 9 20
AVR C 9 21
AVR C 9 22
AVR C 9 23
AVR C 9 24
AVR C 9 25
AVR C 9 26
AVR C 9 27 A3 331 (510630), :020-87578852 85510191 13808842100 132 616 (100086), :010-82623551 82623550 13601177874 E-mail: gzsl@sl.com.cn; E-mail: bjslbb@ihw.com.cn; http://www.sl.com.cn