Professional Documents
Culture Documents
VD Chuong2
VD Chuong2
VD Chuong2
;VÙNG GPRs(Ri:i=0-31)
;****************************************************************************************
LDI R16,0xAB ;R16=ABH
LDI R17,$CD ;R17=CDH
LDI R18,50 ;R18=32H
LDI R19,0b00001111 ;R19=0FH
;ldi r0,0xffh ;error
MOV R0,R16 ;R0=ABH
MOV R1,R17 ;R1=CD
MOVW R2,R18 ;BYTE
MOVW R5:R4,R19:R18 ; word r,d:chẵn
;****************************************************************************************
;VÙNG IORs{P:0-63(3F)}
;****************************************************************************************
OUT PORTB,R1 ;R1=CDH
OUT 5,R16 ;PORTB=05H(IO_ADDR)=25H(SRAM_ADDR)
OUT $25,R17 ;TCCR0B=25H(IO_ADDR)
IN R1,PORTA
IN R2,0x02 ;PORTA=02H(IO_ADDR)
;IN R5,$60 ;ERROR: ngoài phạm vi IO_ADDR
;****************************************************************************************
;VÙNG DATA{$100-$8FF}
;****************************************************************************************
LDI R20,0X05 ;R20=R16(SRAM_ADDR=16=10H)
LDI R19,0XCD
STS $5D,R19 ;SPL=3DH(IO_ADDR)=5DH(SRAM_ADDR)
STS $5E,R20 ;SPH=3EH(IO_ADDR)=5EH(SRAM_ADDR)
;****************************************************************************************
;VÙNG STACK(SP)
;****************************************************************************************
LDI R16,HIGH(RAMEND) ;lấy byte cao của RAMEND
OUT SPH,R16 ;lưu vào SPH
LDI R16,LOW(RAMEND) ;lấy byte thấp
OUT SPL,R16
LDI R20,0X2A
LDI R21,0X95
LDI R22,0X4C
PUSH R20
PUSH R21
PUSH R22
POP R22
;****************************************************************************************
;VÙNG FLASH(CODE)
;****************************************************************************************
LDI ZL,LOW(MYDATA<<1)
LDI ZH,HIGH(MYDATA<<1)
LPM R1,Z
LDI ZL,LOW((MYDATA<<1)|1)
LDI ZH,HIGH((MYDATA<<1)|1)
LPM R2,Z
MYDATA: .DW $ABCD
MYDATA1:.DB 10,$20,'A','B',"cdef"
MYDATA2:.DW 10,$20,'A','B'
MYDATA3:.DD 10,$20,'A','B'
MYDATA4:.DQ 10,$20,'A','B'
;****************************************************************************************
;CẤU TRÚC CÁC T.GHI IO PORT
;****************************************************************************************
LDI R16,0
OUT DDRA,R16 ;portA nhập
LDI R16,0xFF
OUT PORTA,R16 ;có điện trở kéo lên
OUT DDRC,R16 ;portC xuất
IN R25,PINA ;đọc data từ portA
LDI R16,$0F
OUT DDRB,R16 ;PB0-PB3: xuất, PB4-PB7: nhập
LDI R16,$F0
OUT PORTB,R16 ;PB4-PB7: có điện trở kéo lên
;****************************************************************************************
;THANH GHI SREG
;****************************************************************************************
LDI R16,$6E ;+110D
LDI R17,$5A ;+90D
ADD R16,R17 ;+200D>+127 --> cờ C=1
LDI R24,10 ;
CP R24,R23 ;KQ=0 --> cờ Z=1
CP R24,R22 ;KQ<0 --> cờ N=1, C=1, S=1(KQ đúng)
;****************************************************************************************
;CÁC LƯU Ý
;****************************************************************************************
MOV R0,R1
;MOV 0x00,0x01
IN R5,PINA
IN R5,$0
OUT PORTD,R5
OUT 0x0B,R5
;OUT TCNT1L,R5 ;TCNT1L=84H(SRAM_ADDR)
;OUT $84,R5
STS TCNT1L,R5
STS $84,R17
STS 0X2B,R5
;STS PORTD,R5 ;ánh xạ địa chỉ portD sẽ sai