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

📄 chap8.asm

📁 摩托罗拉Mc6811利程
💻 ASM
字号:
; Chapter 8 6811 assembly language programs; Jonathan W. Valvano; This software accompanies the book,; Real Time Embedded Systems published by Brooks Cole;; Program 8.2. Switch debouncing using assembly software.; MC68HC11A8WaitPress: ldaa PORTA        ;PA0=0 if switch pressed        anda #$01        bne  WaitPress ;loop until switch is pressed        ldd  TCNT        addd #20000  ;10ms delay        std  TOC5        ldaa #$08        staa TFLG1   ;clear OC5F loopP:  ldaa TFLG1        ;10ms for switch to stop bouncing        anda #$08    ;OC5F set?        beq  loopP              rtsWaitRelease: ldaa PORTA        ;PA0=1 if switch released        anda #$01        beq  WaitRelease ;loop until switch is released        ldd  TCNT        addd #20000  ;10ms delay        std  TOC5        ldaa #$08        staa TFLG1   ;clear OC5F loopR:  ldaa TFLG1        ;10ms for switch to stop bouncing        anda #$08    ;OC5F set?        beq  loopR        rts      rts; Program 8.4. Another example of switch debouncing using assembly software.; MC68HC11A8* Reg B is the return valueReadPA0: ldd TCNT        addd #20000 ;10ms delay        std  TOC5        ldaa #$08        staa TFLG1 ;clear OC5F         ldab PORTA ;0 if pressed        andb #$01  ;B=old valueSame:   ldaa TFLG1 ;10ms bouncing        anda #$08  ;OC5F set?        bne  Done         ldaa PORTA ;0 if pressed        anda #$01  ;A=new value        cba        ;same as before        beq  Same         bra  ReadPA0      ;start over because different    Done:   rts; Program 8.8. Assembly software interface of a direct connection keyboard.; MC68HC11A8KEY:   ds  2     ;current valueRITUAL: clr DDRC ; all inputs         ldaa #$54 ; Bit signal value comment ;  6  STAI     1   arm STAF ;  5  CWOM     0   not applicable;  4  HNDS     1   Input handshake;  3  OIN      0;  2  PLS      1   pulse out;  1  EGA      0   falling edge ;  0  INVB     0   negative pulse      staa PIOC      bsr  KeyBoard ;set 74LS374's      cli           ;Enable IRQ      rtsKeyBoard: ldaa PIOC ;part of clear      ldaa PORTE  ;Read MSB      ldab PORTCL ;Read LSB, ack      std  KEY      rtsIRQHan: ldaa #$14   ;Disarm STAF      staa PIOC      ldd  TCNT      addd #20000  ;OC5 10ms later      std  TOC5      ldaa #$08    ;Arm OC5      staa TMSK1      staa TFLG1   ;Clear OC5F      rtiOC5Han: clr TMSK1   ;Disarm OC5      ldaa #$54    ;Rearm STAF      staa $PIOC      bsr  KeyBoard ;read keyboard      rti; Program 8.11. Assembly software interface of a matrix scanned keyboard.; MC68HC11A8Ritual: ldaa #$40       staa PIOC  ;CWOM=1       ldaa #$F0  ;PC7-PC4 outputs       staa DDRC  ;PC3-PC0 inputs       rtsScanTab: dc.b %01110000 ;PC7 row       dc.b "abcd"     ;characters       dc.b %10110000  ;PC6 row       dc.b "efgh"     ;characters       dc.b %11010000  ;PC5 row       dc.b "ijkl"     ;characters       dc.b %11100000  ;PC4 row       dc.b "mnop"     ;characters       dc.b 0; Returns RegA ASCII key pressed, ;     RegY number of keys pressed  ;     Y=0 if no key pressedScan:   ldy  #0   ;Number pressed            ldx  #ScanTabLoop:   ldab 0,x        beq  Done        stab PORTC ;select row        ldab PORTC ;read columns        lsrb       ;PC0 into carry        bcs  NotPC0        ldaa 4,x        inyNotPC0: lsrb       ;PC1 into carry        bcs  NotPC1        ldaa 3,x          inyNotPC1: lsrb       ;PC2 into carry        bcs  NotPC2        ldaa 2,x          inyNotPC2: lsrb       ;PC3 into carry        bcs  NotPC3        ldaa 1,x          inyNotPC3: ldab #5    ;Size of entry        abx        bra  LoopDone:   rts; Program 8.13. Assembly software interface of a multiplexed keyboard.; MC68HC11A8Key:     ds 1  ;current keyPrevKey: ds 1  ;previous keyRitual: sei       ldaa #$F0  ;PC7-PC4 outputs       staa DDRC  ;PC3-PC0 inputs       bsr KeyScan       staa PrevKey       staa Key       ldaa TMSK1       oraa #$08  ; arm OC5       staa TMSK1       ldd  TCNT       addd #20000       std  TOC5  ; first in 10ms       ldaa #$08       staa TFLG1 ; clear OC5F       cli       rts; returns RegA=code (0 for none)KeyScan: clra     ;=0 means no       clr  PORTC ;row=0loop:  ldab PORTC ;read columns       andb #$0F       cmpb #$0F  ;$0F means no       beq  none       eorb #$0F  ;code 1-9       tba        ;found onenone:  ldab PORTC       addb #$10  ;next row       stab PORTC       bne  loop       rtsTOC5handler:       bsr  KeyScan       cmpa PrevKey ;same as last?       bne  skip       staa Key     ;new valueskip:  staa PrevKey       ldd  TOC5       addd #20000       std  TOC5    ;every 10ms       ldaa #$08       staa TFLG1   ;ack OC5       rti; Program 8.24. A double circular linked list used to control the stepper motor.; MC68HC11A8 or MC68HC812A4 ;Linked list stored in EEPROMS10:  dc.b 10    ;Output pattern      dc.w S9    ;Next if CW       dc.w S6    ;Next if CCWS9:   dc.b 9          dc.w S10       dc.w S5  S5:   dc.b 5          dc.w S9       dc.w S6  S6:   dc.b 6         dc.w S5        dc.w S10      ;Global variables stored in RAMPOS:  ds   1     ;0<=POS<=199PT:   ds   2     ;to current state; Program 8.25. Helper functions used to control the stepper motor.; MC68HC11A8 or MC68HC812 ;Reg B=desired 0<=RegB<=199SEEK: pshb       ;Save desired       tsy      subb POS   ;Go CW or CCW?      beq  DONE  ;Skip if equal      bhi  HIGH  ;Desired>POS?;Desired<POS      negb       ;(POS-Desired)      cmpb #100      blo  GOCCW ;Go CCW if;Desired<POS and POS-Desired<100GOCW: bsr  CW    ;Reg A current      cmpa ,Y      bne  GOCW  ;POS=Desired?      bra  DONEHIGH: cmpb #100  ;(Desired-POS)      blo  GOCW  ;Go CW if;Desired>POS and Desired-POS<100GOCCW: bsr CCW   ;Reg A current       cmpa ,Y	      bne  GOCCW ;POS=Desired?DONE: pulb      rts        ;Return

⌨️ 快捷键说明

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