Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .device ATmega32
- .include "m32def.inc" ;das variaveis do sistema Registradores e ETC
- .org 0x0000
- Rjmp Reset
- ;.org 0x0012
- ; Rjmp Time1
- .org 0x0016
- Rjmp Time0
- ;***********************************
- ;Definição das Variaveis do programa
- ;***********************************
- ;Variaveis para o LCD
- .equ Clock =8000000;24000000 ;Frequencia do Clock
- .equ Clock_1000 =Clock/1000
- .equ Clock_MS =Clock/Clock_1000
- .equ Minuto =60000
- .equ Fator_Div =100
- .set Clockus =Clock/1000000
- .equ Valor_TP =1024
- .set Vlr1 =0
- .set Vlr2 =0
- .set Vlr3 =0
- .set Saidor =Clock/160000
- .IF Clockus ==0 ;clock smaller than 1 Mcs/s
- .SET clockus =1
- .ENDIF
- .equ DB0 =0
- .equ DB1 =1
- .equ DB2 =2
- .equ DB3 =3
- .equ DB4 =4
- .equ DB5 =5
- .equ DB6 =6
- .equ DB7 =7
- .equ LCDDATA_Out=PORTC
- .equ LCDDATA_In =PINC
- .equ LCDDATA_Set=DDRC
- .equ CTL_LCD =PORTD
- .equ RS_LCD =2
- .equ EN_LCD =3
- .equ BCD_PORT =PORTC
- .equ BCD_ATV =PORTB
- .equ BCD_D1 =1
- .equ BCD_D2 =2
- .equ BCD_D3 =3
- ;Nomes de IO
- .equ Led =PORTB
- .equ Led_CPU =0
- ;Registradores do Systema
- .def NDA0 =R0
- .def NDA1 =R1
- .def Vetor_TP =R2
- .def Ctd_Bpm =R3
- .def Fator_Bpm =R4
- .def Ctd_Val =R5
- .def Ctd_Tar0 =R6
- .def Ct_Mseg_L =R7
- .def Ct_Mseg_H =R8
- .def Iniciou0 =R9
- .def Nda10 =R10
- .def Msx =R11
- .def Tp1 =R12
- .def Tp2 =R13
- .def Tp3 =R14
- .def NDA15 =R15
- .def Temp =R16 ;Registrador 0
- .def Temp1 =R17 ;Registrador 1
- .def Temp2 =R18 ;Registrador 2
- .def Temp3 =R19 ;Registrador 3
- .def Temp4 =R20 ;Contador de recepção Baixo
- .def Temp5 =R21 ;Contador de recepção Alto
- .def Vetor_0 =R22 ;Contador de transmição Baixo
- .def Vetor_1 =R23 ;Contador de transmição Alto
- .def Vetor_2 =R24 ;Vetor de Entrada
- .def Vetor_3 =R25 ;Vetor de Saida
- .def Pt0 =r26 ;Ponteiro 0 da memoria Ram
- .def Pt1 =r27 ;Ponteiro 1 da memoria Ram
- .def Pt2 =r28 ;Ponteiro 2 da memoria Ram
- .def Pt3 =r29 ;Ponteiro 3 da memoria Ram
- .def Pt4 =r30 ;Ponteiro 4 da memoria Eprom
- .def Pt5 =r31 ;Ponteiro 5 da memoria Eprom
- ;---------------------------
- .def Dg0 =r18
- .def Dg1 =r19
- .def Dg2 =r20
- ;Variaveis do Sistema
- .equ Buf_Env_L =96 ;000060 em Exa da Ram
- .equ Buf_Env_H =97
- .equ Buf_Env_Tam_L =98
- .equ Buf_Env_Tam_H =99
- .equ Bpm =100
- .equ FC_LCD =101
- .equ Vt_Tp0 =102
- .equ Vt_Tp1 =103
- .equ Vt_Tp2 =104
- .equ Tp_Bpm0 =105
- .equ Tp_bpm1 =106
- .equ Ctd1 =107
- .equ Dig_1_2_Bpm =108
- .equ Dig_3_4_Bpm =109
- .equ BCD1 =110
- .equ BCD2 =111
- .equ BCD3 =112
- .equ BCD4 =113
- .equ BCD5 =114
- .equ BCD6 =115
- .equ BCD7 =116
- .equ BCD8 =117
- .equ BCD9 =118
- .equ BCD10 =119
- .equ BCD11 =120
- .equ BCD12 =121
- .equ BCD13 =122
- .equ BCD14 =123
- .equ Led_Status_0 =124
- .equ Led_Status_1 =125
- .equ Vetor_BCD =126
- .equ Teste =127
- ;*********************
- ;End. Recb. Tempo Real
- ;*********************
- .equ Atu_Env =225 ;0000E1 em Exa da Ram
- .equ Atu_Rec =226 ;0000E2 em Exa da Ram
- ;*********************
- .equ Mn0_0 =256
- .equ Mn0_1 =257
- .equ Mn0_2 =258
- .equ Mn0_3 =259
- .equ Mn0_4 =260
- .equ Mn0_5 =261
- .equ Mn0_6 =262
- .equ Mn0_7 =263
- .equ Mn0_8 =264
- .equ Mn0_9 =265
- .equ Mn0_10 =266
- .equ Mn0_11 =267
- .equ Mn0_12 =268
- .equ Mn0_13 =269
- .equ Mn0_14 =270
- .equ Mn0_15 =271
- .equ Mn0_16 =272
- .equ Mn0_17 =273
- .equ Mn0_18 =274
- .equ Mn0_19 =275
- .equ Mn0_20 =276
- .equ Mn0_21 =277
- .equ Mn0_22 =278
- .equ Mn0_23 =279
- .equ Mn0_24 =280
- .equ Mn0_25 =281
- .equ Mn0_26 =282
- .equ Mn0_27 =283
- .equ Mn0_28 =284
- .equ Mn0_29 =285
- .equ Mn0_30 =286
- .equ Mn0_31 =287
- .equ Mn0_32 =288
- .equ Mn0_33 =289
- .equ Mn0_34 =290
- .equ Mn0_35 =291
- .equ Mn0_36 =292
- .equ Mn0_37 =293
- .equ Mn0_38 =294
- .equ Mn0_39 =295
- .equ Mn0_40 =296
- .equ Mn0_41 =297
- .equ Mn0_42 =298
- .equ Mn0_43 =299
- .equ Mn0_44 =300
- .equ Mn0_45 =301
- .equ Mn0_46 =302
- .equ Mn0_47 =303
- .equ Mn0_48 =304
- .equ Mn0_49 =305
- .equ Mn0_50 =306
- .equ Mn0_51 =307
- .equ Mn0_52 =308
- .equ Mn0_53 =309
- .equ Mn0_54 =310
- .equ Mn0_55 =311
- .equ Mn0_56 =312
- .equ Mn0_57 =313
- .equ Mn0_58 =314
- .equ Mn0_59 =315
- .equ Mn0_60 =316
- .equ Mn0_61 =317
- .equ Mn0_62 =318
- .equ Mn0_63 =319
- .equ Mn0_64 =320
- .equ Mn0_65 =321
- .equ Mn0_66 =322
- .equ Mn0_67 =323
- .equ Mn0_68 =324
- .equ Mn0_69 =325
- .equ Mn0_70 =326
- .equ Mn0_71 =327
- .equ Mn0_72 =328
- .equ Mn0_73 =329
- .equ Mn0_74 =330
- .equ Mn0_75 =331
- .equ Mn0_76 =332
- .equ Mn0_77 =333
- .equ Mn0_78 =334
- .equ Mn0_79 =335
- ;***** Inicialização
- Reset:
- Ldi R16,high(RAMEND) ;Main program start
- Out SPH,R16 ;Set Stack Pointer to top of RAM
- Ldi R16,low(RAMEND)
- Out SPL,R16
- Reset_a:
- Rjmp Configura_Timers
- Reset_b:
- Rjmp Configura_Portas
- Reset_c:
- Rjmp Configura_Serial
- Reset_d:
- ;Rcall Configura_AD
- Reset_e:
- ;Rcall Configura_PWM
- Reset_f:
- Rjmp Le_parametros
- Reset_g:
- ;Call Inicia_LCD
- ;Carrega a Mensagem da primeira linha a ser enviada do DB
- Call Limpa_Linha0
- Call Limpa_Linha1
- Ldi ZL,LOW(Msg0<<1)
- Ldi ZH,HIGH(Msg0<<1)
- Call Atualiza_Ln0
- Ldi ZL,LOW(Msg1<<1)
- Ldi ZH,HIGH(Msg1<<1)
- Call Atualiza_Ln1
- Clr Ctd_Tar0
- Ldi Temp,3
- Mov Ctd_Tar0,Temp ;Timeout de 3 Segundos Ligado
- ;Somente para Testes
- ;Ldi Temp,1
- ;Mov Fator_Bpm,Temp
- ;****************************
- ;Rotina Principal do programa
- ;****************************
- Main:
- ; Rjmp Checa_Serial_In
- Main_a:
- ; Rjmp Checa_Serial_Out
- Main_b:
- ; Rjmp Testa_Soma
- Main_c:
- Rjmp Checa_Tarefas
- Main_d:
- Rjmp Val_Var
- Main_e:
- Jmp Mostra_Menu
- Main_f:
- Rjmp Tempo1
- Main_g:
- Rjmp Mostra_Byte_BCD
- Main_h:
- Rjmp Main
- Checa_Tarefas:
- Sbrc Iniciou0,0
- Jmp Checa_Tr0 ;Procegue se já Mostrou MSG Inicial no LCD
- Sbrc Vetor_2,1
- Jmp Checa_Tr0 ;Aguarda o Timer1 Zerar
- Mov Temp,Iniciou0
- Sbr Vetor_2,2 ;Desliga Tarefa1
- Dec Ctd_Tar0 ;Tempo para realizar esta Tarefa
- Brne Checa_Tr0a ;Verifica se e Igual ou Maior que 100
- Call Limpa_Linha0
- Call Limpa_Linha1
- Ldi ZL,LOW(Msf0<<1)
- Ldi ZH,HIGH(Msf0<<1)
- Call Atualiza_Ln0
- Cbr Temp,1 ;Desliga a Entrada de MSG
- Mov Iniciou0,Temp
- Checa_Tr0a:
- Checa_Tr0:
- Checa_Tr1:
- Rjmp Main_d
- Testa_Soma:
- Rjmp Main_c
- Val_Var:
- Jmp Main_e ;Retorna se estava aguardando Time Out
- ;Vt_Tp0
- Sbrs Vetor_1,1
- Jmp Main_e ;Retorna se estava aguardando Time Out
- Lds Temp,Ctd1
- Ldi Temp1,48 ;Valor do Numero '0'
- Mov Dg0,Temp1
- Mov Dg1,Temp1
- Mov Dg2,Temp1
- Cpi Temp,100
- Brlo Val_Var0 ;Verifica se e Igual ou Maior que 100
- Cpi Temp,200
- Brlo Val_Var00
- Inc Dg0
- Inc Dg0
- Ldi Temp1,-200
- Add Temp,Temp1
- Jmp Val_Var0
- Val_Var00:
- Inc Dg0
- Ldi Temp1,-100
- Add Temp,Temp1
- Val_Var0:
- Cpi Temp,10
- Brsh Val_Var1 ;Verifica se e Igual ou Maior que 10
- Mov Dg2,Temp
- Ldi Temp,48
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var1:
- Cpi Temp,20
- Brsh Val_Var2 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,1
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,38
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var2:
- Cpi Temp,30
- Brsh Val_Var3 ;Verifica se e Igual ou Maior que 30
- Ldi Temp1,2
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,28
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var3:
- Cpi Temp,40
- Brsh Val_Var4 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,3
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,18
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var4:
- Cpi Temp,50
- Brsh Val_Var5 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,4
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,8
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var5:
- Cpi Temp,60
- Brsh Val_Var6 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,5
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,-2
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var6:
- Cpi Temp,70
- Brsh Val_Var7 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,6
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,-12
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var7:
- Cpi Temp,80
- Brsh Val_Var8 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,7
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,-22
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var8:
- Cpi Temp,90
- Brsh Val_Var9 ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,8
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,-32
- Add Dg2,Temp
- Rjmp Mostra
- Val_Var9:
- Cpi Temp,100
- Brsh Mostra ;Verifica se e Igual ou Maior que 20
- Ldi Temp1,9
- Add Dg1,Temp1
- Mov Dg2,Temp
- Ldi Temp,-42
- Add Dg2,Temp
- Rjmp Mostra
- Mostra:
- ; Sbrs Ctd_Val,0
- ; Rjmp Mostra_0
- Sts Mn0_16,Dg0
- Sts Mn0_17,Dg1
- Sts Mn0_18,Dg2
- ; Ldi Temp,2
- ; Rjmp Soma_Mostra
- Rjmp Main_e
- Mostra_Menu:
- Mov Temp,Msx
- Cpi Temp,0
- Breq Mostra_Menu_0
- Jmp Main_f
- Mostra_Menu_0:
- Lds Temp,FC_LCD
- Cpi Temp,0
- Brne Mostra_Menu_1
- Ldi Temp,128 ;#80H Retorna Cr p/ primeira linha
- Cbi CTL_LCD,RS_LCD
- RCall LCD_Conf1_0
- Ldi Temp,6
- Mov Msx,Temp
- Lds Temp,FC_LCD
- Inc Temp
- Sts FC_LCD,Temp
- Jmp Main_f
- Mostra_Menu_1:
- Cpi Temp,41
- Brlo Mostra_Menu_2
- Jmp Mostra_Menu_4
- Mostra_Menu_2:
- Mov Pt0,Temp
- Ldi Temp,-1;11
- Add Pt0,Temp
- Ldi Pt1,1 ;Atualiza o sub endereço
- LD Temp,X ;Le o Dado do Buffer
- Cpi Pt0,43 ;Verifica se chegou ao maximo
- Brne Mostra_Menu_3
- RCall LCD_Conf1
- Ldi Temp,6
- Mov Msx,Temp
- Ldi Temp,0
- Sts FC_LCD,Temp
- Jmp Main_f
- Mostra_Menu_3:
- RCall LCD_Conf1
- Ldi Temp,6
- Mov Msx,Temp
- Lds Temp,FC_LCD
- Inc Temp
- Sts FC_LCD,Temp
- Jmp Main_f
- Mostra_Menu_4:
- Cpi Temp,41
- Brne Mostra_Menu_5
- Ldi Temp,192 ;#C0H Retorna Cr p/ segunda linha
- Cbi CTL_LCD,RS_LCD
- RCall LCD_Conf1_0
- Ldi Temp,8
- Mov Msx,Temp
- Lds Temp,FC_LCD
- Inc Temp
- Sts FC_LCD,Temp
- Jmp Main_f
- Mostra_Menu_5:
- Mov Pt0,Temp
- Ldi Temp,-2;10
- Add Pt0,Temp
- Ldi Pt1,1 ;Atualiza o sub endereço
- LD Temp,X ;Le o Dado do Buffer
- Cpi Pt0,79 ;Verifica se chegou ao maximo
- Brne Mostra_Menu_6
- RCall LCD_Conf1
- Ldi Temp,6
- Mov Msx,Temp
- Ldi Temp,0
- Sts FC_LCD,Temp
- Jmp Main_f
- Mostra_Menu_6:
- RCall LCD_Conf1
- Ldi Temp,6
- Mov Msx,Temp
- Lds Temp,FC_LCD
- Inc Temp
- Sts FC_LCD,Temp
- Jmp Main_f
- Pulsa_Led:
- Sbis Led,Led_CPU ;If (Port B,pinX = 0)
- Jmp Pulsa_Led_a
- Cbi Led,Led_CPU ;Clr Bit
- Rjmp Main_g
- Pulsa_Led_a:
- Sbi Led,Led_CPU ;Setb Bit
- Ret
- ;***************************************************
- ;Checa o Vetor de Segundos e Retorna pra Mesma Linha
- ;Não Pode mudar a sequencia esta rotina deve sempre
- ;estar 6 Linhas antes da rotina de checagem de Tempo
- ;***************************************************
- Tempo0:
- Mov Temp,Tp3
- Cpi Temp,31
- Brlo Tempo0_a
- Clr Vetor_1 ;Passa aquí 1000 Vezes por Segundo
- Clr Tp3
- Tempo0_a:
- Sbr Vetor_0,128
- Tempo1:
- Sbrs Vetor_0,7
- Rjmp Tempo0 ;Checa o Vetor e Volta pra Linha anterior
- Sbrc Vetor_1,0 ;Verifica se é para contar tempo
- Rjmp Main_g ;Retorna se estiver o timer nao liberou ainda
- Mov Temp,Vetor_1
- Sbr Temp,1
- Mov Vetor_1,Temp
- ;----------------------------
- Mov Temp,Tp1
- Lds Temp1,Tp_bpm0
- Cp Temp,Temp1
- Brlo Tempo_sai ;Se for = ou >
- Clr Tp1
- ;----------------
- Mov Temp,Tp2
- Lds Temp1,Tp_bpm1
- Cp Temp,Temp1
- Brlo Tempo_sai_0 ;Se for = ou >
- Clr Tp2
- Clr Vetor_2
- ;------------------
- Lds Temp,Teste
- Inc Temp
- Sts Teste,Temp
- Call Pulsa_Led
- Rjmp Main_g
- Tempo_sai_0:
- Inc Tp2
- Rjmp Main_g
- Tempo_Sai:
- Inc Tp1
- Rjmp Main_g
- Ajusta_Tempo:
- Rjmp Divide
- Ldi Temp1,LOW(500)
- Ldi Temp,HIGH(500) ;Valor de Bits Por Minutos
- Ldi Temp1,LOW(120)
- Ldi Temp,HIGH(120) ;Valor de Bits Por Minutos
- Ldi Pt0, LOW(Bpm)
- Ldi Pt1,HIGH(Bpm) ;Atualiza o sub endereço
- Ldi Temp1,255
- Sub Temp1,Temp
- Mov Tp1,Temp1
- Ldi Temp1,255
- Sts Tp_Bpm0,Temp1
- Ldi Temp,HIGH(60000/Bpm) ;Valor de Bits Por Minutos
- Ldi Temp1,255
- Sub Temp1,Temp
- Mov Tp2,Temp1
- Ldi Temp1,2
- Sts Tp_Bpm1,Temp1
- Ldi Temp,255
- Mov Tp1,Temp
- Ldi Temp,1
- Mov Tp2,Temp
- Ret
- Lds Temp,Bpm
- Ldi ZL,LOW(1000)
- Ldi ZH,HIGH(1000)
- Ajusta_Tempoa:
- Subi ZL,1
- Brne Ajusta_Tempob
- Dec ZH
- Ajusta_Tempob:
- Dec Temp
- Brne Ajusta_Tempoa
- Sts Tp_Bpm0,ZL
- Sts Tp_Bpm1,ZH
- Ret
- Calcula_Bpm:
- Ldi Temp,250
- Lds Ctd_Bpm,Bpm
- Sub Temp,Ctd_Bpm
- Mov Fator_Bpm,Temp
- Ret
- Calcula_Bpm1:
- Divide:
- Push R14
- Push R15
- Push R16
- Push R17
- Push R18
- Push R19
- Push R20
- ;***** Divide Two Unsigned 16-Bit Numbers (50,000/60,000)
- ldi dd16uL,low(60000)
- ldi dd16uH,high(60000)
- ;Ldi dv16uL,low(60)
- ;Ldi dv16uH,high(60)
- Lds dv16uL,Bpm;low(2)
- Ldi dv16uH,0
- ;Mov dv16uH,High(Bpm);high(2)
- ;Ldi dv16uL,Low(Bpm);low(2)
- ;Ldi dv16uH,High(Bpm);high(2)
- rcall div16u ;result: $0000 (0)
- ;remainder: $c350 (50,000)
- ;----------------------------
- Sts Tp_Bpm0,R16
- Sts Tp_Bpm1,R17
- ;-----------------------
- Pop R20
- Pop R19
- Pop R18
- Pop R17
- Pop R16
- Pop R15
- Pop R14
- Ret
- ;***** Subroutine Register Variables
- .def drem16uL=r14
- .def drem16uH=r15
- .def dres16uL=r16
- .def dres16uH=r17
- .def dd16uL =r16
- .def dd16uH =r17
- .def dv16uL =r18
- .def dv16uH =r19
- .def dcnt16u =r20
- ;***** Code
- div16u: clr drem16uL ;clear remainder Low byte
- sub drem16uH,drem16uH;clear remainder High byte and carry
- ldi dcnt16u,17 ;init loop counter
- d16u_1: rol dd16uL ;shift left dividend
- rol dd16uH
- dec dcnt16u ;decrement counter
- brne d16u_2 ;if done
- ret ; return
- d16u_2: rol drem16uL ;shift dividend into remainder
- rol drem16uH
- sub drem16uL,dv16uL ;remainder = remainder - divisor
- sbc drem16uH,dv16uH ;
- brcc d16u_3 ;if result negative
- add drem16uL,dv16uL ; restore remainder
- adc drem16uH,dv16uH
- clc ; clear carry to be shifted into result
- rjmp d16u_1 ;else
- d16u_3: sec ; set carry to be shifted into result
- rjmp d16u_1
- Ret
- Configura_Timers:
- ;Configurações das interrupções de Timers
- Ldi Temp1,0b00000001 ;Escolhe o Timer Certo a Abilitar
- ; OCIE2 _______||||||||______TOIE0 ;Liga ou desliga Timer 0
- ; TOIE2 ________||||||_______Nada
- ; TICIE1_________||||________TOIE1
- ; OCIE1A__________||_________OCIE1B
- Out TIMSK,Temp1 ;Validation de l'interruption.
- ;Configurações do Timer 0 Valor da Carga Inicial
- Ldi Temp1,0
- OUT TCNT0,Temp1
- ;Tipo de divisão do Clock
- Ldi Temp1,0b00000001
- ; Nada _______||||||||_______CS00
- ; Nada ________||||||________CS01
- ; Nada _________||||_________CS02
- ; Nada __________||__________Nada
- OUT TCCR0,Temp1
- ;----------------------------------
- SEI ;Abilita as Interrupções
- Rjmp Reset_b
- Configura_Timer1:
- Ldi Temp,LOW(Clock_1000)
- Ldi Temp1,255
- Sub Temp1,Temp
- Out TCNT1L,Temp1
- Ldi Temp,HIGH(Clock_1000) ;Frequencia do Clock Div. p/ 1000 Ms
- Ldi Temp1,255
- Sub Temp1,Temp
- Out TCNT1H,Temp1
- ;Achar 1000 pulsos por segundo
- ; Ldi Temp1,LOW(Clock_1000)
- ; Ldi Temp,HIGH(Clock_1000);Frequencia do Clock Div. po 1000 Ms
- ; Ldi Temp1,LOW(Clock_MS)
- ; Ldi Temp,HIGH(Clock_MS);Frequencia do Clock Div. po 1000 Ms
- ; Out TCNT1L,Temp1
- ; Out TCNT1H,Temp
- ;Prepara o modo de nao pre escala
- Ldi Temp1,0b00000001
- ; Nada _______||||||||_______CS00
- ; Nada ________||||||________CS01
- ; Nada _________||||_________CS02
- ; Nada __________||__________Nada
- OUT TCCR1B,Temp1
- SEI ;Abilita as Interrupções
- Rjmp Reset_b
- ;************************************************
- ;Esta rotina acerta os valore iniciais do sistema
- ;************************************************
- Configura_portas:
- ;Porta de saida de dados
- ;--------------------
- Ldi Temp,255
- Out DDRA,Temp
- Ldi Temp,0b11111111
- Out Porta,Temp ;Coloca toda a porta no nivel Alto
- ;--------------------
- Sbi DDRB,0 ;Acerta Pino 0 Porta B p/ Saida Led da CPU
- Sbi DDRB,1 ;Acerta Pino 1 Porta B p/ Saida
- Sbi DDRB,2 ;Acerta Pino 2 Porta B p/ Saida
- Sbi DDRB,3 ;Acerta Pino 3 Porta B p/ Saida
- Sbi PINB,4 ;Acerta Pino 4 Porta B p/ Entrada
- Sbi PINB,5 ;Acerta Pino 5 Porta B p/ Entrada (MOSI)
- Sbi PINB,6 ;Acerta Pino 6 Porta B p/ Entrada (MISO)
- Sbi PINB,7 ;Acerta Pino 7 Porta B p/ Entrada (SCK )
- Ldi Temp,0b11111111
- Out Portb,Temp ;Coloca toda a porta no nivel Alto
- ;Configurações da Porta C Porta de saida de dados
- Ldi Temp,255
- Out DDRC,Temp ;Configura a porta inteira como saida
- ;Configurações da Porta D Porta de saida de dados
- Sbi DDRD,2 ;Acerta o Pino 0 da Porta B Como Saida -- RS_LCD
- Sbi DDRD,3 ;Acerta o Pino 1 da Porta B Como Saida -- EN_LCD
- Sbi PIND,6 ;Acerta Pino 6 Porta D p/ Entrada -- Botão 1
- Rjmp Reset_c
- Le_parametros:
- Ldi Temp,1
- Sts Vetor_BCD,Temp
- Ldi Temp,0
- Sts BCD1,Temp
- Sts BCD2,Temp
- Sts BCD3,Temp
- Ser Vetor_0
- Ser Vetor_1
- Ser Vetor_2
- Clr Iniciou0
- ; Rcall Calcula_Bpm
- Ldi Temp,125
- Mov Ctd_Bpm,Temp
- Ldi Temp,0
- Sts FC_LCD,Temp
- Clr Ctd_Tar0
- Ldi Temp,LOW(1000)
- Mov Ct_Mseg_L,Temp
- Ldi Temp,HIGH(1000)
- Mov Ct_Mseg_H,Temp
- ;Checa os 4 Digitos de Bpm = 0060
- Ldi Temp1,0
- Ldi Temp2,0
- Swap Temp1 ;Troca os Bits LSB por MSB
- Add Temp1,Temp2 ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
- Sts Dig_1_2_Bpm,Temp1 ;Salva o Valor dos 2 Digitos
- Ldi Temp1,6
- Ldi Temp2,0
- Swap Temp1 ;Troca os Bits LSB por MSB
- Add Temp1,Temp2 ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
- Sts Dig_3_4_Bpm,Temp1 ;Salva o Valor dos 2 Digitos
- ;-----------------
- Rcall Inc_BPM
- Ldi Temp,60
- Sts Bpm,Temp
- Call Ajusta_Tempo
- Rjmp Reset_g
- Mostra_Byte_BCD:
- Sbrc Vetor_0,6
- Rjmp Main_h ;Retorna se estava aguardando Time Out
- Sbr Vetor_0,64 ;Desliga Entrada
- Lds Temp,Vetor_BCD
- Sbrc Temp,0
- Rjmp Pega_Valor0_BCD
- Sbrc Temp,1
- Rjmp Mostra_BCD2
- Sbrc Temp,2
- Rjmp Mostra_BCD3
- Sbrc Temp,3
- Rjmp Pega_Valor1_BCD
- Sbrc Temp,4
- Rjmp Mostra_BCD5
- Sbrc Temp,5
- Rjmp Mostra_BCD6
- Rjmp Soma_Vetor
- Pega_Valor0_BCD:
- Lds Temp2,Teste
- Jmp Pega_Valor9_BCD
- Pega_Valor1_BCD:
- Lds Temp2,Teste
- Jmp Pega_Valor9_BCD
- Pega_Valor9_BCD:
- Cpi Temp2,100 ;Verifica se é menor que 100
- Brsh Mst_BCD_0
- Ldi Temp1,0
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD1,Temp1
- Mov Temp1,Temp2
- Call Acha_Dezena
- Sbrc Temp,0
- Sts BCD2,Temp1
- Mov Temp1,Temp2
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD3,Temp1
- Rjmp Mostra_BCD1
- Mst_BCD_0:
- Cpi Temp2,200 ;Verifica se é menor que 200
- Brsh Mst_BCD_1
- Subi Temp2,100
- Ldi Temp1,1
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD1,Temp1
- Mov Temp1,Temp2
- Call Acha_Dezena
- Sbrc Temp,0
- Sts BCD2,Temp1
- Mov Temp1,Temp2
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD3,Temp1
- Rjmp Mostra_BCD1
- Mst_BCD_1: ;Verifica se é menor que 256
- Subi Temp2,200
- Ldi Temp1,2
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD1,Temp1
- Mov Temp1,Temp2
- Call Acha_Dezena
- Sbrc Temp,0
- Sts BCD2,Temp1
- Mov Temp1,Temp2
- Call Acha_Digito
- Sbrc Temp,0
- Sts BCD3,Temp1
- Rjmp Mostra_BCD1
- Soma_Vetor:
- Lds Temp,Vetor_BCD
- Add Temp,Temp
- Soma_Vetor_a:
- Sts Vetor_BCD,Temp
- Rjmp Main_h
- Mostra_BCD1:
- Ldi Temp,1
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D1
- Cbi BCD_ATV,BCD_D1
- ;-----------------------
- Lds Temp,BCD1
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D2
- Cbi BCD_ATV,BCD_D2
- Rjmp Soma_Vetor
- Mostra_BCD2:
- Ldi Temp,2
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D1
- Cbi BCD_ATV,BCD_D1
- ;-----------------------
- Lds Temp,BCD2
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D2
- Cbi BCD_ATV,BCD_D2
- Rjmp Soma_Vetor
- Mostra_BCD3:
- Ldi Temp,4
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D1
- Cbi BCD_ATV,BCD_D1
- ;-----------------------
- Lds Temp,BCD3
- Out BCD_PORT,Temp
- Sbi BCD_ATV,BCD_D2
- Cbi BCD_ATV,BCD_D2
- Ldi Temp,1
- Rjmp Soma_Vetor_a
- Mostra_BCD4:
- Rjmp Soma_Vetor
- Mostra_BCD5:
- Rjmp Soma_Vetor
- Mostra_BCD6:
- Rjmp Soma_Vetor
- Mostra_BCD7:
- Rjmp Soma_Vetor
- Mostra_BCD8:
- Rjmp Soma_Vetor
- Mostra_BCD9:
- Rjmp Soma_Vetor
- Mostra_BCD10:
- Rjmp Soma_Vetor
- Mostra_BCD11:
- Rjmp Soma_Vetor
- Mostra_BCD12:
- Rjmp Soma_Vetor
- Mostra_BCD13:
- Rjmp Soma_Vetor
- Mostra_BCD14:
- Ldi Temp,1
- Rjmp Soma_Vetor_a
- Acha_Dezena:
- Cpi Temp1,10
- Brsh Acha_Dz0
- Ldi Temp1,192
- Ret
- Acha_Dz0:
- Cpi Temp1,20
- Brsh Acha_Dz1
- Subi Temp2,10
- Ldi Temp1,231
- Ret
- Acha_Dz1:
- Cpi Temp1,30
- Brsh Acha_Dz2
- Subi Temp2,20
- Ldi Temp1,146
- Ret
- Acha_Dz2:
- Cpi Temp1,40
- Brsh Acha_Dz3
- Subi Temp2,30
- Ldi Temp1,152
- Ret
- Acha_Dz3:
- Cpi Temp1,50
- Brsh Acha_Dz4
- Subi Temp2,40
- Ldi Temp1,172
- Ret
- Acha_Dz4:
- Cpi Temp1,60
- Brsh Acha_Dz5
- Subi Temp2,50
- Ldi Temp1,137
- Ret
- Acha_Dz5:
- Cpi Temp1,70
- Brsh Acha_Dz6
- Subi Temp2,60
- Ldi Temp1,129
- Ret
- Acha_Dz6:
- Cpi Temp1,80
- Brsh Acha_Dz7
- Subi Temp2,70
- Ldi Temp1,220
- Ret
- Acha_Dz7:
- Cpi Temp1,90
- Brsh Acha_Dz8
- Subi Temp2,80
- Ldi Temp1,128
- Ret
- Acha_Dz8:
- Cpi Temp1,100
- Brsh Acha_Dz9
- Subi Temp2,90
- Ldi Temp1,140
- Acha_Dz9:
- Ret
- Acha_Digito:
- Cpi Temp1,0
- Brne Acha_Dg0
- Ldi Temp1,192
- Ret
- Acha_Dg0:
- Cpi Temp1,1
- Brne Acha_Dg1
- Ldi Temp1,231
- Ret
- Acha_Dg1:
- Cpi Temp1,2
- Brne Acha_Dg2
- Ldi Temp1,146
- Ret
- Acha_Dg2:
- Cpi Temp1,3
- Brne Acha_Dg3
- Ldi Temp1,152
- Ret
- Acha_Dg3:
- Cpi Temp1,4
- Brne Acha_Dg4
- Ldi Temp1,172
- Ret
- Acha_Dg4:
- Cpi Temp1,5
- Brne Acha_Dg5
- Ldi Temp1,137
- Ret
- Acha_Dg5:
- Cpi Temp1,6
- Brne Acha_Dg6
- Ldi Temp1,129
- Ret
- Acha_Dg6:
- Cpi Temp1,7
- Brne Acha_Dg7
- Ldi Temp1,220
- Ret
- Acha_Dg7:
- Cpi Temp1,8
- Brne Acha_Dg8
- Ldi Temp1,128
- Ret
- Acha_Dg8:
- Cpi Temp1,9
- Brne Acha_Dg9
- Ldi Temp1,140
- Acha_Dg9:
- Ret
- ;*****************************
- ;Incrementa o BPM de 4 Dígitos
- ;*****************************
- Inc_BPM:
- Lds Temp1,Dig_3_4_Bpm
- Lds Temp2,Dig_3_4_Bpm
- Lds Temp3,Dig_1_2_Bpm
- Lds Temp4,Dig_1_2_Bpm
- Lsr Temp1 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp1 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp1 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp1 ;Rola um Bit p/ Direita Zerando os Outros
- ;-------------------
- Lsl Temp2 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp2 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp2 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp2 ;Rola um Bit p/ Esquerda Zerando os Outros
- Swap Temp2 ;Troca os Bits LSB por MSB
- ;-------------------
- Lsr Temp3 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp3 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp3 ;Rola um Bit p/ Direita Zerando os Outros
- Lsr Temp3 ;Rola um Bit p/ Direita Zerando os Outros
- ;-------------------
- Lsl Temp4 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp4 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp4 ;Rola um Bit p/ Esquerda Zerando os Outros
- Lsl Temp4 ;Rola um Bit p/ Esquerda Zerando os Outros
- Swap Temp4 ;Troca os Bits LSB por MSB
- ;-------------------
- Inc Temp2
- Cpi Temp2,10
- Brne Inc_BPM_a
- Clr Temp2
- Inc Temp1
- Cpi Temp1,10
- Brne Inc_BPM_a
- Clr Temp1
- Inc Temp3
- Cpi Temp3,10
- Brne Inc_BPM_a
- Clr Temp3
- Inc Temp4
- Cpi Temp4,10
- Brne Inc_BPM_a
- Clr Temp4
- Inc_BPM_a:
- ;-------------------
- Swap Temp1 ;Troca os Bits LSB por MSB
- Add Temp1,Temp2 ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
- Sts Dig_3_4_Bpm,Temp1 ;Salva o Valor dos 2 Digitos
- Swap Temp3 ;Troca os Bits LSB por MSB
- Add Temp3,Temp4 ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
- Sts Dig_1_2_Bpm,Temp3 ;Salva o Valor dos 2 Digitos
- Ret
- ;************************
- ;Congigura a Porta Serial
- ;************************
- Configura_Serial:
- .equ COM1 = UCSRA
- .equ BUF1 = UDR0
- .equ BUF2 = UDR1
- .equ Baud = 115200
- .equ UX0 = Clock/(Baud*8)-1
- .equ UX1 = Clock/(Baud*16)-1
- ;********************************************
- ;Configuração da velocidade da Porta Serial 0
- ;********************************************
- ;Ldi zl,0b00000000 ; Acerta a U2X = 0 velocidade normal
- Ldi zl,0b00000010 ; Acerta a U2X = 1 velocidade dobrada
- Out UCSRA,zl
- Ldi zl,0b00011000 ; Coloca os Bits de Transmição e Recepção no Nivelo Alto
- Out UCSRB,zl ; BAUD RATE 38.400 BPS a 08.000.000 Mhz = 25
- Ldi zh,high(UX0) ; BAUD RATE 38.400 BPS a 11.059.200 Mhz = 35
- Ldi zl,low(UX0) ; BAUD RATE 115.200 BPS a 11.059.200 Mhz = 11
- Out UBRRH,zh ; BAUD RATE 250.000 BPS a 08.000.000 Mhz = 01 Com U2X =0
- Out UBRRL,zl ; BAUD RATE 500.000 BPS a 08.000.000 Mhz = 01 Com U2X =1
- ;************** ; BAUD RATE 31.250 BPS a 08.000.000 Mhz = 15 Com U2X =0
- Rjmp Reset_d
- Inicia_LCD:
- Cbi CTL_LCD,RS_LCD
- Cbi CTL_LCD,EN_LCD
- Call Delay360Ms
- Call Delay360Ms
- Call Delay360Ms
- Call Delay360Ms
- Call Delay360Ms
- Call Delay360Ms
- ; Ldi Temp,48 ;#30h
- ; Rcall LCD_CONF
- Ldi Temp,56 ;#38H
- Rcall LCD_CONF
- Ldi Temp,56 ;#38H
- Rcall LCD_CONF
- Ldi Temp,56 ;#38H
- Rcall LCD_CONF
- Ldi Temp,6 ;#06H
- Rcall LCD_CONF
- Ldi Temp,12 ;Desliga o Cursor
- ;Ldi Temp,14 ;#0eH ;Liga o Cursor
- Rcall LCD_CONF
- Ret
- LCD_CONF:
- Cbi CTL_LCD,RS_LCD ;escreve controle Acc no lcd confira o display para 2 linhas etc
- Out LCDDATA_Out,Temp
- Sbi CTL_LCD,EN_LCD
- Nop ;wait at least 1 clock
- .IF Clock>2 ;more than 2 Mcs/s
- Ldi Temp,5 ;two nop
- .ENDIF
- .IF Clockus>4 ;more than 4 Mcs/s
- Ldi Temp,10 ;three nop
- .ENDIF
- .IF Clockus>6 ;more than 6 Mcs/s
- Ldi Temp,15 ;four nop
- .ENDIF
- .IF Clockus>8 ;more than 8 Mcs/s
- Ldi Temp,20 ;five nop
- .ENDIF
- .IF Clockus>10 ;more than 10 Mcs/s
- Ldi Temp,25 ;six nop
- .ENDIF
- .IF Clockus>12 ;more than 12 Mcs/s
- Ldi Temp,30 ;seven nop
- .ENDIF
- .IF Clockus>14 ;more than 14 Mcs/s
- Ldi Temp,35 ;eight nop
- .ENDIF
- .IF Clockus>16 ;more than 14 Mcs/s
- Ldi Temp,40 ;eight nop
- .ENDIF
- .IF Clockus>18 ;more than 14 Mcs/s
- Ldi Temp,45 ;eight nop
- .ENDIF
- .IF Clockus>20 ;more than 14 Mcs/s
- Ldi Temp,50 ;eight nop
- .ENDIF
- .IF Clockus>22 ;more than 14 Mcs/s
- Ldi Temp,55 ;eight nop
- .ENDIF
- .IF Clockus>24 ;more than 14 Mcs/s
- Ldi Temp,60 ;eight nop
- .ENDIF
- .IF Clockus>26 ;more than 14 Mcs/s
- Ldi Temp,65 ;eight nop
- .ENDIF
- .IF Clockus>28 ;more than 14 Mcs/s
- Ldi Temp,70 ;eight nop
- .ENDIF
- .IF Clockus>30 ;more than 14 Mcs/s
- Ldi Temp,75 ;eight nop
- .ENDIF
- .IF Clockus>32 ;more than 14 Mcs/s
- Ldi Temp,80 ;eight nop
- .ENDIF
- LCD_CONF_a:
- Nop
- Dec Temp
- Brne LCD_CONF_a
- Cbi CTL_LCD,EN_LCD
- Rjmp Time_Out
- Time_Out:
- Ldi Temp,255
- Ldi Temp1,255
- Time_Out0:
- Nop
- Dec Temp
- Brne Time_Out0
- Dec Temp1
- Brne Time_Out0
- Ret
- LCD_Conf1:
- Sbi CTL_LCD,RS_LCD
- LCD_Conf1_0:
- Out LCDDATA_Out,Temp
- Sbi CTL_LCD,EN_LCD
- Nop ;wait at least 1 clock
- .IF Clock>2 ;more than 2 Mcs/s
- Ldi Temp,1 ;two nop
- .ENDIF
- .IF Clockus>4 ;more than 4 Mcs/s
- Ldi Temp,2 ;three nop
- .ENDIF
- .IF Clockus>6 ;more than 6 Mcs/s
- Ldi Temp,3 ;four nop
- .ENDIF
- .IF Clockus>8 ;more than 8 Mcs/s
- Ldi Temp,4 ;five nop
- .ENDIF
- .IF Clockus>10 ;more than 10 Mcs/s
- Ldi Temp,5 ;six nop
- .ENDIF
- .IF Clockus>12 ;more than 12 Mcs/s
- Ldi Temp,6 ;seven nop
- .ENDIF
- .IF Clockus>14 ;more than 14 Mcs/s
- Ldi Temp,7 ;eight nop
- .ENDIF
- .IF Clockus>16 ;more than 14 Mcs/s
- Ldi Temp,8 ;eight nop
- .ENDIF
- .IF Clockus>18 ;more than 14 Mcs/s
- Ldi Temp,9 ;eight nop
- .ENDIF
- .IF Clockus>20 ;more than 14 Mcs/s
- Ldi Temp,10 ;eight nop
- .ENDIF
- .IF Clockus>22 ;more than 14 Mcs/s
- Ldi Temp,11 ;eight nop
- .ENDIF
- .IF Clockus>24 ;more than 14 Mcs/s
- Ldi Temp,12 ;eight nop
- .ENDIF
- .IF Clockus>26 ;more than 14 Mcs/s
- Ldi Temp,13 ;eight nop
- .ENDIF
- .IF Clockus>28 ;more than 14 Mcs/s
- Ldi Temp,14 ;eight nop
- .ENDIF
- .IF Clockus>30 ;more than 14 Mcs/s
- Ldi Temp,15 ;eight nop
- .ENDIF
- .IF Clockus>32 ;more than 14 Mcs/s
- Ldi Temp,16 ;eight nop
- .ENDIF
- LCD_CONF1_a:
- Nop
- Dec Temp
- Brne LCD_CONF1_a
- Cbi CTL_LCD,EN_LCD
- Ret
- ;**************************
- ; Delay for 15 milliseconds
- ;**************************
- Delay15ms:
- Push ZH ; save Z
- Push ZL
- Ldi ZH,HIGH((15000*clockus-16)/4)
- Ldi ZL,LOW((15000*clockus-16)/4)
- Delay15ms1:
- Sbiw ZL,1
- Brne Delay15ms1
- Pop ZL
- Pop ZH
- Ret
- ;***************************
- ; Delay for 360 milliseconds
- ;***************************
- Delay360ms:
- Push Temp
- Ldi Temp,360/15+1 ; number of 15ms delays
- Delay360ms1:
- Rcall Delay15ms
- Dec Temp
- Brne Delay360ms1
- Pop Temp
- Ret
- ;Contador de Bpm
- Limpa_Linha0:
- Ldi Pt0, LOW(256)
- Ldi Pt1,HIGH(256) ;Atualiza o sub endereço
- Ldi Temp1,' '
- Add Temp2,Pt0
- Limpa_Linha0_a:
- ST X+,Temp1 ;Salva no Buf do LCD
- Cpi Pt0,LOW(296) ;Checa se enviou 16 Caracteres p/ Ram
- Brne Limpa_Linha0_b
- Ret
- Limpa_Linha0_b:
- Cp Temp2,Pt0 ;Checa a quantidade que pediu
- Brne Limpa_Linha0_a
- Ret
- Atualiza_Ln0:
- Ldi Pt0, LOW(256)
- Ldi Pt1,HIGH(256) ;Atualiza o sub endereço
- Atualiza_Ln0_a:
- Lpm Temp1,Z+ ;Retira o Caracter do DB ou da ROM
- Tst Temp1
- Brne Atualiza_Ln0_b
- Ret
- Atualiza_Ln0_b:
- ST X+,Temp1 ;Salva no Buf do LCD
- Cpi Pt0,LOW(296) ;Checa se enviou 16 Caracteres p/ Ram
- Brne Atualiza_Ln0_a
- Ret
- Limpa_Linha1:
- Ldi Pt0, LOW(296)
- Ldi Pt1,HIGH(296) ;Atualiza o sub endereço
- Ldi Temp1,' '
- Add Temp2,Pt0
- Ldi Pt1,1 ;Atualiza o sub endereço
- Limpa_Linha1_a:
- ST X+,Temp1 ;Salva no Buf do LCD
- Cpi Pt0,LOW(336) ;Checa se Limpou 16 Caracteres p/ Ram
- Brne Limpa_Linha1_b
- Ret
- Limpa_Linha1_b:
- Cp Temp2,Pt0 ;Checa a quantidade que pediu
- Brne Limpa_Linha1_a
- Ret
- Atualiza_Ln1:
- Ldi Pt0, LOW(296)
- Ldi Pt1,HIGH(296) ;Atualiza o sub endereço
- Atualiza_Ln1_a:
- Lpm Temp1,Z+ ;Retira o Caracter do DB ou da ROM
- Tst Temp1
- Brne Atualiza_Ln1_b
- Ret
- Atualiza_Ln1_b:
- ST X+,Temp1 ;Salva no Buf do LCD
- Cpi Pt0,LOW(336) ;Checa se enviou 16 Caracteres p/ Ram
- Brne Atualiza_Ln1_a
- Ret
- Time0:
- Clr Vetor_0
- Dec Msx ;Conta 06 Vezes que e igual a 5208 Vezes por Segundo
- Inc Tp3 ;Conta 30 Vezes que e igual a 1000 Vezes por Segundo
- Reti
- Time1:
- ; Push Temp
- ; Push Temp1
- ;--------------------
- ; Clr Vetor_1
- ; Ldi Temp,LOW(Clock_1000)
- ; Ldi Temp1,255
- ; Sub Temp1,Temp
- ; Out TCNT1L,Temp1
- ; Ldi Temp,HIGH(Clock_1000) ;Frequencia do Clock Div. p/ 1000 Ms
- ; Ldi Temp1,255
- ; Sub Temp1,Temp
- ; Out TCNT1H,Temp1
- ;--------------------
- ; Pop Temp1
- ; Pop Temp
- Reti
- Msg0:
- .DB "Kim Robert Sistem Iniciando a Mesa.....!",0
- Msg1:
- .DB "Por Favor Aguarde.......................",0
- Msg4:
- .DB "123 456 789 100 200 300 400 500 600 700",0
- Msf0:
- .DB "Canais 01 a 16..",0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement