📄 chap8.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 + -