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

📄 chap8.asm

📁 Motorola 6812芯片开发的接口程序。
💻 ASM
字号:
; Chapter 8 6812 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.; MC68HC812A4WaitPress: ldaa PORTT        ;PT3=0 if switch pressed       anda #$08       bne  WaitPress;loop until switch is pressed       ldd  TCNT       addd #20000     ;10ms delay       std  TC5        ; fast clear loopP: ldaa TFLG1        ;wait 10ms for switch to stop bouncing       anda #$20       ;C5F set?       beq  loopP       rtsWaitRelease: ldaa PORTT        ;PT3=1 if switch released       anda #$08       beq  WaitRelease;loop until switch is released       ldd  TCNT       addd #20000     ;10ms delay       std  TC5        ; fast clear loopR: ldaa TFLG1        ;wait 10ms for bouncing to stop        anda #$20       ;C5F set?       beq  loopR       rtsInit: bset #$20,TIOS  ;enable OC5      movb #$90,TSCR  ;enable fast clr      movb #$32,TMSK2 ;500 ns clk      bclr #$08,DDRT  ;PT3 is input      rts; Program 8.4. Another example of switch debouncing using assembly software.; MC68HC812A4* Reg B is the return valueReadPT3: ldd TCNT        addd #20000 ;10ms delay        std  TC5        ldab PORTT ;0 if pressed        andb #$08  ;B=old valueSame:   ldaa TFLG1 ;10ms bouncing        anda #$20  ;C5F set?        bne  Done         ldaa PORTT ;0 if pressed        anda #$08  ;A=new value        cba        ;same as before        beq  Same         bra  ReadPT3; different    Done:   rtsInit: bset #$20,TIOS ;enable OC5      movb #$90,TSCR ;enable fast clr      movb #$32,TMSK2 ;500 ns clk      bclr #$08,DDRT  ;PT3 is input      rts; Program 8.8. Assembly software interface of a direct connection keyboard.; MC68HC812A4KEY:   ds  2     ;current valueRITUAL: bset #$20,TIOS ;enable OC5    movb #$90,TSCR  ;enable fast clr    movb #$32,TMSK2 ;500 ns clk    bclr #$20,TMSK1 ;disarm OC5    clr  DDRH       ;key inputs    clr  DDRJ       ;key inputs    movb #$FF,KWIEH ;arm key wakeup    movb #$FF,KWIEJ ;arm key wakeup    clr  KPOLJ      ;falling edge    clr  PUPEJ      ;regular inputs    bsr  KeyBoard ;set 74LS374's    cli           ;Enable IRQ    rtsKeyBoard: movb #$FF,KWIFH ;clr flags       movb #$FF,KWIFJ ;clear flags      ldaa PORTJ  ;Read MSB      ldab PORTH  ;Read LSB      std  KEY      rtsKeyHHan: clr KWIEH ;disarm key wakeup      clr KWIEJ   ;disarm key wakeup      bset #$20,TMSK1 ;arm OC5      ldd  TCNT   ;TCNT      addd #20000 ;OC5 10ms later      std  TC5    ;fast clear      rtiKeyJHan: clr KWIEH ;disarm key wakeup      clr KWIEJ   ;disarm key wakeup      bset #$20,TMSK1 ;arm OC5      ldd  TCNT   ;TCNT      addd #20000 ;OC5 10ms later      std  TC5    ;fast clear      rtiOC5Han: bclr #$20,TMSK1 ;disarm OC5      movb #$FF,KWIEH ;arm key wakeup      movb #$FF,KWIEJ ;arm key wakeup      bsr  KeyBoard   ;read keyboard      rti; Program 8.11. Assembly software interface of a matrix scanned keyboard.; MC68HC812A4Ritual: clr  DDRJ ;PJ3-PJ0 inputs        rts       ;PJ7-PJ0 oc outputsScanTab: dc.b %01110000 ;PJ7 row data        dc.b %10000000 ;PJ7 row DDRJ        dc.b "abcd"    ;characters        dc.b %10110000 ;PJ6 row        dc.b %01000000 ;PJ6 row DDRJ        dc.b "efgh"    ;characters        dc.b %11010000 ;PJ5 row        dc.b %00100000 ;PJ5 row DDRJ        dc.b "ijkl"    ;characters        dc.b %11100000 ;PJ4 row        dc.b %00010000 ;PJ4 row DDRJ        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    ;row select        beq  Done        stab PORTJ  ;select row        ldab 1,x    ;DDRJ value        stab DDRJ        brset PORTJ,#$01,NotPJ0        ldaa 5,x   ;code for column 0        inyNotPJ0: brset PORTJ,#$02,NotPJ1        ldaa 4,x   ;code for column 1          inyNotPJ1: brset PORTJ,#$04,NotPJ2        ldaa 3,x   ;code for column 2          inyNotPJ2: brset PORTJ,#$08,NotPJ3        ldaa 2,x   ;code for column 3          inyNotPJ3: leax 6,x   ;Size of entry        bra  LoopDone:   rts; Program 8.13. Assembly software interface of a multiplexed keyboard.; MC68HC812A4Key:     ds 1  ;current keyPrevKey: ds 1  ;previous keyRitual: sei       ldaa #$F0  ;PJ7-PJ4 outputs       staa DDRJ  ;PJ3-PJ0 inputs       bsr KeyScan       staa PrevKey       staa Key       bset #$20,TIOS  ;activate OC5       bset #$20,TMSK1 ;arm OC5       ldaa #$32       staa TMSK2  ;500ns clock       ldd  TCNT       addd #20000       std  TC5   ; first in 10ms       ldaa #$20       staa TFLG1 ; clear C5F       cli       rts; returns RegA=code (0 for none)KeyScan: clra     ;=0 means no       clr  PORTJ ;row=0loop:  ldab PORTJ ;read columns       andb #$0F       cmpb #$0F  ;$0F means no       beq  none       eorb #$0F  ;code 1-9       tba        ;found onenone:  ldab PORTJ       addb #$10  ;next row       stab PORTJ       bne  loop       rtsTOC5handler:       bsr  KeyScan       cmpa PrevKey ;same as last?       bne  skip       staa Key     ;new valueskip:  staa PrevKey       ldd  TC5       addd #20000       std  TC5     ;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 + -