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

📄 key.asm

📁 串口通信 频率测量 EEPROM读写程序
💻 ASM
字号:
       
          .include "c:\appnotes\8515def.inc"
          .org $000
           rjmp main
           .org $007
            rjmp timer0
           .org $008
           rjmp SPI_TXC    
          .org $00d
     MAIN: ldi r17,$5f
           out SPL,r17
           ldi r17,$02
           out SPH,r17  ;setup STACK pointer in internal SRAM so that
                        ;RCALL and interrupt subroutine can use it for
                        ; return
           ldi r25,$80
           out SREG,r25 ;enable globle interrupt          
           ;ldi r17,$08 
           ;out WDTCR,r17;enable watchdog
           ;wdr          ;reset wachdog
           ldi r17,$02
           out TIMSK,r17;enable timer0 overflow                 
           ser r16
           out DDRB,r16 ;portb is output mode and turn off all LEDS                           
           sbi DDRB,5    ;set MOSI(PB.5) output mode whwn SPI is master.
           sbi DDRB,7    ;set SCK (PB.7) output mode when SPI is master
           sbi DDRB,4    ;set SS output mode so that this byte cann't
                         ;influence SPI master work mode .
           ldi r17,0b11111100
           out SPCR,r17  ;set SPE,MSTR,CPOL,CPHA ,reset the others
           clr r17
           out SPDR,r17  ;clear all display   
     start:rcall ksi
           cpi r18 ,0 ; r18 is used to distingulish
                      ; if any key is push down
           breq return
           rjmp lk1
    return:rjmp main
       lk1:rcall delay
           rcall ksi
           cpi r18 ,0
           brne lk0 
           rjmp start                
     lk0:  ldi r18,$ef
           clr r20    ;r20 is column number    
     lk4:  out SPDR,r18 
     ;wait: sbis SPSR,7
      ;     rjmp wait                                                   
           sbis PIND,6
           rjmp line0
           rjmp lone           
     line0:ldi r19,0  ; R19 is this line first key number  
           rjmp lkp
     lone: sbis PIND,5
           rjmp line1
           rjmp ltwo
     line1:ldi r19,$04
           rjmp lkp
     ltwo: sbis PIND,4
           rjmp line2
           rjmp lthree
     line2:ldi r19,$08
           rjmp lkp
    lthree:sbis PIND,3
           rjmp line3                   
           rjmp next 
     line3:ldi r19,$0c
       lkp:add r20,r19  ;r20 is final key number           
      lkp0:rcall ksi
           cpi r18,0
           breq exit
           rjmp lkp0
      exit:rjmp display  
      next:inc r20
           sec
           rol r18                              
           rjmp lk4
     ksi:  ldi r17,$00
           out SPDR,r17
           in r18,PIND
           neg r18
           andi r18,$78
           ret          
     delay:ldi r21,$01
        d2:ldi r22,$01 
        d1:ldi r23,$01
        d0:dec r23
           ;wdr           
           brne d0            
           dec r22                    
           brne d1
           dec r21          
           brne d2
           ret   
    timer0:reti
   SPI_TXC:reti         
           .org $0100           
  seg_code:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07
           .db $7f,$6f,$77,$7c,$39,$5e,$79,$71                     
  display: rcall flash_ram 
           ldi YL,$60           
           ldi YH,$00                   
           add YL,r20
           ld  r20,Y           
  led_disp:out SPDR , r20 
           ldi r17,$01
           out PORTB,r17 ;PB.0 output 1 ,the rightest LED 
                         ;display key number
           rjmp ext          
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
     ext:  .exit

⌨️ 快捷键说明

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