⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tim_comp.asm

📁 串口通信 频率测量 EEPROM读写程序
💻 ASM
字号:
       
          
          .include "c:\appnotes\2333def.inc"
          .org $000
           rjmp main         
           .org $007
           rjmp SPI_TXC               
          .org $00d
     MAIN:;********************************************************
          ; 
          ; initialize MCU system
          ;
           ser r16
           out DDRC,r16 ;portc is output mode and turn off all LEDS
           ldi r17,$df
           out SPL,r17         
           ldi r25,$00
           out SREG,r25 ;Disnable globle interrupt                      
           ldi r25,0b00001100
           out MCUCR,r25; set INT! low level trigger        
           ldi r20,$00
           out ADCSR,r20    ;Disnable ADC     
           ldi r17,$08
           out WDTCR,r17;enable wacthdog
           wdr          ;reset wachdog                                     
           sbi DDRB,3    ;set MOSI(PB.5) output mode whwn SPI is master.
           sbi DDRB,5    ;set SCK (PB.7) output mode when SPI is master
           sbi DDRB,2    ;set SS output mode so that this byte cann't
                         ;influence SPI master work mode .
           ldi r17,0b11111100
           out SPCR,r17  ;set SPIE,SPE,MSTR,CPOL,CPHA ,reset the others
           ldi r25,$80  
           out GIMSK,r25 ;enable INT!   
         ; 
 
;-----------------------------------------------------------------------
           rcall flash_ram                                                                                            
  md:       clr r26          ;r26 is used to record time value 
            clr r27          ;r27 is used to record magnetic field trength               
 t_wait_k1: rcall t_leddisp 
            sbic PIND,4
            rjmp t_k2_press
            rcall delay
            sbic PIND,4
            rjmp t_wait_k1                       
 t_compare:   inc r26
            cpi r26,13
            brpl taddset_r26 ;k1 press down 4 times display "90" and cann't increase again
            rcall t_leddisp
            rcall delay1
            sbic PIND,7            
            rjmp t_wait_k1
            rcall delay
            sbic PIND,7
            rjmp t_wait_k1       
            rcall change_disp
 taddset_r26:   ldi r26,12
t_k2_press:sbic PIND,5
            rjmp t_k4_press
            rcall delay
            sbic PIND,5            
            rjmp t_k2_press                 
 tmin_comp:  nop
            dec r26
            cpi r26,-4
            brmi tminset_r26 ; k2 press down 4 times display "10" and cann't decrease again
            rcall t_leddisp
            rcall delay1
            sbic PIND,7            
            rjmp t_k2_press 
            rcall delay
            sbic PIND,7
            rjmp t_k2_press       
            rcall change_disp
tminset_r26: ldi r26,-3               
 t_k4_press: sbic PIND,7
            rjmp k3_again
            rcall delay
            sbic PIND,7
            rjmp t_k4_press
            rcall change_disp
          ;  rjmp cd
 k3_again:  ;sbic PIND,6                       
            rjmp t_wait_k1 
SPI_TXC:sbi SPCR,4
           reti 
     delay:ldi r21,$01
        d2:ldi r22,$01                    
        d1:ldi r23,$0ff
        d0:dec r23
           wdr           
           brne d0            
           dec r22                      
           brne d1
           dec r21         
           brne d2
           ret
     delay1:ldi r21,$08
        d21:ldi r22,$0ff                    
        d11:ldi r23,$0ff
        d01:dec r23
           wdr           
           brne d01            
           dec r22                      
           brne d11
           dec r21         
           brne d21   
           ret     
;------------------------------------------------------                   
 t_leddisp:  push r26           ;save r26 value
             ldi YL,$60           
             ldi YH,$00
            ;rcall flash_ram 
             rcall turn_off
             cpi r26,0
             brpl next_1
             rjmp led02_0
      next_1:cpi r26,3
             brpl  next_2
             rjmp led02_1              
      next_2:cpi r26,6
             brpl next_3
             rjmp led02_2
      next_3:cpi r26,10
             brpl next_4
             rjmp led02_3
      next_4:rjmp led02_4 ;distinguilish r26 to confirm display value              
     led02_0:ldi r17,$00 
             rjmp dp0_4
     led02_1:ldi r17,$01
             rjmp dp0_4
     led02_2:ldi r17,$02
              rjmp dp0_4
     led02_3:ldi r17,$03 
              rjmp dp0_4       
     led02_4:ldi r17,$04
     dp0_4:  add r26,r17
             mov r20,r26                                            
             add YL,r20          ; r20 is content of display word
             ld  r20,Y           ;PC.0 display magnetic field trength      
             out SPDR , r20 
             ldi r17,0b00000100  ; display byte PC.2 
             out PORTC,r17       ;PC.2 output 1 ,
             rcall delay
             rcall turn_off
             ldi YL,$60          ;reset SRAM first address
             pop r26             ;restore r26 value
             ldi r17,$03         ;display PC.3 LED            
             add r26,r17
             mov r20,r26                                         
             add YL,r20          ; r20 is content of display word
             ld  r20,Y           ;PC.0 display magnetic field trength      
             out SPDR , r20 
             ldi r17,0b00001000  ; display byte PC.2 
             out PORTC,r17       ;PC.2 output 1 ,
             rcall delay
             rcall turn_off
             ldi  r20,$3f        ; PC.4 display "0"
             out SPDR , r20 
             ldi r17,0b00010000        
             out PORTC,r17 
             rcall delay
             rcall turn_off              
             subi r26,$03
             ret 
 turn_off: ser r16
           out DDRC,r16
           ldi r17,0b0000000
           out PORTC,r17  
           ret        
flash_ram: ldi YL,$60           
           ldi YH,$00              ;RAM begin address
           ldi ZL ,low(seg_code*2) ; load Z register low byte
           ldi ZH ,high(seg_code*2); load Z register high byte
           ldi r18,$10             ;flash data block size
load_flash:lpm
           st Y+,r0
           adiw ZL,1
           dec r18
           brne load_flash
           ret
           .org $0700           
  seg_code:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07
           .db $7f,$6f,$77,$7c,$39,$5e,$79,$71 
change_disp: ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -