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

📄 m_min.asm

📁 串口通信 频率测量 EEPROM读写程序
💻 ASM
字号:
       .include "c:\appnotes\2333def.inc"
          .org $000
           rjmp main                                
          .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!   
        ;***********************************************************
          ; ldi r27,4         ;assume after k1 rotation LED display "90"
min_compare:dec r27
continue:   cpi r27,-4
           brne disp_10_90   ; k1 press down 4 times display "90" and cann't increase again
            rjmp m_k4_press
 disp_10_90:   cpi r27,-4
              brne disp_20_90
              rcall disp_10 
              rcall  delay1
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press  
              rcall change_disp
 disp_20_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_60_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_90
              rcall disp_40 
              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_k2_press  
              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_k2_press  
              rcall change_disp
  disp_70_90:  rcall disp_80
               rcall  delay1 
              sbic PIND,7    ;ask k4 press down ?
              rjmp m_k2_press 
              rcall change_disp 
 m_k2_press:sbic PIND,5
            rjmp m_k4_press
            rcall delay
            sbic PIND,5            
            rjmp m_k2_press
            rcall delay1
            rjmp min_compare
 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 continue
            rcall delay
            sbic PIND,6
            rjmp k3_again           
 disp_120: 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  
                                
  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,$5
        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 "60--90"
 ;-----------------------------
 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 
             rcall delay
            rcall turn_off                                                                             
            ldi r27,0
            ret
 ;-----------------------------
   disp_60: rcall turn_off
            rcall display_6
            rcall dispbyte_0            
           ; rcall trans_wait                                           
            rcall delay
             rcall b1_d0
             rcall delay
            rcall turn_off              
            ldi r27,1           
            ret
;------------------------------
   disp_70:rcall turn_off
            rcall display_7
            rcall dispbyte_0            
            ;rcall trans_wait                                           
            rcall delay
            rcall b1_d0 
             rcall delay
            rcall turn_off                         
            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 
             rcall delay
            rcall turn_off                 
            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
;--------------------------------
change_disp: ret        

⌨️ 快捷键说明

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