MCS51 AVR MCS51 AVR ATMEL AVR RISC MCS51 AVR 1 MHZ 1MIPS 8MHZ AVR 224MHZ MCS51 FLASH EEPROM ISP WatchDog AVR MCS51 AT90S1200/2313 AT89C1051/2051 AT90S4414/8515 AT89C51/52 PCB / AVR C ICCAVR60 AVR C IAR A90 CodeVision AVR AVR MCS51 1 MCS51 MOV MOVX MOVC AVR AT90S8515 1 000H~FFFH LPM 2 0060H~025FH STS LDS ST LD 3 0260H~FFFFH STS LDS ST LD 4 32 R0~R31 MOV 5 I/O 00H~3FH IN OUT 0000H~005FH R0~R31 I/O 32 0000H~001FH 64 I/O 0020H~005FH AVR
MCS51 AVR SRAM X Y Z 2 MCS51 SP SP AVR SP MCS51 SP 1 MCS51 SRAM AVR SRAM SRAM 2 AVR SP SRAM SRAM SPL SPH 3 SP SRAM 8515 025FH 4 AT90S1200 SP 5 AVR SP AVR Studio 3 SRAM MCS51 SRAM MOVX AVR SRAM SRAM SRAM MCUCR SRE D7 SRW D6 SRE SRW SE SM ISC11 ISC10 ISC01 ISC00 MCUCR SRE=1 SRAM SBI MCUCR SRE SRE=0 SRAM CBI MCUCR SRE SRW=1 SRAM SBI MCUCR SRW SRW=0 SRAM SBI MCUCR SRW C MCUCR =0xC0 MCUCR&=0x3F SRAM 4 MCS51 MOVC ROM ROM AVR 16 ROM AVR 8 LPM ROM Z
MCS51 AVR LPM Z ldi ZH high(f_table*2) ldi ZL low(f_table*2) Z lpm st Y+ R0 F_TABLE db 0,1 ; (20 bytes) db 18,19 AVR / MCS51 I/O I/O AVR I/O AVR DDRX PORTX PINX X A~F PINX F DDRXn PORTXn I/O 0 0 0 1 1 0 0 1 1 1 X=A~E n=0~7 DDRX DDRX 1 DDRX 0 PORTX PORTX POTRX PINX PINX PORTX MCS51 AVR B ldi R16 $F0
out DDRB R16 C DDRB=0xF0 MCS51 AVR AVR MCS51 1 MCS51 / INT0 INT1 AVR T0 T1 AT90S1200 T0 T0 MCS51 T1 /, A B ICP 8~10 PWM AVR / 1 8 64 256 1024 2 T0 AVR T0 TCCR0 TCCR0 X X X X X CS02 CS01 CS00 TCCR0 CSX2 CSX1 CSX0 CSX2 CSX1 CSX0 0 0 0 T0 1 0 0 CK/256 0 0 1 CK 1 0 1 CK/1024 0 1 0 CK/8 1 1 0 ( ) 0 1 1 CK/64 1 1 1 ( ) TCCR0 X=0 1 1 T0 4M 10ms T0 LDI R16 $D9 OUT TCNT0 R16 TCNT0 LDI R16 $05 OUT TCRR0 R16 1024 C TCNT0=0xD9 TCRR0=0x05 TCNT0 2 T0 T0 LDI R16 00 OUT TCNT0 R16 TCNT0
MCS51 AVR LDI R16 $06 OUT TCRR0 R16 C TCNT0=0 TCRR0=0x06 3 T1 AVR T1 16 TCCR1A TCCR1B TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 X X PWM 11 PWM 10 COM1X1 COM1X0 PWM11 PWM10 0 0 OC1X 0 0 PWM 0 1 OC1X 0 1 8 PWM 1 0 OC1X 1 0 9 PWM 1 1 OC1X 1 1 10 PWM TCCR1A TCCR1B CS10~CS12 T0 ICNC1 ICES1 X X CTC1 CS12 CS11 CS10 ICNC1 1 0 ICES1 1 ICP 0 ICP CTC1 1 A TCNT1 0 0 TCNT1 A PWM 1 1 A OC1A 50HZ 4MHZ T1 LDI R16 $20 OUT DDRD R16 OC1A LDI R16 $00 OUT TCNT1H R16 OUT TCNT1L R16 TCNT1 0 LDI R16 $02 OUT OCR1AH R16 LDI R16 $71 OUT OCR1AL R16 10ms LDI R16 $40 OUT TCCR1A R16 T1 OC1A OC1A
C DDRD=0x20 MCS51 AVR LDI R16 $0B OUT TCCR1B R16 T1 64 // OC1A TCNT1=0x00 //TCNT1 0 OCR1A=0x271 TCCR1A=0x40 TCCR1B=0x0B TCNT1 // 10ms //T1 OC1A OC1A //T1 64 // TCNT1 1 T1 TCNT1 OCR1A OCR1B ICR1 16 2 T1 ICP T1 AVR MCS51 MCS51 5 IE IP AVR AT90S8515 12 12 AVR GIMSK TIMSK SREG SREG D7 I AVR GIMSK TIMSK INT1 INT0 X X X X X X GIMSK TOIE1 OCIE1A OCIE1B X TICIE1 X TOIE0 X TIMSK INT0 INT1 0 1 1 0 MCUCR D0~D3 TOIE0 TOIE1 0 1 OCIE1A B 1 A B TICIE1 1 1 $000 RESET 2 $001 INT0 0 3 $002 INT1 1 4 $003 TIMER1 CAPT 1 5 $004 TIMER1 COMPA 1 A
MCS51 AVR 6 $005 TIMER1 COMPB 1 B 7 $006 TIMER1 OVF 1 8 $007 TIMER0 OVF 0 9 $008 SPI STC SPI 10 $009 UART RX 11 $00A UART UDRE 12 $00B UART TX 13 $00C ANA_COMP ISCX1 ISCX0 ISCX1 ISCX0 0 0 1 0 0 1 1 1 X=0 1 AVR I AVR I I SEI 1 INT0 INT0 MCU LDI R16 $40 OUT GIMSK R16 INT0 LDI R16 $80 OUT TIMSK R16 T1 SEI timer1_ovf T1 SEI T1 INT0 RETI AVR SREG C #pragma interrupt_handler timer1 7 // timer1( )
MCS51 AVR #pragma interrupt_handler int0 void main (void) { GIMSK=0x40 TIMSK=0x80 _SEI( ) // INT0 // T1 // // 2 // _int0( ) // } void timer1(void)//t1 { _SEI( ) // T1 // INT0 } C AVR MCS51 MCS51 AVR AVR 1 SBI 0 CBI C PORTB D2 1 PORTB D6 0 PORTB =(1<<2) //D2 1 PORTB&=~(1<<6) //D6 0 ASM( SBI 0x18 2 ) //D2 1 ASM( CBI 0x18 6 ) //D6 0 AVR EEPROM AVR MCU EEPROM EEAR EEPROM EEPROM 8 EEDR EEPROM EECR EEPROM EECR X X X X X EEMWE EEWE EERE EEMWE EEPROM 1 4 EEWE 1 EEPROM EEMWE 1 4
MCS51 AVR EEWE EEPROM EERE EEPROM EEPROM def EEdwr =r16 EEPROM def EEawr =r17 EEPROM def EEawrh =r18 EEPROM EEWrite sbic EECR EEWE rjmp EEWrite EEPROM out EEARH Eeawrh out EEARL EEawr EEPROM out EEDR EEdwr EEPROM sbi EECR,EEMWE EEPROM sbi EECR,EEWE EEPROM ret C eepromh int EEPROMwrite( int location, unsigned char); int location EEPROM unsigned char EEPROM AVR WatchDog AVR WDTCR WDTCR X X X WDTOE WDE WDP2 WDP1 WDP0 WDTOE 1 4 WDE 0 WDTOE 1 4 0 WDE 1 0 WDTOE 1 4 WDP0~WDP2 WDP 2 WDP 1 WDP 0 DC3V DC5V 1MHZ 0 0 0 16K 47ms 15ms 0 0 1 32K 94ms 30ms 0 1 0 64K 019s 60ms
MCS51 AVR 0 1 1 128K 038s 012s 1 0 0 256K 075s 024s 1 0 1 512K 15s 049s 1 1 0 1024K 30s 097s 1 1 1 2048K 60s 19s RC DC5V 1MHZ AVR WDR C _WDR( ) WDR( ) AVR MCS51 UART MCS51 AVR 115200 AT90S1200 UART AVR UART UDR USR UCR UBRR UDR USR UART RXC TXC UDR FE OR X X X RXC UART TXC UART UDR UART FE OR UCR UART RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 RXCIE TXCIE UDRIE UART RXEN TXEN CHR9 9 RXB8 8 TXB8 8 UBRR UART
MCS51 AVR BAUD=FCK/[16(UBRR+1)] BAUD FCK UBRR UBRR 2% 1 8MHZ 19200 PC AVR LDI R16 25 OUT UBRR R16 LDI R16 $18 OUT UCR R16 C UBRR=25 UCR=0x18 2 8MHZ 19200 PC 0 OK #include <io8515h> #include <stdioh> void main(void) { unsigned char temp; UBRR = 25; UCR=0x18; puts("hello World!"); putchar(0x0d); putchar(0x0a); while (1) { temp=getchar(); if (temp!=0) { puts("ok!"); putchar(0x0d); putchar(0x0a); temp=0; } } } C51 ICCAVR C51 AVR C
MCS51 AVR C51 ICCAVR 1 C51 reg51h at89x51h AVR io8515h io2313h 2 C51 interrupt ICCVAR #pragma interrupt_handler #pragma interrupt_handler < > < > C51 interrupt using 3 C51 bit sbit ICCAVR bit sbit unsigned char C 4 C51 MCS51 TMOD TCON AVR TCCR0 TCCR1A TCCR1B TIFR MCS51 IE IP AVR GIMSK TIMSK MCUCR SREG 5 C51 EEPROM AVR EEPROM 6 MCS51UART UCR UBRR 7 SRAM MCUCR 8 C51 ANSI C