

.INCLUDE    "m88def.inc"                            ;INCLUI TODAS AS VARIAVEIS DO ATMEGA88


;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; DEFENIÇÕES DOS NOMES DOS REGISTROS UTILIZADOS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

.DEF        CONPRI_CMD          =R0  
.DEF        AUX                 =R16
.DEF        TENPO               =R18              
.DEF        DADOS               =R19               ;REGISTRO UTILIZADO PELOS DADOS A RECEBÊR E ENVIAR

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; DEFENIÇÕES USADAS PELOS PINOS DAS PORTAS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

.EQU        LED1     =PC0                          ;LED TESTE
.EQU        LED2     =PC1                          ;LED TESTE
.EQU        LED3     =PC2                          ;LED TESTE
.EQU        LED4     =PC3                          ;LED TESTE
.EQU        LED5     =PC4                          ;LED TESTE
.EQU        LED6     =PC5                          ;LED TESTE

;*************************************************************************************************************************
; DEFENIÇÕES DAS CONSTANTES PAR OS BAUDRATES
;*************************************************************************************************************************

.EQU         F_CPU        = 18432000               ; FREQUENCIA DE CLOCK
.EQU         BAUD         = 115200                 ; VELOCIDADE DE COMUNICAÇÃO BAUDRATE
.EQU         UBRR_VAL     = (F_CPU/(16*BAUD))-1    ; VALOR PARA

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; TABELA DAS INTERRUPÇÕES USADAS PELO PROGRAMA
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

.CSEG

.org  0X00           
                   RJMP      INICIO            ; RST INICIO DO PROGRAMA

	           RJMP	     LIGA_LED1         ; Command 0x00 
                   RJMP	     LIGA_LED2         ; Command 0x01 
		   RJMP	     LIGA_LED3         ; Command 0x02 
                   RJMP	     LIGA_LED4         ; Command 0x03 
	           RJMP	     LIGA_LED5         ; Command 0x04 
                   RJMP	     LIGA_LED6         ; Command 0x05 

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; INICIO DO PROGRAMA
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

INICIO:				   	
                   
                   LDI        AUX, HIGH(RAMEND) 
                   OUT        SPH, AUX                     ; STACK
                   LDI        AUX, LOW(RAMEND)             ; 0X0480 
                   OUT        SPL, AUX                     ;
                   
         ;PORT B                   
                   LDI        TENPO,0B00000110             ;PB1=OUT,PB2=OUT
	           OUT        DDRB,TENPO
		   LDI        TENPO,0B11111111             
		   OUT        PORTB,TENPO
         ;PORT C 
                   LDI        TENPO,0B11111111             ;PORTC TODOS OS PINOS CONFIGURADOS COMO SAIDA 
		   OUT        DDRC,TENPO
		   LDI        TENPO,0B00000000             
		   OUT        PORTC,TENPO
         ;PORT D
                   LDI        TENPO,0B00010110            
		   OUT        DDRD,TENPO
		   LDI        TENPO,0B00101011
		   OUT        PORTD,TENPO
                   
;*************************************************************************************************************************
; CONFIGURAÇÕES DA USART
;*************************************************************************************************************************
              
	           CLR        AUX
                   STS        UBRR0H,AUX
	           LDI        AUX,UBRR_VAL                ; SELECIONA VELOCIDADE DA UART 115.200kBps
                   STS        UBRR0L,AUX
                   LDI	      R17,(1<<RXEN0)|(1<<TXEN0)
	           STS	      UCSR0B,R17	; 
	           LDI	      R18,(3<<UCSZ00)|(1<<USBS0)  :8 DATA BITS,2 BITS DE STOP
	           STS	      UCSR0C,R18     

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;  RUTINA QUE VAI ANALIZAR OS CMD,S RECEBIDOS E PROCEDER A SUA ESCOLHA
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; VAI BUSCAR OS CMD A UART E GUARDA  EM DADOS


RECEB_CMD:
		   RCALL      UART_RECEBE            ;CHAMA A RUTINA PARA RECEBÊR O PRIMEIRO BYTE UART_RECEBE
		   TST	      DADOS                  ;TESTA SE O REGISTRO DE DADOS ESTA A ZERO
		   BREQ	      RECEB_CMD              ;SE FOR ZERO DESVIA PARA RECEB_CMD

	           MOV	      CONPRI_CMD, DADOS      ;COLOCA O BYTE QUE IDÊNTIFICA O CONPRIMÊNTO DO CMD EM  CONPRI_CMD
CMD_NA_RAM:	

		   RCALL      UART_RECEBE            ;CHAMA A RUTINA PARA RECEBÊR O NOVO BYTE
		   LDI        r27,0x01               ;INICIO DA RAM
		   ST	      X+, DADOS              ;GRAVA O BYTE RECEBIDO NA RAM
		   DEC	      CONPRI_CMD             ;VERIFICA SE O CONPRI_CMD  CHEGOU AO FIM
		   BRNE	      CMD_NA_RAM
		   LDI        XL,0X00                ;INICIO DA RAM PARA LÊR O PRIMEIRO BYTE
PROXI_CMD:								                
		   LD         AUX, X+                ;LÊ O PRIMEIRO BYTE DA RAM E COLOCA O EM AUX
		   MOV	      ZL, AUX                ;COLOCA AUX EM ZL 
		           
		   LDI	      ZH, 0
		   ADIW	      ZL, 0x1                ;ADICIONA 1 A ZL
		   IJMP			             ;SALTA PARA A POSIÇÃO DA TABELA, INDICADA EM ZL

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 00
 LIGA_LED1:
                   SBI        PORTC,LED1        

                   RJMP       PROXI_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 01
 LIGA_LED2:
                   SBI        PORTC,LED2        

                   RJMP       PROXI_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 02
 LIGA_LED3:
                   SBI        PORTC,LED3        

                   RJMP       PROXI_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 03
 LIGA_LED4:
                   SBI        PORTC,LED4        

                   RJMP       PROXI_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 04
 LIGA_LED5:
                   SBI        PORTC,LED5        

                   RJMP       PROXI_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;COMANDO 05
 LIGA_LED6:
                   SBI        PORTC,LED6        

                   RJMP       RECEB_CMD

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; RUTINA DE RECEPÇÃO UART RXD
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

UART_RECEBE:
                   LDS	     AUX,UCSR0A
	           SBRS	     AUX,RXC0	
	           RJMP	     UART_RECEBE		
	           LDS	     DADOS,UDR0                         
                   RET                  

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; RUTINA DE TRANSMIÇÃO UART TXD
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; COMANDO 0X0E

UART_TRANSMITE:
                    STS	     UDR0,DADOS
UART_TRANSMITE1:
                    LDS	     AUX,UCSR0A	
	            SBRS     AUX,TXC0	
	            RJMP     UART_TRANSMITE1
                    RET

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
