📄 chap6.asm
字号:
TIME rmb 2 ;every 1 msInit sei ;make atomic mov #$02,TSC ;500ns clk lda TSC3 mov #$54,TSC3 ;arm,toggle OC; write 0 to bit 7, clears CH3F ldx TCNT lda TCNT+1 ;low byte add #$D0 ;2000=$07D0 sta TCH3+1 ;TCH3=TCNT+2000 txa adc #$07 sta TCH3 ;setup next clr TIME clr TIME+1 cli ;enable rts; Program 6.20. Assembly language ISR for periodic interrupt using output compare.; MC68HC708XL36CH3Han pshh [2] ldhx TIME [4] aix #1 [2] sthx TIME [4] bclr 7,TSC3 ;Acknowledge lda TCH3+1 ;low byte add #$D0 ;2000=$07D0 sta TCH3+1 ;TCH3=TCH3+2000 lda TCH3 adc #$07 sta TCH3 ;setup next pulh rti org $FFEE ;timer channel 3 fdb CH3Han; Program 6.22. Ritual for the assembly language implementation of the squarewave using output compare.; MC68HC708XL36Period rmb 2 ;units 祍ecInit sei ;make atomic bset 7,DDRE ;PTE7 output mov #$02,TSC ;500ns clk lda TSC3 mov #$54,TSC3 ;arm,toggle OC; write 0 to bit 7, clears CH3F ldhx TCNT aix #50 ;first in 25祍 sthx TCH3 cli ;enable rts; Program 6.23. Assembly language squarewave using output compare.; MC68HC708XL36CH3Han bclr 7,TSC3 ;Ack [4] lda TCH3+1 ;low byte [3] add Period+1 [3] sta TCH3+1 ;TCH3=TCH3+Period[3] lda TCH3 [3] adc Period [3] sta TCH3 ;setup next [3] rti [7] org $FFEE ;timer channel 3 fdb CH3Han; Program 6.25. Assembly language initialization pulse-width modulated squarewave using output compare.; MC68HC708XL36High rmb 2 ;number of cycles highLow rmb 2 ;number of cycles lowInit sei ;make atomic bset 7,DDRE ;PTE7 output mov #$02,TSC ;500ns clk lda TSC3 mov #$5C,TSC3 ;arm,set OC; write 0 to bit 7, clears CH3F ldhx TCNT aix #50 ;first in 25祍 sthx TCH3 cli ;enable rts; Program 6.26. Assembly language ISR for pulse-width modulated squarewave using output compare.; MC68HC708XL36CH3Han bclr 7,TSC3 ;Ack [4] brclr 2,TSC3,zero [3] one lda TCH3+1 ;low byte [3] add High+1 [3] sta TCH3+1 ;TCH3=TCH3+High [3] lda TCH3 [3] adc High [3] sta TCH3 ;setup next [3] bclr 2,TSC2 [4] bra done [3]zero lda TCH3+1 ;low byte [3] add Low+1 [3] sta TCH3+1 ;TCH3=TCH3+Low [3] lda TCH3 [3] adc Low [3] sta TCH3 ;setup next [3] bset 2,TSC2 [4]done rti [7] org $FFEE ;timer channel 3 fdb CH3Han; Program 6.29. Assembly language frequency measurement.; MC68HC708XL36Count rmb 1 ;measurement in progressFreq rmb 1 ;in 100Hz unitsDone rmb 1 ;set to $FF when readyInit sei ;make atomic mov #$02,TSC ;500ns clk lda TSC1 mov #$44,TSC1 ;arm,rising clr Done clr Count lda TSC3 mov #$54,TSC3 ;arm,toggle OC ldhx TCNT aix #50 ;first in 25祍 sthx TCH3 cli ;enable rtsOC3Han bclr 7,TSC3 ;called every 10ms lda TCH3+1 ;low byte add #$20 ;20000=$4E20 sta TCH3+1 ;TCH3=TCH3+20000 lda TCH3 adc #$4E sta TCH3 ;setup next lda Count sta Freq mov #$FF,Done clr Count ;setup for next rti IC1Han bclr 7,TSC1 ;Ack inc Count rti org $FFF2 ;timer channel 1 fdb IC1Han org $FFEE ;timer channel 3 fdb OC3Han; Program 6.31. Assembly language initialization for period measurement.; MC68HC708XL36Init sei ;make atomic mov #$02,TSC ;500ns clk lda TSC1 mov #$44,TSC1 ;arm,rising clr Done ldhx #0 sthx Cnt ;number of msec clr OverFlow ;set if too bigwait brclr 7,TSC1,wait ;wait for first bclr 7,TSC1 ;clear flag lda TSC3 mov #$54,TSC3 ;arm,toggle OC ldhx TCNT aix #50 ;first in 25祍 sthx TCH3 cli ;enable rts; Program 6.32. Assembly language interrupt service routines for period measurement.; MC68HC708XL36OC3Han pshh ;called every 10ms bclr 7,TSC3 ;Ack lda TCH3+1 ;low byte add #$D0 ;2000=$07D0 sta TCH3+1 ;TCH3=TCH3+2000 lda TCH3 adc #$07 sta TCH3 ;setup next ldhx Cnt aix #1 sthx Cnt cphx #0 bne ok mov #$FF,OverFlow ;too bigok pulh rti IC1Han pshh ;called every rising bclr 7,TSC1 ;Ack lda OverFlow beq goodbad sta Period sta Period+1 ;Period=65535 clr OverFlow bra set good ldhx Cnt sthx Period ;units in msecset mov #$FF,Done clr Cnt clr Cnt+1 pulh rti org $FFF2 ;timer channel 1 fdb IC1Han org $FFEE ;timer channel 3 fdb OC3Han; Program 6.34. Assembly language initialization for frequency measurement.; MC68HC708XL36Init sei ;make atomic mov #$02,TSC ;500ns clk lda TSC1 mov #$44,TSC1 ;arm,rising clr Done ldhx #0 sthx Count sthx FourHundred lda TSC3 mov #$54,TSC3 ;arm,toggle OC ldhx TCNT aix #50 ;first in 25祍 sthx TCH3 cli ;enable rts ; Program 6.35. Assembly language ISR's for frequency measurement.; MC68HC708XL36OC3Han pshh ;called every 25ms bclr 7,TSC3 ;Ack lda TCH3+1 ;low byte add #$50 ;50000=$C350 sta TCH3+1 ;TCH3=TCH3+50000 lda TCH3 adc #$C3 sta TCH3 ;setup next lda FourHundred+1 add #1 sta FourHundred+1 lda FourHundred adc #0 sta FourHundred lda FourHundred+1 ;400=$190 cmp #$90 bne skip lda FourHundred cmp #1 bne skip ldhx Count ;every 10sec sthx Freq mov #$FF,Done ldhx #0 sthx Count ;setup for next sthx FourHundredskip pulh rti IC1Han pshh ;called every rising bclr 7,TSC1 ;Ack ldhx Count aix #1 sthx Count pulh rti org $FFF2 ;timer channel 1 fdb IC1Han org $FFEE ;timer channel 3 fdb OC3Han
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -