📄 chap6.asm
字号:
; MC68HC05C8OCHan lda TIME+1 [3] inca [3] sta TIME+1 [4] lda TIME [3] adc #0 [2] sta TIME [4] lda TSR ;part of Ack lda OCR+1 ;low byte add #$D0 ;$07D0=2000 sta OCR+1 lda OCR adc #$07 sta OCR ;next in 1ms rti org $1FF8 fdb OCHan; Program 6.22. Ritual for the assembly language implementation of the squarewave using output compare.; MC68HC05C8Period rmb 2 ;units 祍ecInit sei ;make atomic lda #$40 sta TCR ;arm OCF lda TSR ;clear OCF ldx TCNT ;latches LSB too lda TCNT+1 ;read low byte add #50 ;first in 25祍 sta OCR+1 txa adc #0 sta OCR cli ;enable rts; Program 6.23. Assembly language squarewave using output compare.; MC68HC05C8OCHan lda TSR ;part of ACK [3] lda OCR+1 ;low byte [3] add Period+1 [3] sta OCR+1 ;OCR=OCR+Period [4] lda OCR [3] adc Period [3] sta OCR ;setup next [4] lda TCR [3] eor #1 ;toggle OLVL [2] sta TCR [4] rti [6] org $1FF8 fdb OCHan; Program 6.25. Assembly language initialization pulse-width modulated squarewave using output compare.; MC68HC05C8High rmb 2 ;number of cycles highLow rmb 2 ;number of cycles lowInit sei ;make atomic lda #$41 sta TCR ;arm OCF lda TSR ;clear OCF ldx TCNT ;latches LSB too lda TCNT+1 ;read low byte add #50 ;first in 25祍 sta OCR+1 txa adc #0 sta OCR cli ;enable rts; Program 6.26. Assembly language ISR for pulse-width modulated squarewave using output compare.; MC68HC05C8OCHan lda TSR ;part of ACK [3] brclr 0,TCR,zero [5] one lda OCR+1 ;low byte [3] add High+1 [3] sta OCR+1 ;OCR=OCR+High [4] lda OCR [3] adc High [3] sta OCR ;setup next [4] lda #$40 ;next is 0 [2] sta TCR [4] bra done [3]zero lda OCR+1 ;low byte [3] add Low+1 [3] sta OCR+1 ;OCR=OCR+Low [4] lda OCR [3] adc Low [3] sta OCR ;setup next [4] lda #$41 ;next is 1 [2] sta TCR [4]done rti [6] org $1FF8 fdb OCHan; Program 6.29. Assembly language frequency measurement.; MC68HC05C8Count rmb 1 ;in progressFreq rmb 1 ;in 100Hz unitsDone rmb 1 ;$FF when readyInit sei ;make atomic lda #$C0 ;arm ICF rising sta TCR ;arm OCF lda TSR ;clear ICF lda ISR+1 ;read low byte clr Done clr Count ldx TCNT ;latches LSB too lda TCNT+1 ;read low byte add #50 ;first in 25祍 sta OCR+1 txa adc #0 sta OCR cli ;enable rtsIHan lda TSR bit #$40 ;poll OCF bne ChIC OChan lda OCR+1 add #$20 sta OCR+1 ;OCR=OCR+20000 lda OCR adc #$4E sta OCR lda Count sta Freq lda #$FF sta Done clr Count ;setup for nextChIC lda TSR ;poll ICF bit #$80 bne Iret ICHan lda ICR+1 ;ack inc Count Iret rti org $1FF8 fdb Ihan ;both ICF and OCF; Program 6.31. Assembly language initialization for period measurement.; MC68HC05C8Init sei ;make atomic lda #$C0 ;arm ICF rising sta TCR ;arm OCF lda TSR ;clear ICF lda ISR+1 ;read low byte clr Done ;set when ready clr Cnt clr Cnt+1 clr OverFlow ;set if too bigwait brclr 7,TSR,wait ;wait lda ISR+1 ;read low byte ldx TCNT ;latches LSB too lda TCNT+1 ;read low byte add #50 ;first in 25祍 sta OCR+1 txa adc #0 sta OCR cli ;enable rts; Program 6.32. Assembly language interrupt service routines for period measurement.; MC68HC05C8IHan lda TSR bit #$40 ;poll OCF bne ChIC OChan lda OCR+1 add #$D0 sta OCR+1 ;OCR=OCR+2000 lda OCR adc #$07 sta OCR lda Cnt+1 add #1 sta Cnt+1 lda Cnt adc #0 sta Cnt bne ChIC lda Cnt+1 bne ChIC ;Is Cnt equal to 0 lda #$FF sta OverFlow ;too bigChIC lda TSR ;poll ICF bit #$80 bne Iret ICHan lda ICR+1 ;ack lda OverFlow beq goodbad sta Period sta Period+1 ;Period=65535 clr OverFlow bra set good lda Cnt+1 sta Freq+1 lda Cnt sta Freq set lda #$FF sta Done clr Cnt clr Cnt+1Iret rti org $1FF8 fdb Ihan ;both ICF and OCF; Program 6.34. Assembly language initialization for frequency measurement.; MC68HC05C8Init sei ;make atomic lda #$C0 ;arm ICF rising sta TCR ;arm OCF lda TSR ;clear ICF lda ISR+1 ;read low byte clr Done clr Count clr Count+1 clr FourHundred clr FourHundred+1 ldx TCNT ;latches LSB too lda TCNT+1 ;read low byte add #50 ;first in 25祍 sta OCR+1 txa adc #0 sta OCR cli ;enable rts ; Program 6.35. Assembly language ISR's for frequency measurement.; MC68HC05C8IHan lda TSR bit #$40 ;poll OCF bne ChIC OChan lda OCR+1 add #$50 sta OCR+1 ;OCR=OCR+50000 lda OCR adc #$C3 sta OCR lda FourHundred+1 add #1 sta FourHundred+1 lda FourHundred adc #0 sta FourHundred lda FourHundred+1 ;400=$190 cmp #$90 bne ChIC lda FourHundred cmp #1 bne ChIC lda Count+1 ;every 10sec sta Freq+1 lda Count sta Freq lda #$FF sta Done clr Count ;setup for next clr Count+1 clr FourHundred clr FourHundred+1ChIC lda TSR ;poll ICF bit #$80 bne Iret ICHan lda ICR+1 ;ack lda Count+1 add #1 sta Count+1 lda Count adc #0 sta Count Iret rti org $1FF8 fdb Ihan ;both ICF and OCF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -