PIC17C75X
ds30264a-页 38
初步的
1997 微芯 技术 公司
例子 6-2: 节省 状态 和 wreg 在 内存 (nested)
; 这 地址 那 是 使用 至 store 这 cpusta 和 wreg 值 必须 是 在 这 数据 记忆
; 地址 范围 的 1ah - 1fh. 向上 至 6 locations 能 是 saved 和 restored 使用 这 movfp
; 操作指南. 这个 操作指南 neither affects 这 状态 位, 也不 corrupts 这 wreg 寄存器.
; 这个 routine 使用 这 frs0, 所以 它 控制 这 fs1 和 fs0 位 在 这 alusta 寄存器.
;
nobank_fsr equ 0x40
bank_fsr equ 0x41
alu_温度 equ 0x42
wreg_温度 equ 0x43
bsr_s1 equ 0x01a ; 1st location 至 保存 bsr
bsr_s2 equ 0x01b ; 2nd location 至 保存 bsr (label 不 使用 在 程序)
bsr_s3 equ 0x01c ; 3rd location 至 保存 bsr (label 不 使用 在 程序)
bsr_s4 equ 0x01d ; 4th location 至 保存 bsr (label 不 使用 在 程序)
bsr_s5 equ 0x01e ; 5th location 至 保存 bsr (label 不 使用 在 程序)
bsr_s6 equ 0x01f ; 6th location 至 保存 bsr (label 不 使用 在 程序)
;
initialization ;
call clear_内存 ; 必须 clear 所有 数据 内存
;
init_pointers ; 必须 initialize 这 pointers 为 流行音乐 和 推
clrf bsr, f ; 设置 所有 banks 至 0
clrf alusta, f ; fsr0 邮递 increment
bsf alusta, fs1
clrf wreg, f ; clear wreg
movlw bsr_s1 ; 加载 fsr0 和 1st 地址 至 保存 bsr
movwf fsr0
movwf nobank_fsr
movlw 0x20
movwf bank_fsr
:
: ; your 代号
:
: ; 在 中断 vector 地址
推 bsf alusta, fs0 ; fsr0 有 自动-increment, 做 不 影响 状态 位
bcf alusta, fs1 ; 做 不 影响 状态 位
movfp bsr, indf0 ; 非 状态 位 是 影响
clrf bsr, f ; periperal 和 数据 内存 bank 0 非 状态 位 是 影响
movpf alusta, alu_温度 ;
movpf fsr0, nobank_fsr ; 保存 这 fsr 为 bsr 值
movpf wreg, wreg_温度 ;
movfp bank_fsr, fsr0 ; restore fsr 值 为 其它 值
movfp alu_温度, indf0 ; 推 alusta 值
movfp wreg_温度, indf0 ; 推 wreg 值
movfp pclath, indf0 ; 推 pclath 值
movpf fsr0, bank_fsr ; restore fsr 值 为 其它 值
movfp nobank_fsr, fsr0 ;
;
: ; 中断 维护 routine (isr) 代号
;
流行音乐 clrf alusta, f ; fsr0 有 自动-decrement, 做 不 影响 状态 位
movfp bank_fsr, fsr0 ; restore fsr 值 为 其它 值
decf fsr0, f ;
movfp indf0, pclath ; 流行音乐 pclath 值
movfp indf0, wreg ; 流行音乐 wreg 值
bsf alusta, fs1 ; fsr0 做 不 改变
movpf indf0, alu_温度 ; 流行音乐 alusta 值
movpf fsr0, bank_fsr ; restore fsr 值 为 其它 值
decf nobank_fsr, f ;
movfp nobank_fsr, fsr0 ; 保存 这 fsr 为 bsr 值
movfp alu_温度, alusta ;
movfp indf0, bsr ; 非 状态 位 是 影响
;
retfie ; 返回 从 中断 (使能 中断)