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