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

📄 k3_one.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!   
         ; 
         ;**********************************************************
         ;
         ;LED display "50"
         ;set T=0 k3 first press down . T=1 k3 press down twice.                                                   
          ; clr r27      ;r27 is used to record k1 press down number 
                        ;accord to r27 value, m_min subroutine dispaly magnetic field trength  
         ;  clr r28      ;r28 is used to record k2 press down number 
                        ; tihis is useless                     
  disp_350: rcall disp_50   
 m_wait_k1: sbic PIND,4
            rjmp m_k2_press
            rcall delay
            sbic PIND,4
            rjmp m_wait_k1                       
 compare:  nop
            inc r27
            cpi r27,4
            brne d20_90   ; k1 press down 4 times display "90" and cann't increase again
            rjmp m_k2_press
 d20_90:    rjmp display20_90  
m_k2_press:sbic PIND,5
            rjmp m_k4_press
            rcall delay
            sbic PIND,5            
            rjmp m_k2_press           
 min_comp:  nop
            dec r27
            cpi r27,-4
            brne disp10_80   ; k1 press down 4 times display "90" and cann't increase again
            rjmp m_k4_press
 disp10_80:    rjmp min10_80  
 m_k4_press: sbic PIND,7
            rjmp k3_again
            rcall delay
            sbic PIND,7
            rjmp m_k4_press
            rcall change_disp
 k3_again:  sbic PIND,6
            rjmp k1_k2_press
            rcall delay
            sbic PIND,6
            rjmp k3_again
            rjmp disp_120
k1_k2_press:rjmp kn10_90        ;  make a adjument if k1 or k2 is pressed  down
display20_90:cpi r27,-3
              brne disp_30_90
              rcall disp_20 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
disp_30_90:   cpi r27,-2
              brne disp_40_90
              rcall disp_30 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp 
disp_40_90:   cpi r27,-1
              brne disp_50_50
              rcall disp_40 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
disp_50_50: cpi r27,0
              brne disp_50_90
              rcall disp_50 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
  disp_50_90:   cpi r27,1
              brne disp_60_90
              rcall disp_60 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_wait_k1  
              rcall change_disp
  disp_60_90:   cpi r27,2
              brne disp_70_90
              rcall disp_70
               rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_wait_k1  
              rcall change_disp
  disp_70_90:   cpi r27,3
              brne disp_80_90
              rcall disp_80
               rcall  delay1 
              sbic PIND,7    ;ask k4 press down ?
             rjmp m_wait_k1 
              rcall change_disp 
  disp_80_90: rcall disp_90
               rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_wait_k1            
            rjmp m_wait_k1 
             rcall change_disp               
           rjmp m_wait_k1     
  min10_80:   cpi r27,3
              brne min10_70
              rcall disp_80 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp  
 min10_70:    cpi r27,2
              brne min10_60
              rcall disp_70 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp 
 min10_60:   cpi r27,1
              brne min10_50
              rcall disp_60 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp 
 min10_50:   cpi r27,0
              brne min10_40
              rcall disp_50 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
 min10_40:   cpi r27,-1
              brne min10_30
              rcall disp_40 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
 min10_30:   cpi r27,-2
              brne min10_20
              rcall disp_30 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp 
 min10_20:   cpi r27,-3
              brne min10_10
              rcall disp_20 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp 
 min10_10: rcall disp_10 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp                                                                                                                    
 disp_120:  rcall display120
 t_wait_k1: sbic PIND,4
            rjmp t_k2_press
            rcall delay
            sbic PIND,4
            rjmp t_wait_k1
            rcall t_add
            rjmp t_wait_k1 
 t_k2_press:sbic PIND,5
            rjmp k4_press
            rcall delay
            sbic PIND,5
            rcall t_min
            rjmp t_k2_press 
  k4_press: sbic PIND,7
            rjmp disp_120
            rjmp change_disp        
          ; ret                      
  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,$05
        d21:ldi r22,$0ff                    
        d11:ldi r23,$0ff
        d01:dec r23
           wdr           
           brne d01            
           dec r22                      
           brne d11
           dec r21         
           brne d21   
           ret
 ;******************************************************************************
 ;
 ; These subroutines  are used to increase magnetic filed tength "20--90"
;----------------------------------------------
     kn10_90: cpi r27,-4
              brne kn20_90
              rcall disp_10 
              rcall  delay            
              rjmp m_wait_k1
     kn20_90: cpi r27,-3
              brne kn30_90
              rcall disp_20 
              rcall  delay            
              rjmp m_wait_k1
     kn30_90: cpi r27,-2
              brne kn40_90
              rcall disp_30 
              rcall  delay            
              rjmp m_wait_k1
     kn40_90: cpi r27,-1
              brne kn50_90
              rcall disp_40 
              rcall  delay            
              rjmp m_wait_k1
     kn50_90: cpi r27,0
              brne kn60_90
              rcall disp_50 
              rcall  delay            
              rjmp m_wait_k1
    kn60_90: cpi r27,1
              brne kn70_90
              rcall disp_60 
              rcall  delay            
              rjmp m_wait_k1
     kn70_90: cpi r27,2
              brne kn80_90
              rcall disp_70 
              rcall  delay            
              rjmp m_wait_k1
     kn80_90: cpi r27,3
              brne kn90_90
              rcall disp_80 
              rcall  delay            
              rjmp m_wait_k1
     kn90_90: rcall disp_90 
              rcall  delay            
              rjmp m_wait_k1
;-----------------------------------------------
display120:ser r16
           out DDRC,r16 ;portc is output mode and turn off all LEDS
           ldi r21,$00
           out PORTC,r21 ;turn off "50" display
           ldi r21,$06
           out SPDR , r21 
           ldi r17,0b0000100
           out PORTC,r17 ;PC.2 display "1"
    ; wait0:sbis SPSR,7
    ;       rjmp wait0             
           rcall delay
           ldi r17,0b0000000 
           out PORTC,r17 
           ldi r21,$5b
           out SPDR , r21 
           ldi r17,0b0001000
           out PORTC,r17 
           out PORTC,r17 ;PC.3 display "2"
    ; wait0:sbis SPSR,7
    ;       rjmp wait0             
           rcall delay
           ldi r17,0b0000000 
           out PORTC,r17 
          ldi r21,$3f
           out SPDR , r21 
           ldi r17,0b0010000
           out PORTC,r17 ;PC.4 display "0"
    ; wait0:sbis SPSR,7
    ;       rjmp wait0             
           rcall delay
           ldi r17,0b0000000 
           out PORTC,r17  
           ret
;-----------------------------------------------

;-----------------------------
 b1_d0: rcall turn_off                                                         
            rcall display_0 
            rcall dispbyte_1      
           ; rcall trans_wait                        
            rcall delay
            rcall turn_off   
            ret
;-----------------------------
disp_10: rcall display_1
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0
             rcall delay
            rcall turn_off
            ldi r27,-4
            ret
;-----------------------------
disp_20: rcall display_2
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0
             rcall delay
            rcall turn_off
            ldi r27,-3
            ret
;-----------------------------
disp_30: rcall display_3
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0
             rcall delay
            rcall turn_off
            ldi r27,-2
            ret  
;-----------------------------
disp_40: rcall display_4
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0
             rcall delay
            rcall turn_off
            ldi r27,-1
            ret 

 ;-----------------------------
disp_50: rcall display_5
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0
            ldi r27,0
            ret
 ;-----------------------------
   disp_60: rcall turn_off
            rcall display_6
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
            rcall b1_d0           
            ldi r27,1           
            ret
;------------------------------
   disp_70:rcall turn_off
            rcall display_7
            rcall dispbyte_0            
            ;rcall trans_wait                                           
            rcall delay
            rcall b1_d0           
            ldi r27,2
            ret
;-----------------------------                 
    disp_80:rcall turn_off
            rcall display_8
            rcall dispbyte_0            
            ;rcall trans_wait                                           
            rcall delay
            rcall b1_d0              
            ldi r27,3
            ret
;-------------------------------                         
   disp_90: rcall turn_off
            rcall display_9
            rcall dispbyte_0            
            ;rcall trans_wait                                           
            rcall delay
            rcall b1_d0           
            ldi r27,4
            ret    

;************************************************
  seg_code:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07
           .db $7f,$6f,$77,$7c,$39,$5e,$79,$71 
 display_0:ldi r21,$3f            
           out SPDR , r21 
           ret
 display_1:ldi r21,$06
           out SPDR , r21 
           ret
 display_2:ldi r21,$5b
           out SPDR , r21 
           ret 
 display_3:ldi r21,$4f
           out SPDR , r21 
           ret
 display_4:ldi r21,$66
           out SPDR , r21 
           ret
 display_5:ldi r21,$6d
           out SPDR , r21 
           ret
 display_6:ldi r21,$7d
           out SPDR , r21 
           ret
 display_7:ldi r21,$07
           out SPDR , r21 
           ret
 display_8:ldi r21,$7f
           out SPDR , r21 
           ret
 display_9:ldi r21,$6f
           out SPDR , r21 
           ret
 turn_off: ser r16
           out DDRC,r16
           ldi r17,0b0000000
           out PORTC,r17  
           ret
dispbyte_0:ldi r17,0b00000001
           out PORTC,r17 
           ret
dispbyte_1:ldi r17,0b00000010
           out PORTC,r17 
           ret
dispbyte_2:ldi r17,0b00000100
           out PORTC,r17 
           ret
dispbyte_3:ldi r17,0b00001000
           out PORTC,r17 
           ret
dispbyte_4:ldi r17,0b00010000
           out PORTC,r17 
           ret
trans_wait:sbis SPSR,7
           rjmp trans_wait             
           ret
    m_min: ret
    t_add: ret
    t_min: ret
 change_disp: ret      
              

⌨️ 快捷键说明

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