
HT47R20
PD
TO
4
5
6
7
系统上电或执行
CLR WDT
指令
PD
被清除 执行
停止
指
令
PD
被½½
系统上电 执行
CLR WDT
或
停止
指令
TO
被清除
WDT
定时溢出
TO
被½½
未用 读出为
0
未用 读出为
0
状态寄存器
除了
PD
和
TO
标志外 状态寄存器的其它½½可以用指令改变 任½对状态寄存器的写操½½不会
改变
PD
和
TO
的值 对状态寄存器的操½可½会导致与预期不一样的结果
TO
标志只受系统上电 看门
CLR WDT
指令或
停止
指令的½响
PD
标志只受系统上电
CLR WDT
指令或
停止
狗溢出
指令的½响
标志½
OV AC
和
C
反映的是最近一次操½的状态
在进入中断程序或子程序调用时 状态寄存器不会被自动压入堆栈 如果状态寄存器的内容是重要的 而
且子程序会½响状态寄存器的内容 那么程序员必须事先将
状态
的值保存½
中断
HT47R20
提供了一个外部中断 一个内部定时器/计数器中断 一个内部时基中断和一个内部实时时
钟中断 中断控制寄存器
0(INTC0)和中断控制寄存器 1(INTC1)包含了所有中断控制½
用来½½中断允
许/禁止以及中断请求标志
寄存器
½
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
标志
EMI
EEI
ETBI
ERTI
EIF
TBF
RTF
—
ETI
—
—
—
TF
—
—
—
功½
控制总中断(1=允许
0=禁止)
控制外部中断(1=允许
0=禁止)
控制时基中断(1=允许
0=禁止)
控制实时时钟中断(1=允许
0=禁止)
外部中断请求标志(1=请求
0=无)
时基中断请求标志(1=请求
0=无)
实时时钟中断请求标志(1=请求
0=无)
未定义 读取值为
0
控制定时/计数器中断(1=允许
0=禁止)
未定义 读取值为
0
未定义 读取值为
0
未定义 读取值为
0
定时/计数器中断请求标志(1=请求
0=无)
未定义 读取值为
0
未定义 读取值为
0
0
未定义 读取值为
INTC
寄存器
INTC0
(0BH)
INTC1
(1EH)
只要有中断子程序被服务 其½的中断全部被禁止(通过清除
EMI
½) 这种做法的目的在于防止中断
嵌套 在执行中断服务子程序期间 可½会发生其它的中断请求 ½只有中断请求标志会被记½下来 如
果要实现中断嵌套 ½用者可以在中断子程序中½½
EMI
及
INTC0 INTC1
中对应的中断控制½ 如果
堆栈已满 即½有关的中断允许 该中断申请并不会被响应 一直到堆栈指针(SP)发生递减才会响应 ½
如果需要立即服务 应避免让堆栈发生饱和
所有的中断½具有唤醒功½ ½有中断服务请求 会将程序计数器值压栈 然后再½至中断服务程序
的入口 ½要记½这时只有程序计数器的内容被压栈 如果寄存器和状态寄存器的内容被中断程序改变
而导致该中断服务程序会破坏预期控制序列的话 ½用者应该事先将这些数据储存起来
外部中断是由引脚从高电½½变为½电½时触发的 其相关的中断申请标志½(EIF)接着就会被½½
如果外部中断允许 而且此时堆栈尚未用满 而外部中断被触发时 会调用
04H
地址子程序 该中断申
请标志( EIF )和
EMI
½也因此而清除 以便禁止其他中断
修订版1.10
10
2002-07-25