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

📄 mag_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               
 m_wait_k1: rcall m_leddisp 
            sbic PIND,4
            rjmp m_k2_press
            rcall delay
            sbic PIND,4
            rjmp m_wait_k1                       
 compare:   inc r27
            cpi r27,$05
            brpl addset_r27 ;k1 press down 4 times display "90" and cann't increase again
            rcall m_leddisp
            rcall delay1
            sbic PIND,7            
            rjmp m_wait_k1
            rcall delay
            sbic PIND,7
            rjmp m_wait_k1       
            rcall change_disp
 addset_r27:   ldi r27,4
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
            brmi minset_r27 ; k2 press down 4 times display "10" and cann't decrease again
            rcall m_leddisp
            rcall delay1
            sbic PIND,7            
            rjmp m_k2_press 
            rcall delay
            sbic PIND,7
            rjmp m_k2_press       
            rcall change_disp
minset_r27: ldi r27,-4               
 m_k4_press: sbic PIND,7
            rjmp k3_again
            rcall delay
            sbic PIND,7
            rjmp m_k4_press
            rcall change_disp
          ;  rjmp cd
 k3_again:  ;sbic PIND,6                       
            rjmp m_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     
;------------------------------------------------------                   
 m_leddisp:  rcall flash_ram
             rcall turn_off 
             ldi r17,$05
             add r27,r17
             mov r20,r27
             ;rcall flash_ram 
             ldi YL,$60           
             ldi YH,$00                   
             add YL,r20          ; r20 is content of display word
             ld  r20,Y           ;PC.0 display magnetic field trength      
             out SPDR , r20 
             ldi r17,0b00000001  ; display byte PC.0 
             out PORTC,r17       ;PC.0 output 1 ,
             rcall delay
             rcall turn_off
             ldi  r20,$3f        ; PC.1 display "0"
             out SPDR , r20 
             ldi r17,0b00000010        
             out PORTC,r17 
             rcall delay
             rcall turn_off              
             subi r27,$05
             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 + -