Advertisement
Guest User

ATMEGA32 TRAVANDO APOS 5 Minutos

a guest
Nov 7th, 2010
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .device ATmega32
  2. .include "m32def.inc"   ;das variaveis do sistema Registradores e ETC
  3. .org     0x0000
  4.  Rjmp    Reset
  5. ;.org    0x0012
  6. ; Rjmp   Time1
  7. .org     0x0016
  8.  Rjmp    Time0 
  9. ;***********************************
  10. ;Definição das Variaveis do programa
  11. ;***********************************
  12. ;Variaveis para o LCD
  13. .equ Clock        =8000000;24000000   ;Frequencia do Clock
  14. .equ Clock_1000   =Clock/1000
  15. .equ Clock_MS     =Clock/Clock_1000
  16. .equ Minuto       =60000
  17. .equ Fator_Div    =100
  18. .set Clockus      =Clock/1000000
  19. .equ Valor_TP     =1024
  20. .set Vlr1         =0
  21. .set Vlr2         =0
  22. .set Vlr3         =0
  23. .set Saidor       =Clock/160000
  24.  .IF Clockus     ==0          ;clock smaller than 1 Mcs/s
  25.     .SET clockus  =1
  26.  .ENDIF
  27. .equ   DB0        =0
  28. .equ   DB1        =1
  29. .equ   DB2        =2
  30. .equ   DB3        =3
  31. .equ   DB4        =4
  32. .equ   DB5        =5
  33. .equ   DB6        =6
  34. .equ   DB7        =7
  35. .equ   LCDDATA_Out=PORTC
  36. .equ   LCDDATA_In =PINC
  37. .equ   LCDDATA_Set=DDRC
  38. .equ   CTL_LCD    =PORTD
  39. .equ   RS_LCD     =2
  40. .equ   EN_LCD     =3
  41. .equ   BCD_PORT   =PORTC
  42. .equ   BCD_ATV    =PORTB
  43. .equ   BCD_D1     =1
  44. .equ   BCD_D2     =2
  45. .equ   BCD_D3     =3
  46. ;Nomes de IO
  47. .equ      Led           =PORTB
  48. .equ      Led_CPU       =0
  49. ;Registradores do Systema
  50. .def      NDA0          =R0
  51. .def      NDA1          =R1
  52. .def      Vetor_TP      =R2
  53. .def      Ctd_Bpm       =R3
  54. .def      Fator_Bpm     =R4
  55. .def      Ctd_Val       =R5
  56. .def      Ctd_Tar0      =R6
  57. .def      Ct_Mseg_L     =R7
  58. .def      Ct_Mseg_H     =R8
  59. .def      Iniciou0      =R9
  60. .def      Nda10         =R10
  61. .def      Msx           =R11
  62. .def      Tp1           =R12
  63. .def      Tp2           =R13
  64. .def      Tp3           =R14
  65. .def      NDA15         =R15
  66. .def      Temp          =R16 ;Registrador 0
  67. .def      Temp1         =R17 ;Registrador 1
  68. .def      Temp2         =R18 ;Registrador 2
  69. .def      Temp3         =R19 ;Registrador 3
  70. .def      Temp4         =R20 ;Contador de recepção Baixo
  71. .def      Temp5         =R21 ;Contador de recepção Alto
  72. .def      Vetor_0       =R22 ;Contador de transmição Baixo
  73. .def      Vetor_1       =R23 ;Contador de transmição Alto
  74. .def      Vetor_2       =R24 ;Vetor de Entrada
  75. .def      Vetor_3       =R25 ;Vetor de Saida
  76. .def      Pt0           =r26 ;Ponteiro 0 da memoria Ram
  77. .def      Pt1           =r27 ;Ponteiro 1 da memoria Ram
  78. .def      Pt2           =r28 ;Ponteiro 2 da memoria Ram
  79. .def      Pt3           =r29 ;Ponteiro 3 da memoria Ram
  80. .def      Pt4           =r30 ;Ponteiro 4 da memoria Eprom
  81. .def      Pt5           =r31 ;Ponteiro 5 da memoria Eprom
  82. ;---------------------------
  83. .def      Dg0           =r18
  84. .def      Dg1           =r19
  85. .def      Dg2           =r20
  86. ;Variaveis do Sistema
  87. .equ      Buf_Env_L     =96  ;000060 em Exa da Ram
  88. .equ      Buf_Env_H     =97
  89. .equ      Buf_Env_Tam_L =98
  90. .equ      Buf_Env_Tam_H =99
  91. .equ      Bpm           =100
  92. .equ      FC_LCD        =101
  93. .equ      Vt_Tp0        =102
  94. .equ      Vt_Tp1        =103
  95. .equ      Vt_Tp2        =104
  96. .equ      Tp_Bpm0       =105
  97. .equ      Tp_bpm1       =106
  98. .equ      Ctd1          =107
  99. .equ      Dig_1_2_Bpm   =108
  100. .equ      Dig_3_4_Bpm   =109
  101. .equ      BCD1          =110
  102. .equ      BCD2          =111
  103. .equ      BCD3          =112
  104. .equ      BCD4          =113
  105. .equ      BCD5          =114
  106. .equ      BCD6          =115
  107. .equ      BCD7          =116
  108. .equ      BCD8          =117
  109. .equ      BCD9          =118
  110. .equ      BCD10         =119
  111. .equ      BCD11         =120
  112. .equ      BCD12         =121
  113. .equ      BCD13         =122
  114. .equ      BCD14         =123
  115. .equ      Led_Status_0  =124
  116. .equ      Led_Status_1  =125
  117. .equ      Vetor_BCD     =126
  118. .equ      Teste         =127
  119. ;*********************
  120. ;End. Recb. Tempo Real
  121. ;*********************
  122. .equ      Atu_Env       =225 ;0000E1 em Exa da Ram
  123. .equ      Atu_Rec       =226 ;0000E2 em Exa da Ram
  124. ;*********************
  125. .equ   Mn0_0      =256
  126. .equ   Mn0_1      =257
  127. .equ   Mn0_2      =258
  128. .equ   Mn0_3      =259
  129. .equ   Mn0_4      =260
  130. .equ   Mn0_5      =261
  131. .equ   Mn0_6      =262
  132. .equ   Mn0_7      =263
  133. .equ   Mn0_8      =264
  134. .equ   Mn0_9      =265
  135. .equ   Mn0_10     =266
  136. .equ   Mn0_11     =267
  137. .equ   Mn0_12     =268
  138. .equ   Mn0_13     =269
  139. .equ   Mn0_14     =270
  140. .equ   Mn0_15     =271
  141. .equ   Mn0_16     =272
  142. .equ   Mn0_17     =273
  143. .equ   Mn0_18     =274
  144. .equ   Mn0_19     =275
  145. .equ   Mn0_20     =276
  146. .equ   Mn0_21     =277
  147. .equ   Mn0_22     =278
  148. .equ   Mn0_23     =279
  149. .equ   Mn0_24     =280
  150. .equ   Mn0_25     =281
  151. .equ   Mn0_26     =282
  152. .equ   Mn0_27     =283
  153. .equ   Mn0_28     =284
  154. .equ   Mn0_29     =285
  155. .equ   Mn0_30     =286
  156. .equ   Mn0_31     =287
  157. .equ   Mn0_32     =288
  158. .equ   Mn0_33     =289
  159. .equ   Mn0_34     =290
  160. .equ   Mn0_35     =291
  161. .equ   Mn0_36     =292
  162. .equ   Mn0_37     =293
  163. .equ   Mn0_38     =294
  164. .equ   Mn0_39     =295
  165. .equ   Mn0_40     =296
  166. .equ   Mn0_41     =297
  167. .equ   Mn0_42     =298
  168. .equ   Mn0_43     =299
  169. .equ   Mn0_44     =300
  170. .equ   Mn0_45     =301
  171. .equ   Mn0_46     =302
  172. .equ   Mn0_47     =303
  173. .equ   Mn0_48     =304
  174. .equ   Mn0_49     =305
  175. .equ   Mn0_50     =306
  176. .equ   Mn0_51     =307
  177. .equ   Mn0_52     =308
  178. .equ   Mn0_53     =309
  179. .equ   Mn0_54     =310
  180. .equ   Mn0_55     =311
  181. .equ   Mn0_56     =312
  182. .equ   Mn0_57     =313
  183. .equ   Mn0_58     =314
  184. .equ   Mn0_59     =315
  185. .equ   Mn0_60     =316
  186. .equ   Mn0_61     =317
  187. .equ   Mn0_62     =318
  188. .equ   Mn0_63     =319
  189. .equ   Mn0_64     =320
  190. .equ   Mn0_65     =321
  191. .equ   Mn0_66     =322
  192. .equ   Mn0_67     =323
  193. .equ   Mn0_68     =324
  194. .equ   Mn0_69     =325
  195. .equ   Mn0_70     =326
  196. .equ   Mn0_71     =327
  197. .equ   Mn0_72     =328
  198. .equ   Mn0_73     =329
  199. .equ   Mn0_74     =330
  200. .equ   Mn0_75     =331
  201. .equ   Mn0_76     =332
  202. .equ   Mn0_77     =333
  203. .equ   Mn0_78     =334
  204. .equ   Mn0_79     =335
  205. ;***** Inicialização
  206. Reset:
  207.  Ldi      R16,high(RAMEND)   ;Main program start
  208.  Out      SPH,R16            ;Set Stack Pointer to top of RAM
  209.  Ldi      R16,low(RAMEND)
  210.  Out      SPL,R16
  211. Reset_a:
  212.  Rjmp     Configura_Timers
  213. Reset_b:
  214.  Rjmp     Configura_Portas
  215. Reset_c:
  216.  Rjmp     Configura_Serial
  217. Reset_d:
  218. ;Rcall    Configura_AD
  219. Reset_e:
  220. ;Rcall    Configura_PWM
  221. Reset_f:
  222.  Rjmp     Le_parametros
  223. Reset_g:
  224. ;Call     Inicia_LCD
  225.  ;Carrega a Mensagem da primeira linha a ser enviada do DB
  226.  Call     Limpa_Linha0
  227.  Call     Limpa_Linha1
  228.  Ldi      ZL,LOW(Msg0<<1)
  229.  Ldi      ZH,HIGH(Msg0<<1)
  230.  Call     Atualiza_Ln0
  231.  Ldi      ZL,LOW(Msg1<<1)
  232.  Ldi      ZH,HIGH(Msg1<<1)
  233.  Call     Atualiza_Ln1
  234.  Clr      Ctd_Tar0
  235.  Ldi      Temp,3
  236.  Mov      Ctd_Tar0,Temp ;Timeout de 3 Segundos Ligado
  237. ;Somente para Testes
  238. ;Ldi      Temp,1
  239. ;Mov      Fator_Bpm,Temp
  240. ;****************************
  241. ;Rotina Principal do programa
  242. ;****************************
  243. Main:
  244. ;   Rjmp  Checa_Serial_In
  245.   Main_a:
  246. ;   Rjmp  Checa_Serial_Out
  247.   Main_b:
  248.   ; Rjmp  Testa_Soma
  249.   Main_c:
  250.     Rjmp  Checa_Tarefas
  251.   Main_d:
  252.     Rjmp  Val_Var
  253.   Main_e:
  254.     Jmp   Mostra_Menu
  255.   Main_f:
  256.     Rjmp  Tempo1
  257.   Main_g:
  258.     Rjmp  Mostra_Byte_BCD
  259.   Main_h:
  260. Rjmp      Main
  261. Checa_Tarefas:
  262.   Sbrc    Iniciou0,0
  263.     Jmp   Checa_Tr0              ;Procegue se já Mostrou MSG Inicial no LCD
  264.   Sbrc    Vetor_2,1
  265.     Jmp   Checa_Tr0              ;Aguarda o Timer1 Zerar
  266.   Mov     Temp,Iniciou0
  267.   Sbr     Vetor_2,2              ;Desliga Tarefa1
  268.   Dec     Ctd_Tar0               ;Tempo para realizar esta Tarefa
  269.   Brne    Checa_Tr0a             ;Verifica se e Igual ou Maior que 100
  270.     Call  Limpa_Linha0
  271.     Call  Limpa_Linha1
  272.     Ldi   ZL,LOW(Msf0<<1)
  273.     Ldi   ZH,HIGH(Msf0<<1)
  274.     Call  Atualiza_Ln0
  275.     Cbr   Temp,1                ;Desliga a Entrada de MSG
  276.     Mov   Iniciou0,Temp
  277.   Checa_Tr0a:
  278.  
  279.   Checa_Tr0:
  280.  
  281.   Checa_Tr1:
  282.  
  283. Rjmp      Main_d
  284. Testa_Soma:
  285.  
  286. Rjmp        Main_c
  287. Val_Var:
  288.   Jmp            Main_e         ;Retorna se estava aguardando Time Out
  289.  
  290.   ;Vt_Tp0
  291.   Sbrs           Vetor_1,1
  292.     Jmp          Main_e         ;Retorna se estava aguardando Time Out
  293.   Lds            Temp,Ctd1
  294.   Ldi            Temp1,48       ;Valor do Numero '0'
  295.   Mov            Dg0,Temp1
  296.   Mov            Dg1,Temp1
  297.   Mov            Dg2,Temp1
  298.   Cpi            Temp,100
  299.   Brlo           Val_Var0       ;Verifica se e Igual ou Maior que 100
  300.     Cpi          Temp,200
  301.     Brlo         Val_Var00
  302.       Inc        Dg0
  303.       Inc        Dg0
  304.       Ldi        Temp1,-200
  305.       Add        Temp,Temp1
  306.       Jmp        Val_Var0
  307.     Val_Var00:
  308.     Inc          Dg0
  309.     Ldi          Temp1,-100
  310.     Add          Temp,Temp1
  311.   Val_Var0:
  312.   Cpi            Temp,10
  313.   Brsh           Val_Var1      ;Verifica se e Igual ou Maior que 10
  314.     Mov          Dg2,Temp
  315.     Ldi          Temp,48
  316.     Add          Dg2,Temp
  317.     Rjmp         Mostra
  318.   Val_Var1:
  319.   Cpi            Temp,20
  320.   Brsh           Val_Var2      ;Verifica se e Igual ou Maior que 20
  321.     Ldi          Temp1,1
  322.     Add          Dg1,Temp1
  323.     Mov          Dg2,Temp
  324.     Ldi          Temp,38
  325.     Add          Dg2,Temp
  326.     Rjmp         Mostra
  327.   Val_Var2:
  328.   Cpi            Temp,30
  329.   Brsh           Val_Var3      ;Verifica se e Igual ou Maior que 30
  330.     Ldi          Temp1,2
  331.     Add          Dg1,Temp1
  332.     Mov          Dg2,Temp
  333.     Ldi          Temp,28
  334.     Add          Dg2,Temp
  335.     Rjmp         Mostra
  336.   Val_Var3:
  337.   Cpi            Temp,40
  338.   Brsh           Val_Var4      ;Verifica se e Igual ou Maior que 20
  339.     Ldi          Temp1,3
  340.     Add          Dg1,Temp1
  341.     Mov          Dg2,Temp
  342.     Ldi          Temp,18
  343.     Add          Dg2,Temp
  344.     Rjmp         Mostra
  345.   Val_Var4:
  346.   Cpi            Temp,50
  347.   Brsh           Val_Var5      ;Verifica se e Igual ou Maior que 20
  348.     Ldi          Temp1,4
  349.     Add          Dg1,Temp1
  350.     Mov          Dg2,Temp
  351.     Ldi          Temp,8
  352.     Add          Dg2,Temp
  353.     Rjmp         Mostra
  354.   Val_Var5:
  355.   Cpi            Temp,60
  356.   Brsh           Val_Var6      ;Verifica se e Igual ou Maior que 20
  357.     Ldi          Temp1,5
  358.     Add          Dg1,Temp1
  359.     Mov          Dg2,Temp
  360.     Ldi          Temp,-2
  361.     Add          Dg2,Temp
  362.     Rjmp         Mostra
  363.   Val_Var6:
  364.   Cpi            Temp,70
  365.   Brsh           Val_Var7      ;Verifica se e Igual ou Maior que 20
  366.     Ldi          Temp1,6
  367.     Add          Dg1,Temp1
  368.     Mov          Dg2,Temp
  369.     Ldi          Temp,-12
  370.     Add          Dg2,Temp
  371.     Rjmp         Mostra
  372.   Val_Var7:
  373.   Cpi            Temp,80
  374.   Brsh           Val_Var8      ;Verifica se e Igual ou Maior que 20
  375.     Ldi          Temp1,7
  376.     Add          Dg1,Temp1
  377.     Mov          Dg2,Temp
  378.     Ldi          Temp,-22
  379.     Add          Dg2,Temp
  380.     Rjmp         Mostra
  381.   Val_Var8:
  382.   Cpi            Temp,90
  383.   Brsh           Val_Var9      ;Verifica se e Igual ou Maior que 20
  384.     Ldi          Temp1,8
  385.     Add          Dg1,Temp1
  386.     Mov          Dg2,Temp
  387.     Ldi          Temp,-32
  388.     Add          Dg2,Temp
  389.     Rjmp         Mostra
  390.   Val_Var9:
  391.   Cpi            Temp,100
  392.   Brsh           Mostra        ;Verifica se e Igual ou Maior que 20
  393.     Ldi          Temp1,9
  394.     Add          Dg1,Temp1
  395.     Mov          Dg2,Temp
  396.     Ldi          Temp,-42
  397.     Add          Dg2,Temp
  398.     Rjmp         Mostra
  399.   Mostra:
  400. ; Sbrs           Ctd_Val,0
  401. ;   Rjmp         Mostra_0
  402.   Sts            Mn0_16,Dg0
  403.   Sts            Mn0_17,Dg1
  404.   Sts            Mn0_18,Dg2
  405. ; Ldi            Temp,2
  406. ; Rjmp           Soma_Mostra
  407. Rjmp      Main_e
  408. Mostra_Menu:
  409. Mov              Temp,Msx
  410. Cpi              Temp,0
  411. Breq             Mostra_Menu_0
  412.   Jmp            Main_f
  413. Mostra_Menu_0:
  414. Lds              Temp,FC_LCD
  415. Cpi              Temp,0
  416. Brne             Mostra_Menu_1
  417.   Ldi            Temp,128         ;#80H Retorna Cr p/ primeira linha
  418.   Cbi            CTL_LCD,RS_LCD
  419.   RCall          LCD_Conf1_0
  420.   Ldi            Temp,6
  421.   Mov            Msx,Temp
  422.   Lds            Temp,FC_LCD
  423.   Inc            Temp
  424.   Sts            FC_LCD,Temp
  425.   Jmp            Main_f
  426. Mostra_Menu_1:
  427. Cpi              Temp,41
  428. Brlo             Mostra_Menu_2
  429.   Jmp            Mostra_Menu_4
  430. Mostra_Menu_2:
  431. Mov              Pt0,Temp
  432. Ldi              Temp,-1;11
  433. Add              Pt0,Temp
  434. Ldi              Pt1,1        ;Atualiza o sub endereço
  435. LD               Temp,X       ;Le o Dado do Buffer
  436. Cpi              Pt0,43       ;Verifica se chegou ao maximo
  437. Brne             Mostra_Menu_3
  438.   RCall          LCD_Conf1
  439.   Ldi            Temp,6
  440.   Mov            Msx,Temp
  441.   Ldi            Temp,0
  442.   Sts            FC_LCD,Temp
  443.   Jmp            Main_f
  444. Mostra_Menu_3:
  445. RCall            LCD_Conf1
  446. Ldi              Temp,6
  447. Mov              Msx,Temp
  448. Lds              Temp,FC_LCD
  449. Inc              Temp
  450. Sts              FC_LCD,Temp
  451. Jmp              Main_f
  452. Mostra_Menu_4:
  453. Cpi              Temp,41
  454. Brne             Mostra_Menu_5
  455.   Ldi            Temp,192         ;#C0H Retorna Cr p/ segunda linha
  456.   Cbi            CTL_LCD,RS_LCD
  457.   RCall          LCD_Conf1_0
  458.   Ldi            Temp,8
  459.   Mov            Msx,Temp
  460.   Lds            Temp,FC_LCD
  461.   Inc            Temp
  462.   Sts            FC_LCD,Temp
  463.   Jmp            Main_f
  464. Mostra_Menu_5:
  465. Mov              Pt0,Temp
  466. Ldi              Temp,-2;10
  467. Add              Pt0,Temp
  468. Ldi              Pt1,1        ;Atualiza o sub endereço
  469. LD               Temp,X       ;Le o Dado do Buffer
  470. Cpi              Pt0,79       ;Verifica se chegou ao maximo
  471. Brne             Mostra_Menu_6
  472.   RCall          LCD_Conf1
  473.   Ldi            Temp,6
  474.   Mov            Msx,Temp
  475.   Ldi            Temp,0
  476.   Sts            FC_LCD,Temp
  477.   Jmp            Main_f
  478. Mostra_Menu_6:
  479. RCall            LCD_Conf1
  480. Ldi              Temp,6
  481. Mov              Msx,Temp
  482. Lds              Temp,FC_LCD
  483. Inc              Temp
  484. Sts              FC_LCD,Temp
  485. Jmp              Main_f
  486. Pulsa_Led:
  487.   Sbis    Led,Led_CPU     ;If (Port B,pinX = 0)
  488.     Jmp   Pulsa_Led_a
  489.   Cbi     Led,Led_CPU     ;Clr  Bit
  490.     Rjmp  Main_g
  491.   Pulsa_Led_a:
  492.   Sbi     Led,Led_CPU     ;Setb Bit
  493. Ret
  494. ;***************************************************
  495. ;Checa o Vetor de Segundos e Retorna pra Mesma Linha
  496. ;Não Pode mudar a sequencia esta rotina deve sempre
  497. ;estar 6 Linhas antes da rotina de checagem de Tempo
  498. ;***************************************************
  499. Tempo0:
  500.   Mov            Temp,Tp3
  501.   Cpi            Temp,31
  502.   Brlo           Tempo0_a
  503.     Clr          Vetor_1           ;Passa aquí 1000 Vezes por Segundo
  504.     Clr          Tp3
  505.   Tempo0_a:
  506.   Sbr            Vetor_0,128  
  507. Tempo1:
  508.   Sbrs           Vetor_0,7
  509.     Rjmp         Tempo0            ;Checa o Vetor e Volta pra Linha anterior
  510.   Sbrc           Vetor_1,0         ;Verifica se é para contar tempo
  511.     Rjmp         Main_g            ;Retorna se estiver o timer nao liberou ainda
  512.   Mov            Temp,Vetor_1
  513.   Sbr            Temp,1
  514.   Mov            Vetor_1,Temp
  515.  ;----------------------------
  516.   Mov            Temp,Tp1
  517.   Lds            Temp1,Tp_bpm0
  518.   Cp             Temp,Temp1
  519.   Brlo           Tempo_sai         ;Se for = ou >
  520.     Clr          Tp1
  521.    ;----------------
  522.     Mov          Temp,Tp2
  523.     Lds          Temp1,Tp_bpm1
  524.     Cp           Temp,Temp1
  525.     Brlo         Tempo_sai_0       ;Se for = ou >
  526.       Clr        Tp2
  527.       Clr        Vetor_2
  528.      ;------------------
  529.       Lds        Temp,Teste
  530.       Inc        Temp
  531.       Sts        Teste,Temp
  532.       Call       Pulsa_Led
  533.       Rjmp       Main_g
  534.     Tempo_sai_0:
  535.     Inc          Tp2
  536.     Rjmp         Main_g
  537.   Tempo_Sai:
  538.   Inc            Tp1
  539. Rjmp      Main_g
  540. Ajusta_Tempo:
  541.   Rjmp            Divide
  542.   Ldi             Temp1,LOW(500)
  543.   Ldi             Temp,HIGH(500) ;Valor de Bits Por Minutos
  544.   Ldi             Temp1,LOW(120)
  545.   Ldi             Temp,HIGH(120) ;Valor de Bits Por Minutos
  546.   Ldi             Pt0, LOW(Bpm)
  547.   Ldi             Pt1,HIGH(Bpm)  ;Atualiza o sub endereço
  548.   Ldi             Temp1,255
  549.   Sub             Temp1,Temp
  550.   Mov             Tp1,Temp1
  551.   Ldi             Temp1,255
  552.   Sts             Tp_Bpm0,Temp1
  553.   Ldi             Temp,HIGH(60000/Bpm) ;Valor de Bits Por Minutos
  554.   Ldi             Temp1,255
  555.   Sub             Temp1,Temp
  556.   Mov             Tp2,Temp1
  557.   Ldi             Temp1,2
  558.   Sts             Tp_Bpm1,Temp1
  559.  
  560.   Ldi             Temp,255
  561.   Mov             Tp1,Temp
  562.   Ldi             Temp,1
  563.   Mov             Tp2,Temp
  564.  
  565. Ret
  566.   Lds          Temp,Bpm
  567.   Ldi          ZL,LOW(1000)
  568.   Ldi          ZH,HIGH(1000)
  569.   Ajusta_Tempoa:
  570.   Subi         ZL,1
  571.   Brne         Ajusta_Tempob
  572.     Dec        ZH
  573.   Ajusta_Tempob:
  574.   Dec          Temp
  575.   Brne         Ajusta_Tempoa
  576.     Sts        Tp_Bpm0,ZL
  577.     Sts        Tp_Bpm1,ZH
  578.     Ret
  579. Calcula_Bpm:
  580.   Ldi     Temp,250
  581.   Lds     Ctd_Bpm,Bpm
  582.   Sub     Temp,Ctd_Bpm
  583.   Mov     Fator_Bpm,Temp
  584. Ret
  585. Calcula_Bpm1:
  586. Divide:
  587.   Push                R14
  588.   Push                R15
  589.   Push                R16
  590.   Push                R17
  591.   Push                R18
  592.   Push                R19
  593.   Push                R20
  594.  ;***** Divide Two Unsigned 16-Bit Numbers (50,000/60,000)
  595.   ldi   dd16uL,low(60000)
  596.   ldi   dd16uH,high(60000)
  597.  ;Ldi   dv16uL,low(60)
  598.  ;Ldi   dv16uH,high(60)
  599.   Lds   dv16uL,Bpm;low(2)
  600.   Ldi   dv16uH,0
  601.  ;Mov   dv16uH,High(Bpm);high(2)
  602.  ;Ldi   dv16uL,Low(Bpm);low(2)
  603.  ;Ldi   dv16uH,High(Bpm);high(2)
  604.   rcall div16u      ;result:    $0000 (0)
  605.   ;remainder:   $c350 (50,000)
  606.  ;----------------------------
  607.   Sts                 Tp_Bpm0,R16
  608.   Sts                 Tp_Bpm1,R17
  609.  ;-----------------------
  610.   Pop                 R20
  611.   Pop                 R19
  612.   Pop                 R18
  613.   Pop                 R17
  614.   Pop                 R16
  615.   Pop                 R15
  616.   Pop                 R14
  617. Ret
  618.  ;***** Subroutine Register Variables
  619.  .def   drem16uL=r14
  620.  .def   drem16uH=r15
  621.  .def   dres16uL=r16
  622.  .def   dres16uH=r17
  623.  .def   dd16uL  =r16
  624.  .def   dd16uH  =r17
  625.  .def   dv16uL  =r18
  626.  .def   dv16uH  =r19
  627.  .def   dcnt16u =r20
  628.                                    
  629.   ;***** Code
  630.  
  631.   div16u:   clr drem16uL    ;clear remainder Low byte
  632.     sub     drem16uH,drem16uH;clear remainder High byte and carry
  633.     ldi     dcnt16u,17  ;init loop counter
  634.   d16u_1:   rol dd16uL      ;shift left dividend
  635.     rol     dd16uH
  636.     dec     dcnt16u     ;decrement counter
  637.     brne    d16u_2      ;if done
  638.       ret           ;    return
  639.   d16u_2:   rol drem16uL    ;shift dividend into remainder
  640.     rol     drem16uH
  641.     sub     drem16uL,dv16uL ;remainder = remainder - divisor
  642.     sbc     drem16uH,dv16uH ;
  643.     brcc    d16u_3      ;if result negative
  644.       add   drem16uL,dv16uL ;    restore remainder
  645.       adc   drem16uH,dv16uH
  646.       clc           ;    clear carry to be shifted into result
  647.       rjmp  d16u_1      ;else
  648.   d16u_3:   sec         ;    set carry to be shifted into result
  649.     rjmp    d16u_1
  650.  
  651. Ret
  652. Configura_Timers:
  653.   ;Configurações das interrupções de Timers
  654.   Ldi    Temp1,0b00000001            ;Escolhe o Timer Certo a Abilitar
  655.   ; OCIE2 _______||||||||______TOIE0 ;Liga ou desliga Timer 0
  656.   ; TOIE2 ________||||||_______Nada
  657.   ; TICIE1_________||||________TOIE1
  658.   ; OCIE1A__________||_________OCIE1B
  659.   Out     TIMSK,Temp1              ;Validation de l'interruption.
  660.   ;Configurações do Timer 0 Valor da Carga Inicial
  661.   Ldi     Temp1,0
  662.   OUT     TCNT0,Temp1
  663.   ;Tipo de divisão do Clock
  664.   Ldi     Temp1,0b00000001
  665.   ; Nada  _______||||||||_______CS00
  666.   ; Nada  ________||||||________CS01
  667.   ; Nada  _________||||_________CS02
  668.   ; Nada  __________||__________Nada
  669.   OUT     TCCR0,Temp1
  670.  ;----------------------------------
  671.   SEI                             ;Abilita as Interrupções
  672. Rjmp              Reset_b
  673. Configura_Timer1:
  674.   Ldi             Temp,LOW(Clock_1000)
  675.   Ldi             Temp1,255
  676.   Sub             Temp1,Temp
  677.   Out             TCNT1L,Temp1
  678.   Ldi             Temp,HIGH(Clock_1000) ;Frequencia do Clock Div. p/ 1000 Ms
  679.   Ldi             Temp1,255
  680.   Sub             Temp1,Temp
  681.   Out             TCNT1H,Temp1
  682.  ;Achar 1000 pulsos por segundo
  683. ; Ldi            Temp1,LOW(Clock_1000)
  684. ; Ldi            Temp,HIGH(Clock_1000);Frequencia do Clock Div. po 1000 Ms
  685. ; Ldi            Temp1,LOW(Clock_MS)
  686. ; Ldi            Temp,HIGH(Clock_MS);Frequencia do Clock Div. po 1000 Ms
  687. ; Out            TCNT1L,Temp1
  688. ; Out            TCNT1H,Temp
  689.  ;Prepara o modo de nao pre escala
  690.   Ldi    Temp1,0b00000001
  691.   ; Nada  _______||||||||_______CS00
  692.   ; Nada  ________||||||________CS01
  693.   ; Nada  _________||||_________CS02
  694.   ; Nada  __________||__________Nada
  695.   OUT    TCCR1B,Temp1
  696.   SEI                             ;Abilita as Interrupções
  697. Rjmp              Reset_b
  698. ;************************************************
  699. ;Esta rotina acerta os valore iniciais do sistema
  700. ;************************************************
  701. Configura_portas:
  702.  ;Porta de saida de dados
  703.  ;--------------------
  704.   Ldi         Temp,255
  705.   Out         DDRA,Temp
  706.   Ldi         Temp,0b11111111
  707.   Out         Porta,Temp ;Coloca toda a porta no nivel Alto
  708.  ;--------------------
  709.   Sbi         DDRB,0     ;Acerta Pino 0 Porta B p/ Saida Led da CPU
  710.   Sbi         DDRB,1     ;Acerta Pino 1 Porta B p/ Saida
  711.   Sbi         DDRB,2     ;Acerta Pino 2 Porta B p/ Saida
  712.   Sbi         DDRB,3     ;Acerta Pino 3 Porta B p/ Saida
  713.   Sbi         PINB,4     ;Acerta Pino 4 Porta B p/ Entrada
  714.   Sbi         PINB,5     ;Acerta Pino 5 Porta B p/ Entrada (MOSI)
  715.   Sbi         PINB,6     ;Acerta Pino 6 Porta B p/ Entrada (MISO)
  716.   Sbi         PINB,7     ;Acerta Pino 7 Porta B p/ Entrada (SCK )
  717.   Ldi         Temp,0b11111111
  718.   Out         Portb,Temp ;Coloca toda a porta no nivel Alto
  719.  ;Configurações da Porta C Porta de saida de dados
  720.   Ldi         Temp,255
  721.   Out         DDRC,Temp   ;Configura a porta inteira como saida
  722.  ;Configurações da Porta D Porta de saida de dados
  723.   Sbi         DDRD,2     ;Acerta o Pino 0 da Porta B Como Saida   -- RS_LCD
  724.   Sbi         DDRD,3     ;Acerta o Pino 1 da Porta B Como Saida   -- EN_LCD
  725.   Sbi         PIND,6     ;Acerta Pino 6 Porta D p/ Entrada        -- Botão 1
  726. Rjmp          Reset_c
  727. Le_parametros:
  728.   Ldi     Temp,1
  729.   Sts     Vetor_BCD,Temp
  730.   Ldi     Temp,0
  731.   Sts     BCD1,Temp
  732.   Sts     BCD2,Temp
  733.   Sts     BCD3,Temp
  734.   Ser     Vetor_0
  735.   Ser     Vetor_1
  736.   Ser     Vetor_2
  737.   Clr     Iniciou0
  738. ; Rcall   Calcula_Bpm
  739.   Ldi     Temp,125
  740.   Mov     Ctd_Bpm,Temp
  741.   Ldi     Temp,0
  742.   Sts     FC_LCD,Temp
  743.   Clr     Ctd_Tar0
  744.   Ldi     Temp,LOW(1000)
  745.   Mov     Ct_Mseg_L,Temp
  746.   Ldi     Temp,HIGH(1000)
  747.   Mov     Ct_Mseg_H,Temp
  748.  ;Checa os 4 Digitos de Bpm = 0060
  749.   Ldi     Temp1,0
  750.   Ldi     Temp2,0
  751.   Swap    Temp1                      ;Troca os Bits LSB por MSB
  752.   Add     Temp1,Temp2                ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
  753.   Sts     Dig_1_2_Bpm,Temp1          ;Salva o Valor dos 2 Digitos
  754.   Ldi     Temp1,6
  755.   Ldi     Temp2,0
  756.   Swap    Temp1                      ;Troca os Bits LSB por MSB
  757.   Add     Temp1,Temp2                ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
  758.   Sts     Dig_3_4_Bpm,Temp1          ;Salva o Valor dos 2 Digitos
  759.  ;-----------------
  760.   Rcall   Inc_BPM
  761.   Ldi     Temp,60
  762.   Sts     Bpm,Temp
  763.   Call    Ajusta_Tempo
  764. Rjmp      Reset_g
  765. Mostra_Byte_BCD:
  766.   Sbrc          Vetor_0,6
  767.     Rjmp        Main_h               ;Retorna se estava aguardando Time Out
  768.   Sbr           Vetor_0,64           ;Desliga Entrada
  769.   Lds           Temp,Vetor_BCD
  770.   Sbrc          Temp,0
  771.     Rjmp        Pega_Valor0_BCD
  772.   Sbrc          Temp,1
  773.     Rjmp        Mostra_BCD2
  774.   Sbrc          Temp,2
  775.     Rjmp        Mostra_BCD3
  776.   Sbrc          Temp,3
  777.     Rjmp        Pega_Valor1_BCD
  778.   Sbrc          Temp,4
  779.     Rjmp        Mostra_BCD5
  780.   Sbrc          Temp,5
  781.     Rjmp        Mostra_BCD6
  782.  
  783.   Rjmp          Soma_Vetor
  784.   Pega_Valor0_BCD:
  785.   Lds           Temp2,Teste
  786.   Jmp           Pega_Valor9_BCD
  787.   Pega_Valor1_BCD:
  788.   Lds           Temp2,Teste
  789.   Jmp           Pega_Valor9_BCD
  790.   Pega_Valor9_BCD:
  791.   Cpi           Temp2,100             ;Verifica se é menor que 100
  792.   Brsh          Mst_BCD_0
  793.     Ldi         Temp1,0
  794.     Call        Acha_Digito
  795.     Sbrc        Temp,0
  796.       Sts       BCD1,Temp1
  797.     Mov         Temp1,Temp2
  798.     Call        Acha_Dezena
  799.     Sbrc        Temp,0
  800.       Sts       BCD2,Temp1
  801.     Mov         Temp1,Temp2
  802.     Call        Acha_Digito
  803.     Sbrc        Temp,0
  804.       Sts       BCD3,Temp1
  805.     Rjmp        Mostra_BCD1
  806.   Mst_BCD_0:
  807.   Cpi           Temp2,200            ;Verifica se é menor que 200
  808.   Brsh          Mst_BCD_1
  809.     Subi        Temp2,100
  810.     Ldi         Temp1,1
  811.     Call        Acha_Digito
  812.     Sbrc        Temp,0
  813.       Sts       BCD1,Temp1
  814.     Mov         Temp1,Temp2
  815.     Call        Acha_Dezena
  816.     Sbrc        Temp,0
  817.       Sts       BCD2,Temp1
  818.     Mov         Temp1,Temp2
  819.     Call        Acha_Digito
  820.     Sbrc        Temp,0
  821.       Sts       BCD3,Temp1
  822.     Rjmp        Mostra_BCD1
  823.   Mst_BCD_1:                         ;Verifica se é menor que 256
  824.   Subi          Temp2,200
  825.   Ldi           Temp1,2
  826.   Call          Acha_Digito
  827.   Sbrc          Temp,0
  828.     Sts         BCD1,Temp1
  829.   Mov           Temp1,Temp2
  830.   Call          Acha_Dezena
  831.   Sbrc          Temp,0
  832.     Sts         BCD2,Temp1
  833.   Mov           Temp1,Temp2
  834.   Call          Acha_Digito
  835.   Sbrc          Temp,0
  836.     Sts         BCD3,Temp1
  837. Rjmp            Mostra_BCD1
  838. Soma_Vetor:
  839.   Lds           Temp,Vetor_BCD
  840.   Add           Temp,Temp
  841. Soma_Vetor_a:
  842.   Sts           Vetor_BCD,Temp
  843. Rjmp            Main_h
  844. Mostra_BCD1:
  845.   Ldi           Temp,1
  846.   Out           BCD_PORT,Temp
  847.   Sbi           BCD_ATV,BCD_D1
  848.   Cbi           BCD_ATV,BCD_D1
  849.   ;-----------------------
  850.   Lds           Temp,BCD1
  851.   Out           BCD_PORT,Temp
  852.   Sbi           BCD_ATV,BCD_D2
  853.   Cbi           BCD_ATV,BCD_D2
  854. Rjmp            Soma_Vetor
  855. Mostra_BCD2:
  856.   Ldi           Temp,2
  857.   Out           BCD_PORT,Temp
  858.   Sbi           BCD_ATV,BCD_D1
  859.   Cbi           BCD_ATV,BCD_D1
  860.  ;-----------------------
  861.   Lds           Temp,BCD2
  862.   Out           BCD_PORT,Temp
  863.   Sbi           BCD_ATV,BCD_D2
  864.   Cbi           BCD_ATV,BCD_D2
  865. Rjmp            Soma_Vetor
  866. Mostra_BCD3:
  867.   Ldi           Temp,4
  868.   Out           BCD_PORT,Temp
  869.   Sbi           BCD_ATV,BCD_D1
  870.   Cbi           BCD_ATV,BCD_D1
  871.  ;-----------------------
  872.   Lds           Temp,BCD3
  873.   Out           BCD_PORT,Temp
  874.   Sbi           BCD_ATV,BCD_D2
  875.   Cbi           BCD_ATV,BCD_D2
  876.   Ldi           Temp,1
  877. Rjmp            Soma_Vetor_a
  878. Mostra_BCD4:
  879.  
  880. Rjmp            Soma_Vetor
  881. Mostra_BCD5:
  882.  
  883. Rjmp            Soma_Vetor
  884. Mostra_BCD6:
  885.  
  886. Rjmp            Soma_Vetor
  887. Mostra_BCD7:
  888.  
  889. Rjmp            Soma_Vetor
  890. Mostra_BCD8:
  891.  
  892. Rjmp            Soma_Vetor
  893. Mostra_BCD9:
  894.  
  895. Rjmp            Soma_Vetor
  896. Mostra_BCD10:
  897.  
  898. Rjmp            Soma_Vetor
  899. Mostra_BCD11:
  900.  
  901. Rjmp            Soma_Vetor
  902. Mostra_BCD12:
  903.  
  904. Rjmp            Soma_Vetor
  905. Mostra_BCD13:
  906.  
  907. Rjmp            Soma_Vetor
  908. Mostra_BCD14:
  909.  
  910.   Ldi           Temp,1
  911. Rjmp            Soma_Vetor_a
  912. Acha_Dezena:
  913.   Cpi           Temp1,10
  914.   Brsh          Acha_Dz0
  915.     Ldi         Temp1,192
  916.     Ret
  917.   Acha_Dz0:
  918.   Cpi           Temp1,20
  919.   Brsh          Acha_Dz1
  920.     Subi        Temp2,10
  921.     Ldi         Temp1,231
  922.     Ret
  923.   Acha_Dz1:
  924.   Cpi           Temp1,30
  925.   Brsh          Acha_Dz2
  926.     Subi        Temp2,20
  927.     Ldi         Temp1,146
  928.     Ret
  929.   Acha_Dz2:
  930.   Cpi           Temp1,40
  931.   Brsh          Acha_Dz3
  932.     Subi        Temp2,30
  933.     Ldi         Temp1,152
  934.     Ret
  935.   Acha_Dz3:
  936.   Cpi           Temp1,50
  937.   Brsh          Acha_Dz4
  938.     Subi        Temp2,40
  939.     Ldi         Temp1,172
  940.     Ret
  941.   Acha_Dz4:
  942.   Cpi           Temp1,60
  943.   Brsh          Acha_Dz5
  944.     Subi        Temp2,50
  945.     Ldi         Temp1,137
  946.     Ret
  947.   Acha_Dz5:
  948.   Cpi           Temp1,70
  949.   Brsh          Acha_Dz6
  950.     Subi        Temp2,60
  951.     Ldi         Temp1,129
  952.     Ret
  953.   Acha_Dz6:
  954.   Cpi           Temp1,80
  955.   Brsh          Acha_Dz7
  956.     Subi        Temp2,70
  957.     Ldi         Temp1,220
  958.     Ret
  959.   Acha_Dz7:
  960.   Cpi           Temp1,90
  961.   Brsh          Acha_Dz8
  962.     Subi        Temp2,80
  963.     Ldi         Temp1,128
  964.     Ret
  965.   Acha_Dz8:
  966.   Cpi           Temp1,100
  967.   Brsh          Acha_Dz9
  968.     Subi        Temp2,90
  969.     Ldi         Temp1,140
  970.   Acha_Dz9:
  971. Ret
  972. Acha_Digito:
  973.   Cpi           Temp1,0
  974.   Brne          Acha_Dg0
  975.     Ldi         Temp1,192
  976.     Ret
  977.   Acha_Dg0:
  978.   Cpi           Temp1,1
  979.   Brne          Acha_Dg1
  980.     Ldi         Temp1,231
  981.     Ret
  982.   Acha_Dg1:
  983.   Cpi           Temp1,2
  984.   Brne          Acha_Dg2
  985.     Ldi         Temp1,146
  986.     Ret
  987.   Acha_Dg2:
  988.   Cpi           Temp1,3
  989.   Brne          Acha_Dg3
  990.     Ldi         Temp1,152
  991.     Ret
  992.   Acha_Dg3:
  993.   Cpi           Temp1,4
  994.   Brne          Acha_Dg4
  995.     Ldi         Temp1,172
  996.     Ret
  997.   Acha_Dg4:
  998.   Cpi           Temp1,5
  999.   Brne          Acha_Dg5
  1000.     Ldi         Temp1,137
  1001.     Ret
  1002.   Acha_Dg5:
  1003.   Cpi           Temp1,6
  1004.   Brne          Acha_Dg6
  1005.     Ldi         Temp1,129
  1006.     Ret
  1007.   Acha_Dg6:
  1008.   Cpi           Temp1,7
  1009.   Brne          Acha_Dg7
  1010.     Ldi         Temp1,220
  1011.     Ret
  1012.   Acha_Dg7:
  1013.   Cpi           Temp1,8
  1014.   Brne          Acha_Dg8
  1015.     Ldi         Temp1,128
  1016.     Ret
  1017.   Acha_Dg8:
  1018.   Cpi           Temp1,9
  1019.   Brne          Acha_Dg9
  1020.     Ldi         Temp1,140
  1021.   Acha_Dg9:
  1022. Ret
  1023. ;*****************************
  1024. ;Incrementa o BPM de 4 Dígitos
  1025. ;*****************************
  1026. Inc_BPM:
  1027.   Lds           Temp1,Dig_3_4_Bpm
  1028.   Lds           Temp2,Dig_3_4_Bpm
  1029.   Lds           Temp3,Dig_1_2_Bpm
  1030.   Lds           Temp4,Dig_1_2_Bpm
  1031.   Lsr           Temp1                ;Rola um Bit p/ Direita Zerando os Outros
  1032.   Lsr           Temp1                ;Rola um Bit p/ Direita Zerando os Outros
  1033.   Lsr           Temp1                ;Rola um Bit p/ Direita Zerando os Outros
  1034.   Lsr           Temp1                ;Rola um Bit p/ Direita Zerando os Outros
  1035.  ;-------------------
  1036.   Lsl           Temp2                ;Rola um Bit p/ Esquerda Zerando os Outros
  1037.   Lsl           Temp2                ;Rola um Bit p/ Esquerda Zerando os Outros
  1038.   Lsl           Temp2                ;Rola um Bit p/ Esquerda Zerando os Outros
  1039.   Lsl           Temp2                ;Rola um Bit p/ Esquerda Zerando os Outros
  1040.   Swap          Temp2                ;Troca os Bits LSB por MSB
  1041.  ;-------------------
  1042.   Lsr           Temp3                ;Rola um Bit p/ Direita Zerando os Outros
  1043.   Lsr           Temp3                ;Rola um Bit p/ Direita Zerando os Outros
  1044.   Lsr           Temp3                ;Rola um Bit p/ Direita Zerando os Outros
  1045.   Lsr           Temp3                ;Rola um Bit p/ Direita Zerando os Outros
  1046.  ;-------------------
  1047.   Lsl           Temp4                ;Rola um Bit p/ Esquerda Zerando os Outros
  1048.   Lsl           Temp4                ;Rola um Bit p/ Esquerda Zerando os Outros
  1049.   Lsl           Temp4                ;Rola um Bit p/ Esquerda Zerando os Outros
  1050.   Lsl           Temp4                ;Rola um Bit p/ Esquerda Zerando os Outros
  1051.   Swap          Temp4                ;Troca os Bits LSB por MSB
  1052.  ;-------------------
  1053.   Inc           Temp2
  1054.   Cpi           Temp2,10
  1055.   Brne          Inc_BPM_a
  1056.     Clr         Temp2
  1057.     Inc         Temp1
  1058.     Cpi         Temp1,10
  1059.     Brne        Inc_BPM_a
  1060.       Clr       Temp1
  1061.       Inc       Temp3
  1062.       Cpi       Temp3,10
  1063.       Brne      Inc_BPM_a
  1064.         Clr     Temp3
  1065.         Inc     Temp4
  1066.         Cpi     Temp4,10
  1067.         Brne    Inc_BPM_a
  1068.           Clr   Temp4
  1069.   Inc_BPM_a:
  1070.  ;-------------------
  1071.   Swap      Temp1                    ;Troca os Bits LSB por MSB
  1072.   Add       Temp1,Temp2              ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
  1073.   Sts       Dig_3_4_Bpm,Temp1        ;Salva o Valor dos 2 Digitos
  1074.   Swap      Temp3                    ;Troca os Bits LSB por MSB
  1075.   Add       Temp3,Temp4              ;Transforma os 2 Bytes de 4 Bits em 1 Byte de 8 Bits
  1076.   Sts       Dig_1_2_Bpm,Temp3        ;Salva o Valor dos 2 Digitos
  1077. Ret
  1078. ;************************
  1079. ;Congigura a Porta Serial
  1080. ;************************
  1081. Configura_Serial:
  1082.  .equ    COM1    = UCSRA
  1083.  .equ    BUF1    = UDR0
  1084.  .equ    BUF2    = UDR1
  1085.  .equ    Baud    = 115200
  1086.  .equ    UX0     = Clock/(Baud*8)-1
  1087.  .equ    UX1     = Clock/(Baud*16)-1
  1088.  ;********************************************
  1089.  ;Configuração da velocidade da Porta Serial 0
  1090.  ;********************************************
  1091.  ;Ldi    zl,0b00000000      ; Acerta a U2X = 0 velocidade normal
  1092.   Ldi    zl,0b00000010      ; Acerta a U2X = 1 velocidade dobrada
  1093.   Out    UCSRA,zl
  1094.   Ldi    zl,0b00011000      ; Coloca os Bits de Transmição e Recepção no Nivelo Alto
  1095.   Out    UCSRB,zl           ; BAUD RATE  38.400 BPS a 08.000.000 Mhz = 25
  1096.   Ldi    zh,high(UX0)       ; BAUD RATE  38.400 BPS a 11.059.200 Mhz = 35
  1097.   Ldi    zl,low(UX0)        ; BAUD RATE 115.200 BPS a 11.059.200 Mhz = 11
  1098.   Out    UBRRH,zh           ; BAUD RATE 250.000 BPS a 08.000.000 Mhz = 01 Com U2X =0
  1099.   Out    UBRRL,zl           ; BAUD RATE 500.000 BPS a 08.000.000 Mhz = 01 Com U2X =1
  1100.   ;**************           ; BAUD RATE  31.250 BPS a 08.000.000 Mhz = 15 Com U2X =0
  1101. Rjmp             Reset_d
  1102. Inicia_LCD:
  1103.   Cbi            CTL_LCD,RS_LCD
  1104.   Cbi            CTL_LCD,EN_LCD
  1105.   Call           Delay360Ms
  1106.   Call           Delay360Ms
  1107.   Call           Delay360Ms
  1108.   Call           Delay360Ms
  1109.   Call           Delay360Ms
  1110.   Call           Delay360Ms
  1111. ; Ldi            Temp,48              ;#30h
  1112. ; Rcall          LCD_CONF
  1113.   Ldi            Temp,56              ;#38H
  1114.   Rcall          LCD_CONF
  1115.   Ldi            Temp,56              ;#38H
  1116.   Rcall          LCD_CONF
  1117.   Ldi            Temp,56              ;#38H
  1118.   Rcall          LCD_CONF
  1119.   Ldi            Temp,6               ;#06H
  1120.   Rcall          LCD_CONF
  1121.   Ldi            Temp,12              ;Desliga o Cursor
  1122.  ;Ldi            Temp,14              ;#0eH ;Liga o Cursor
  1123.   Rcall          LCD_CONF
  1124. Ret
  1125. LCD_CONF:
  1126.   Cbi            CTL_LCD,RS_LCD ;escreve controle Acc no lcd confira o display para 2 linhas etc
  1127.   Out            LCDDATA_Out,Temp
  1128.   Sbi            CTL_LCD,EN_LCD
  1129.   Nop                            ;wait at least 1 clock
  1130.  .IF Clock>2                     ;more than 2 Mcs/s
  1131.      Ldi         Temp,5          ;two nop
  1132.  .ENDIF
  1133.  .IF Clockus>4                   ;more than 4 Mcs/s
  1134.      Ldi         Temp,10         ;three nop
  1135.  .ENDIF
  1136.  .IF Clockus>6                   ;more than 6 Mcs/s
  1137.      Ldi         Temp,15         ;four nop
  1138.  .ENDIF
  1139.  .IF Clockus>8                   ;more than 8 Mcs/s
  1140.      Ldi         Temp,20         ;five nop
  1141.  .ENDIF
  1142.  .IF Clockus>10                  ;more than 10 Mcs/s
  1143.      Ldi         Temp,25         ;six nop
  1144.  .ENDIF
  1145.  .IF Clockus>12                  ;more than 12 Mcs/s
  1146.      Ldi         Temp,30         ;seven nop
  1147.  .ENDIF
  1148.  .IF Clockus>14                  ;more than 14 Mcs/s
  1149.      Ldi         Temp,35         ;eight nop
  1150.  .ENDIF
  1151.  .IF Clockus>16                  ;more than 14 Mcs/s
  1152.      Ldi         Temp,40         ;eight nop
  1153.  .ENDIF
  1154.  .IF Clockus>18                  ;more than 14 Mcs/s
  1155.      Ldi         Temp,45         ;eight nop
  1156.  .ENDIF
  1157.  .IF Clockus>20                  ;more than 14 Mcs/s
  1158.      Ldi         Temp,50         ;eight nop
  1159.  .ENDIF
  1160.  .IF Clockus>22                  ;more than 14 Mcs/s
  1161.      Ldi         Temp,55         ;eight nop
  1162.  .ENDIF
  1163.  .IF Clockus>24                  ;more than 14 Mcs/s
  1164.      Ldi         Temp,60         ;eight nop
  1165.  .ENDIF
  1166.  .IF Clockus>26                  ;more than 14 Mcs/s
  1167.      Ldi         Temp,65         ;eight nop
  1168.  .ENDIF
  1169.  .IF Clockus>28                  ;more than 14 Mcs/s
  1170.      Ldi         Temp,70         ;eight nop
  1171.  .ENDIF
  1172.  .IF Clockus>30                  ;more than 14 Mcs/s
  1173.      Ldi         Temp,75         ;eight nop
  1174.  .ENDIF
  1175.  .IF Clockus>32                  ;more than 14 Mcs/s
  1176.      Ldi         Temp,80         ;eight nop
  1177.  .ENDIF
  1178.   LCD_CONF_a:
  1179.   Nop
  1180.   Dec            Temp
  1181.   Brne           LCD_CONF_a
  1182.     Cbi          CTL_LCD,EN_LCD
  1183.     Rjmp         Time_Out
  1184. Time_Out:
  1185.   Ldi            Temp,255
  1186.   Ldi            Temp1,255
  1187.   Time_Out0:
  1188.   Nop
  1189.   Dec            Temp
  1190.   Brne           Time_Out0
  1191.     Dec          Temp1
  1192.     Brne         Time_Out0
  1193.       Ret
  1194. LCD_Conf1:
  1195.   Sbi            CTL_LCD,RS_LCD
  1196. LCD_Conf1_0:
  1197.   Out            LCDDATA_Out,Temp
  1198.   Sbi            CTL_LCD,EN_LCD
  1199.   Nop                            ;wait at least 1 clock
  1200.  .IF Clock>2                     ;more than 2 Mcs/s
  1201.      Ldi         Temp,1          ;two nop
  1202.  .ENDIF
  1203.  .IF Clockus>4                   ;more than 4 Mcs/s
  1204.      Ldi         Temp,2          ;three nop
  1205.  .ENDIF
  1206.  .IF Clockus>6                   ;more than 6 Mcs/s
  1207.      Ldi         Temp,3          ;four nop
  1208.  .ENDIF
  1209.  .IF Clockus>8                   ;more than 8 Mcs/s
  1210.      Ldi         Temp,4          ;five nop
  1211.  .ENDIF
  1212.  .IF Clockus>10                  ;more than 10 Mcs/s
  1213.      Ldi         Temp,5          ;six nop
  1214.  .ENDIF
  1215.  .IF Clockus>12                  ;more than 12 Mcs/s
  1216.      Ldi         Temp,6          ;seven nop
  1217.  .ENDIF
  1218.  .IF Clockus>14                  ;more than 14 Mcs/s
  1219.      Ldi         Temp,7          ;eight nop
  1220.  .ENDIF
  1221.  .IF Clockus>16                  ;more than 14 Mcs/s
  1222.      Ldi         Temp,8          ;eight nop
  1223.  .ENDIF
  1224.  .IF Clockus>18                  ;more than 14 Mcs/s
  1225.      Ldi         Temp,9          ;eight nop
  1226.  .ENDIF
  1227.  .IF Clockus>20                  ;more than 14 Mcs/s
  1228.      Ldi         Temp,10         ;eight nop
  1229.  .ENDIF
  1230.  .IF Clockus>22                  ;more than 14 Mcs/s
  1231.      Ldi         Temp,11         ;eight nop
  1232.  .ENDIF
  1233.  .IF Clockus>24                  ;more than 14 Mcs/s
  1234.      Ldi         Temp,12         ;eight nop
  1235.  .ENDIF
  1236.  .IF Clockus>26                  ;more than 14 Mcs/s
  1237.      Ldi         Temp,13         ;eight nop
  1238.  .ENDIF
  1239.  .IF Clockus>28                  ;more than 14 Mcs/s
  1240.      Ldi         Temp,14         ;eight nop
  1241.  .ENDIF
  1242.  .IF Clockus>30                  ;more than 14 Mcs/s
  1243.      Ldi         Temp,15         ;eight nop
  1244.  .ENDIF
  1245.  .IF Clockus>32                  ;more than 14 Mcs/s
  1246.      Ldi         Temp,16         ;eight nop
  1247.  .ENDIF
  1248.   LCD_CONF1_a:
  1249.   Nop
  1250.   Dec            Temp
  1251.   Brne           LCD_CONF1_a
  1252.     Cbi          CTL_LCD,EN_LCD
  1253.     Ret
  1254. ;**************************
  1255. ; Delay for 15 milliseconds
  1256. ;**************************
  1257. Delay15ms:
  1258.     Push         ZH ; save Z
  1259.     Push         ZL
  1260.     Ldi          ZH,HIGH((15000*clockus-16)/4)
  1261.     Ldi          ZL,LOW((15000*clockus-16)/4)
  1262. Delay15ms1:
  1263.     Sbiw         ZL,1
  1264.     Brne         Delay15ms1
  1265.       Pop        ZL
  1266.       Pop        ZH
  1267.       Ret
  1268. ;***************************
  1269. ; Delay for 360 milliseconds
  1270. ;***************************
  1271. Delay360ms:
  1272.     Push         Temp
  1273.     Ldi          Temp,360/15+1 ; number of 15ms delays
  1274. Delay360ms1:
  1275.     Rcall        Delay15ms
  1276.     Dec          Temp
  1277.     Brne         Delay360ms1
  1278.       Pop        Temp
  1279.       Ret
  1280. ;Contador de Bpm
  1281. Limpa_Linha0:
  1282.   Ldi                 Pt0, LOW(256)
  1283.   Ldi                 Pt1,HIGH(256)    ;Atualiza o sub endereço
  1284.   Ldi                 Temp1,' '
  1285.   Add                 Temp2,Pt0
  1286.   Limpa_Linha0_a:
  1287.   ST                  X+,Temp1         ;Salva no Buf do LCD
  1288.   Cpi                 Pt0,LOW(296)     ;Checa se enviou 16 Caracteres p/ Ram
  1289.   Brne                Limpa_Linha0_b
  1290.     Ret
  1291.   Limpa_Linha0_b:
  1292.   Cp                  Temp2,Pt0        ;Checa a quantidade que pediu
  1293.   Brne                Limpa_Linha0_a
  1294.     Ret
  1295. Atualiza_Ln0:
  1296.   Ldi                 Pt0, LOW(256)
  1297.   Ldi                 Pt1,HIGH(256)    ;Atualiza o sub endereço
  1298.   Atualiza_Ln0_a:
  1299.   Lpm                 Temp1,Z+         ;Retira o Caracter do DB ou da ROM
  1300.   Tst                 Temp1
  1301.   Brne                Atualiza_Ln0_b
  1302.     Ret
  1303.   Atualiza_Ln0_b:
  1304.   ST                  X+,Temp1         ;Salva no Buf do LCD
  1305.   Cpi                 Pt0,LOW(296)     ;Checa se enviou 16 Caracteres p/ Ram
  1306.   Brne                Atualiza_Ln0_a
  1307.     Ret
  1308. Limpa_Linha1:
  1309.   Ldi                 Pt0, LOW(296)
  1310.   Ldi                 Pt1,HIGH(296)    ;Atualiza o sub endereço
  1311.   Ldi                 Temp1,' '
  1312.   Add                 Temp2,Pt0
  1313.   Ldi                 Pt1,1            ;Atualiza o sub endereço
  1314.   Limpa_Linha1_a:
  1315.   ST                  X+,Temp1         ;Salva no Buf do LCD
  1316.   Cpi                 Pt0,LOW(336)     ;Checa se Limpou 16 Caracteres p/ Ram
  1317.   Brne                Limpa_Linha1_b
  1318.     Ret
  1319.   Limpa_Linha1_b:
  1320.   Cp                  Temp2,Pt0        ;Checa a quantidade que pediu
  1321.   Brne                Limpa_Linha1_a
  1322.     Ret
  1323. Atualiza_Ln1:
  1324.   Ldi                 Pt0, LOW(296)
  1325.   Ldi                 Pt1,HIGH(296)    ;Atualiza o sub endereço
  1326.   Atualiza_Ln1_a:
  1327.   Lpm                 Temp1,Z+         ;Retira o Caracter do DB ou da ROM
  1328.   Tst                 Temp1
  1329.   Brne                Atualiza_Ln1_b
  1330.     Ret
  1331.   Atualiza_Ln1_b:
  1332.   ST                  X+,Temp1         ;Salva no Buf do LCD
  1333.   Cpi                 Pt0,LOW(336)     ;Checa se enviou 16 Caracteres p/ Ram
  1334.   Brne                Atualiza_Ln1_a
  1335.     Ret
  1336. Time0:
  1337.   Clr            Vetor_0
  1338.   Dec            Msx                   ;Conta 06 Vezes que e igual a 5208 Vezes por Segundo
  1339.   Inc            Tp3                   ;Conta 30 Vezes que e igual a 1000 Vezes por Segundo
  1340. Reti
  1341. Time1:
  1342. ; Push           Temp
  1343. ; Push           Temp1
  1344.  ;--------------------
  1345. ; Clr            Vetor_1
  1346. ; Ldi            Temp,LOW(Clock_1000)
  1347. ; Ldi            Temp1,255
  1348. ; Sub            Temp1,Temp
  1349. ; Out            TCNT1L,Temp1
  1350. ; Ldi            Temp,HIGH(Clock_1000) ;Frequencia do Clock Div. p/ 1000 Ms
  1351. ; Ldi            Temp1,255
  1352. ; Sub            Temp1,Temp
  1353. ; Out            TCNT1H,Temp1
  1354.  ;--------------------
  1355. ; Pop            Temp1
  1356. ; Pop            Temp
  1357. Reti
  1358. Msg0:
  1359. .DB "Kim Robert Sistem Iniciando a Mesa.....!",0
  1360.  
  1361. Msg1:
  1362. .DB "Por Favor Aguarde.......................",0
  1363.  
  1364. Msg4:
  1365. .DB "123 456 789 100 200  300 400 500 600 700",0
  1366.  
  1367. Msf0:
  1368. .DB "Canais 01 a 16..",0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement