资源描述
EPROM/ROM-Based 8-Bit Microcontroller Series
这片说明文档以下两种型号MCU
· FM8PS53E : EPROM device(OPT)
· FM8PS53 : Mask ROM device(掩膜)
功能特性
· 只有42个单字指令
· 除分支指令为两个周期指令以外其余为单周期指令
· PC寻址范围为13-bit
· GOTO指令能跳转到所有的ROM/EPROM地址空间
· 子程序能返回到所有的ROM/EPROM地址空间
· 能处理8位数据
· 5级硬件堆栈
· 运行速度: DC-20 MHz 工作频率
DC-100 ns 指令周期
型号
管脚
I/O个数
EPROM/ROM空间 (Byte)
RAM (Byte)
FM8PS53/53E
14
12
1K
49
· 支持直接与间接数据寻址方式
· 一个带8位预置器的8位定时/计数器(Timer0))
· 内部上电复位
· 内含一个低电压检测电路供掉电复位使用
· 上电复位计数器(PWRT)和振荡启动计数器(Oscillator Start-up Timer OST)
· 内部振荡器集成了一个看门狗保证了可靠的操作同时软件使能看门狗操作
· 两类双向输入输出I/O口IOA 和 IOB
· 通过编程控制I/O端口的上拉/下拉、开路等状态
· 一个内部计数中断源;两个外部中断源:INT管脚,PortB的输入改变
· 通过INT管脚或者PortB的输入改变来实现睡眠唤醒
· 省电睡眠模式
· 内部有8MHz, 4MHz, 1MHz, 和 455KHzRC振荡器
· 有可靠的保证使得程序代码不被读出。
· 内部RC振荡器
· 提供以下振荡源的选择:
- ERC: External Resistor/Capacitor Oscillator(外部的RC振荡器)
- IRC/ERIC: Internal or External Resistor/Internal Capacitor Oscillator –(内部电阻内部的电容RC振荡器或外部的电阻内部的电容RC振荡器)
HF: High Frequency Crystal/Resonator Oscillator (高频率的晶体协振器)
LF: Low Frequency Crystal Oscillator (低频率的晶体振荡器)
· 工作电压范围:
- EPROM : 2.3V - 5.5V
- ROM : 2.3V- 5.5V
此说明包含了新产品的一些信息、远翔科技保留修改该产品没有在该文当中说明的特性,由于这些新特性导致的问题远翔科技不承担任何责任、代理商没有任何权力诠释这些特性。
概叙
FM8PS53系列是一款低功耗,高速,高噪声容限,EPROM/ROM基于8位CMOS工艺制造的单片机,采用RISC指令集,共有42条指令,除分支指令为两个周期指令以外其余为单周期指令。这种易用、易记的指令集大大缩短了开发时间。FM8P53系列包含了上电复位(Power-on Reset POR),掉电复位(Brown-out Reset BOR), 上电复位计数器(Power-up Reset Timer PWRT), 振荡启动计数器 (Oscillator Start-up Timer OST), 看门狗定时器(Watchdog Timer), EPROM/ROM, SRAM, 双向三态I/O口, (可以设置为上拉/下拉、开路), 省电睡眠模式, 一个带8位预置器的8位定时/计数器,独立中断, 睡眠唤醒模式和可靠的代码保护,有两个振荡源可供用户配置选择, 包含省电i振荡源和低功耗振荡器. FM8P53系列可访问1K×13的程序存储空间,FM8P53系列能直接或间接访问寄存器以及数据存储区,所有的特殊功能寄存器分布在数据存储区同时包含特定的程序指针。
管脚图
PDIP, SOP
管脚功能描述
管脚名称
I/O
说明
IOA0 ~ IOA3
I/O
IOA0 ~ IOA3 双向I/O口
软件可以设置为下拉
IOB0/INT
I/O
双向I/O口同时具有系统唤醒功能
软件设置为上拉/下拉和开路
外部中断输入脚
IOB1
I/O
双向I/O口同时具有系统唤醒功能
软件设置为上拉/下拉和开路
IOB2/T0CKI
I/O
双向I/O口同时具有系统唤醒功能
软件设置为上拉/下拉和开路
外部计数输入脚
IOB3/RSTB
I
IOB3 作为输入只能具备系统唤醒功能i
系统复位输入脚. 底电平复位.设置为复位输入时上拉
IOB4/OSCO
I/O
双向I/O口同时具有系统唤醒功能 (RCOUT 可选择IRC/ERIC, ERC模式)
软件设置为上拉/开路
晶体振荡器输出脚 (XT, LP 模式)
基于指令周期晶体振荡器输出 (RCOUT 可选择IRC/ERIC, ERC模式)
IOB5/OSCI
I/O
双向I/O口同时具有系统唤醒功能 (IRC 模式)
软件设置为上拉/开路
晶体振荡器输入脚 (XT, LP 模式)
外部实时时钟输入脚(ERIC, ERC模式)
IOB6 ~ IOB7
I/O
双向I/O口同时具有系统唤醒功能
软件设置为上拉/开路
Vdd
-
电源
Vss
-
地
Legend: I=输入, O=输出, I/O=输入/输出
1.0 存储器结构
FM8P53 存储器包含程序存储器和数据存储器
1.1 程序存储器
FM8P53有一个10位PC指针能访问1K×13的存储空间,复位地址为3FFh。
H/W 中断向量地址008h., S/W中断向量地址002h.。CALL/GOTO能指向在同一个程序页面(一个程序页面为1K)的所有存储空间
程序存储器分布图和堆栈结构
1.2数据存储器
数据存储器包含特殊功能器组和通用寄存器组,所有通用寄存器可以直接寻址或者通过FSR寄存器间接寻址。
特殊功能寄存器用来控制CPU或外围功能模块的工作。
表 1.1: FM8P53寄存器列表
表1.2: 通过OPTION 或IOST指令控制的寄存器
地址
说明
B7 B6
B5
B4
B3
B2
B1
B0
N/A (w)
OPTION
* INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
05h (w)
IOSTA
Port A I/O控制寄存器
06h (w)
IOSTB
Port B I/O控制寄存器
表1.3: 寄存器列表
地址
说明
B7 B6 B5 B4 B3 B2 B1 B0
00h (r/w)
INDF
通过FSR 访问数据区(不是一个实际的物理地址)
01h (r/w)
TMR0
8位定时/计数器
02h (r/w)
PCL
低8位PC指针
03h (r/w)
STATUS
RST
GP1
GP0 TO PD Z DC C
04h (r/w)
FSR
*
*
间接地址访问指针(RAM选择寄存器)
05h (r/w)
PORTA
IOA3
IOA2
IOA1
IOA0
06h (r/w)
PORTB
IOB7
IOB6
IOB5
IOB4
IOB3
IOB2
IOB1
IOB0
07h (r/w)
SRAM
通用寄存器
08h (r/w)
PCON
WDTE
EIS
LVDTE
*
*
*
*
*
09h (r/w)
WUCON
WUB7
WUB6
WUB5
WUB4
WUB3
WUB2
WUB1
WUB0
0Ah (r/w)
PCHBUF
-
-
-
-
-
-
2 MSBs Buffer of PC
0Bh (r/w)
PDCON
/PDB2
/PDB1
/PDB0
/PDA3
/PDA2
/PDA1
/PDA0
0Ch (r/w)
ODCON
ODB7
ODB6
ODB5
ODB4
ODB2
ODB1
ODB0
0Dh (r/w)
PHCON
/PHB7
/PHB6
/PHB5
/PHB4
/PHB2
/PHB1
/PHB0
0Eh (r/w)
INTEN
GIE
*
*
*
*
INTIE
PBIE
T0IE
0Fh (r/w)
INTFLAG
-
-
-
-
-
INTIF
PBIF
T0IF
Legend: - = unimplemented, read as ‘0’, * = unimplemented, read as ‘1’,
2.1 功能介绍
2.1 寄存器操作
2.1.1 INDF (间接寻址寄存器)
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
00h (r/w)
INDF
通过FSR 访问数据区(不是一个实际的物理地址)
INDF不是一个实际的物理地址,间接寻址时INDF通过RAM选择寄存器(FSR)来访问其所指向的地址。间接寻址读操作直接读地址00h(FSR=”0”), 间接寻址不能对INDF直接进行写操作(尽管有些状态会发生改变),FSR的5-0位可以用来选择64个寄存器(地址:00h ~ 3Fh)
例 2.1:间接寻址
· 地址38内容为10h
· 地址39内容为0Ah
· 将38写入FSR 中
· 通过A读INDF返回10h
· FSR加1 (@FSR=39h)
· 通过A读INDF返回0A h
2.1.2 TMR0 (定时/计数器 Time lock/Counter register)
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
01h (r/w)
TMR0
8位定时/计数器
TMR0是一个8位定时/计数器寄存器, Timer0的时钟源可以取值于指令周期或外部实时钟(T0CKI pin),使用外部时钟需要设置OPTION的T0CS(T0CS=5)位为1,
使用TMR0的预置器需要设置OPTION的PSA (PSA =3)位为0 ,这种模式下TMR0值的改变,预置器被清零
2.1.3 PCL (Low Bytes of Program Counter) & Stack
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
02h (r/w)
PCL
8位定时/计数器
FM8P53的PC指针和堆栈的位数为10位, 堆栈有5级,低位的PC指针为PCL寄存器,该寄存器时可读写的,高位的PC指针为PCH寄存器,该寄存器包含PC<9:8> 位,该寄存器不能直接读写。. PCH寄存器的改变是通过PCHBUF寄存器来实现的。.每一条指令执行的时候他的PC指针包含下一条指令的操作地址。指令没有改变PC内容时候、在每一个指令周期PC指针自动加1。
对于GOTO指令有PC<9:0>,PCL 映射成PC<7:0>,PCHBUF不变。
对于CALL指令有PC<9:0>,下一条指令地址被推进堆栈,PCL 映射成PC<7:0>,PCHBUF不变。
对于RETIA, RETFIE, RETURN指令有PC<9:0>,PC的内容更改为出栈信息,PCL 映射成PC<7:0>,PCHBUF不变。
对于其他指令,PCLj就是目标信息, PC<7:0>的内容就是指令地址或。不管怎样, PC<9:8> 来源于 PCHBUF<1:0> 位 (PCHBUFà PCH). PCHBUF不会改变,从而PCH不会改变。.
2.2:不同的指令调用PC指针跳转方式
1、GOTO指令
2、CALL指令
3、RETIA, RETFIE, RETURN指令
注释1. PCHBUF只有在PCL内容是目标地址才有效,当PCL是运算结果时候,PCHBUF不起作用。
2.1.4 STATUS (状态字寄存器)
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
03h (r/w)
STATUS
RST
GP1
GP0
TO
PD
Z
DC
C
状态字寄存器包含运算标志,结果标志
指令执行以后可能会影响STATUS寄存器的Z、DC 、C标志位,则不能直接对这三个标志位进行写操作,这些标志位的设置由MCU的逻辑自动完成。同时,TO 和 PD 位也是不能通过指令直接改变写操作。Therefore, the result of an instruction with the STATUS Register as destination may be different than intended. 例如:, 运行CLRR STATUS将把STATUS 的高三位置零和Z标志位置1 同时该寄存器的内容如下
0
0
0
u
u
1
u
u
u表示为指令执行前后该位没有发生改变
C :进位标志
ADDAR, ADDIA
= 1,有进位
= 0, 无进位
SUBAR, SUBIA
= 1, 无借位
= 0,有借位
注释 : A subtraction is executed by adding the two’s complement of the second operand. For rotate (RRR, RLR)instructions, this bit is loaded with either the high or low order bit of the source register.
DC : 辅助进位/借位标志.(低四位向高四位进位/借位标志)
ADDAR, ADDIA
= 1, 底4位有进位
= 0, 底4位无进位
SUBAR, SUBIA
= 1, 底4位无借位
= 0, 底4位有借位
Z : Zero bit.
= 1, 算术或逻辑运算结果为“0”时.
= 0, 算术或逻辑运算结果不为“0”时.
PD : Power down flag bit.
= 1, 当系统上电时或执行“CLRWDT”指令后
= 0, 当执行“SLEEP”指令后.
TO : Time overflow flag bit.
= 1, 当系统上电时或执行“CLRWDT”或SLEEP指令后
= 0,看门狗定时器溢出
GP1:GP0 :通用寄存器读/写位.
RST :定义系统复位类型位.
= 1, 唤醒SLEEP或Port B脚位变化唤醒SLEEP
= 0, 其他类型唤醒SLEEP.
2.1.5 FSR (间接寻址指针)
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
04h (r/w)
FSR
*
*
间接寻址指针
PD
Z
DC
C
Bit5:Bit0 : 用来选择访问间接寻址时目标寄存器地址. 具体描述见2.1.1。 Bit7:Bit6 : 没有使用. Read as “1”s.
2.1.6 PORTA, PORTB (Port 寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
05h (r/w)
PORTA
IOA3
IOA2
IOA1
IOA0
06h (r/w)
PORTB
IOB7
IOB6
IOB5
IOB4
IOB3
IOB2
IOB1
IOB0
读端口(PORTA, PORTB 寄存器)的状态依赖于该端口是输入/输出模式,写端口是向锁存器写数据
PORTA 是一个4位端口数据寄存器,只有低4位被使用 (PORTA<3:0>). Bits 7-4通常作为读/写位.
PORTB是一个8位端口数据寄存器. IOB3只能作为输入.
2.1.7 PCON (电源控制寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
08h (r/w)
PCON
WDTE
EIS
LVDTE
*
*
*
*
*
Bit4:Bit0 : Not used. 置 “1”.
LVDTE : LVDT (低电压检测) 使能位.
= 0, 关闭 LVDT.
= 1, 使能 LVDT.
EIS : 定义管脚B0/INT功能位
= 0, IOB0 (双向I/O 口) is selected. 屏蔽了INT功能.
= 1, INT (外部中断输入脚) ,在这种模式下,PORTB 的IOB0必须置“1”. IOB0作为I/O口输入功能通过硬件屏蔽了,读取INT管脚信息的与读PORTB.方式相同。
WDTE : WDT (watch-dog timer) 使能看门狗定时器
= 0, 关闭 WDT.
= 1, 使能WDT.
2.1.8 WUCON (Port B输入改变/唤醒控制寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
09h (r/w)
WUCON
WUB7
WUB6
WUB5
WUB4
WUB3
WUB2
WUB1
WUB0
WUB0 :
= 0, 禁止IIOB0 输入改变/唤醒功能
= 1, 使能IOB0 输入改变/唤醒功能.
WUB1 :
= 0, 禁止IIOB1 输入改变/唤醒功能
= 1, 使能IOB1 输入改变/唤醒功能.
WUB2 :
= 0, 禁止IIOB2 输入改变/唤醒功能
= 1, 使能IOB2 输入改变/唤醒功能.
WUB3 :
= 0, 禁止IIOB3 输入改变/唤醒功能
= 1, 使能IOB3 输入改变/唤醒功能.
WUB4 :
= 0, 禁止IIOB4 输入改变/唤醒功能
= 1, 使能IOB4 输入改变/唤醒功能.
WUB5 :
= 0, 禁止IIOB5 输入改变/唤醒功能
= 1, 使能IOB5 输入改变/唤醒功能.
WUB6 :
= 0, 禁止IIOB6 输入改变/唤醒功能
= 1, 使能IOB6 输入改变/唤醒功能.
WUB7 :
= 0, 禁止IIOB7 输入改变/唤醒功能
= 1, 使能IOB7 输入改变/唤醒功能.
2.1.9 PCHBUF (PC指针高位缓冲区)
Bit1:Bit0 : 见2.1.3
Bit7:Bit2 : 没有使用,置 “0”.
2.1.10 PDCON (I/O下拉控制寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Bh (r/w)
PDCON
/PDB2
/PDB1
/PDB0
/PDA3
/PDA2
/PDA1
/PDA0
/PDA0 :
= 0, 使能IOA0内部下拉
= 1, 禁止IOA0内部下拉.
/PDA1 :
= 0, 使能IOA1内部下拉
= 1, 禁止IOA1内部下拉.
/PDA2 :
= 0, 使能IOA2内部下拉
= 1, 禁止IOA2内部下拉.
/PDA3 :
= 0, 使能IOA3内部下拉
= 1, 禁止IOA3内部下拉.
/PDB0:
= 0, 使能IOB 0内部下拉
= 1, 禁止IOB0内部下拉
/PDB1:
= 0, 使能IOB1内部下拉
= 1, 禁止IOB1内部下拉
/PDB2:
= 0, 使能IOB2内部下拉
= 1, 禁止IOB2内部下拉.
Bit7 : 一般的读/写位:
2.1.11 ODCON (I/O开路控制寄存器
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Ch (r/w)
ODCON
ODB7
ODB6
ODB5
ODB4
ODB2
ODB1
ODB0
ODB0 :
= 0, 禁止IOB0内部开路
= 1, 使能 IOB0内部开路.
ODB1 :
= 0, 禁止IOB1内部开路
= 1, 使能 IOB1内部开路.
ODB2 :
= 0, 禁止IOB2内部开路
= 1, 使能 IOB2内部开路.
Bit3 : 一般的读/写位.
ODB4 :
= 0, 禁止IOB4内部开路
= 1, 使能 IOB4内部开路.
ODB5 :
= 0, 禁止IOB5内部开路
= 1, 使能 IOB5内部开路.
ODB6 :
= 0, 禁止IOB6内部开路
= 1, 使能 IOB6内部开路.
ODB7 :
= 0, 禁止IOB7内部开路
= 1, 使能 IOB7内部开路.
2.1.12 PHCON (I/O上拉控制寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Dh (r/w)
PHCON
PHB7
PHB6
PHB5
PHB4
PHB2
PHB1
PHB0
/PHB0 :
= 0, 使能IOB0内部上拉.
= 1, 禁止IOB0内部上拉.
/PHB1 :
= 0, 使能IOB1内部上拉.
= 1, 禁止IOB1内部上拉.
/PHB2 :
= 0, 使能IOB2内部上拉.
= 1, 禁止IOB2内部上拉.
Bit3 : 一般的读/写位.
/PHB4 :
= 0, 使能IOB4内部上拉.
= 1, 禁止IOB4内部上拉.
/PHB5 :
= 0, 使能IOB5内部上拉.
= 1, 禁止IOB5内部上拉.
/PHB6 :
= 0, 使能IOB6内部上拉.
= 1, 禁止IOB6内部上拉.
/PHB7 :
= 0, 使能IOB7内部上拉.
= 1, 禁止IOB7内部上拉.
2.1.13 INTEN (中断屏蔽寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Eh (r/w)
INTEN
GIE
*
*
*
*
INTIE
PBIE
T0IE
T0IE : Timer0溢出中断屏蔽位.
= 0, 禁止Timer0溢出中断.
= 1,使能Timer0溢出中断
PBIE : Port B输入改变中断屏蔽位.
= 0, 禁止Port B输入改变中.
= 1,使能Port B输入改变中
INTIE : 外部中断屏蔽位
= 0, 禁止外部中断.
= 1,使能外部中断
Bit6:BIT3 :没有使用.置“1”.
GIE : 中断允许总控位
= 0, 禁止所有中断. 对于睡眠唤醒模式的中断事件,MCU将执行SLEEP后的指令。.
= 1, 使能所有没有屏蔽的中断. 对于睡眠唤醒模式的中断事件,MCU将跳转到中断地址(008h)。
注释 : 在中断事件发生时, GIEB被硬件清零并禁止一切中断,所以GIE以及与该中断相关的中断屏蔽位需要重开启。RETFIE 为退出中断程序并重新设置GIE =1允许中断。
2.1.14 INTFLAG (中断标志寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Fh (r/w)
INTFLAG
-
-
-
-
-
INTIF
PBIF
T0IF
T0IF : 溢出中断标志,发生Timer0溢出中断置1, 软件设置清零.
PBIF : Port B输入改变中断标志 interrupt flag. Port B输入改变时置1, 软件设置清零
INTIF : 外部中断标志. 当管脚INT上升沿/下降沿(是上升沿/下降沿由 INTEDG 位 (OPTION<6>)决定)时置1, 软件设置清零.
Bit7:BIT3 : 没有使用,置0
2.1.15 ACC (Accumulator)
Accumulator是一个内部数据转化、指令操作和存放操作结果的存储单元,不能被访问。
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
N/A (r/w)
ACC
Accumulator-
-
-
-
INTIF
PBIF
T0IF
2.1.16 OPTION Register(选项寄存器)
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
N/A (w)
OPTION
*
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
通过OPTION 指令访问
在执行OPTION 指令时候,该数据单元由ACC(累加器) 转化为选项寄存器(OPTION Register). 选项寄存器是一个7位只写寄存器,它的一些控制位主要用来配置与Timer0/WDT 分频器, Timer0, 外部中断选项相关信息。除INTEDG位以外其他位是只写并可以置1。
PS2:PS0 : 分频率选择控制位.
PS2:PS0
Timer0 Rate
WDT Rate
0
0
0
1:2
1:1
0
0
1
1:4
1:2
0
1
0
1:8
1:4
0
1
1
1:16
1:8
1
0
0
1:32
1:16
1
0
1
1:64
1:32
1
1
0
1:128
1:64
1
1
1
1:256
1:128
PSA : 分频器选择位.
= 1, WDT (watch-dog timer).
= 0, TMR0 (Timer0).
T0SE : TMR0触发方式控制位.
= 1, T0CKI脚下降沿触发计数
= 0, T0CKI脚上升沿触发计数.
T0CS : TMR0 时钟源选择控制位.
= 1, 外部T0CKI脚. 当IOST IOB2 = “0”.时,IOB2/T0CKI脚设置为输入
= 0, internal instruction clock cycle.
INTEDG :中断触发方式控制位.
= 1, 中断触发方式为INT脚上升沿出发
= 0, 中断触发方式为INT脚下降沿出发.
Bit7 : 没有使用
2.1.17 IOSTA & IOSTB (I/O口控制寄存器)
地址
名称
B7 B6 B5 B4 B3 B2 B1 B0
N/A (w)
IOSTA
Port A口控制寄存器
N/A (w)
IOSTB
Port B口控制寄存器
通过IOST指令访问
通过指令OST R (05h~06h) i把累加器A的内容加载到I/O控制寄存器,按位将IOSTA,IOSTB设为1表示该脚为输入(高阻抗)、设为“0”时表示该脚为输出. IOST寄存器只写,系统复位以后设置为输入(高阻抗)。
地址
名称
B7
B6
B5
B4
B3
B2
B1
B0
0Bh (r/w)
PDCON
/PDB2
/PDB1
/PDB0
/PDA3
/PDA2
/PDA1
/PDA0
/PDA0 :
= 0, 使能IOA0内部下拉
= 1, 禁止IOA0内部下拉.
/PDA1 :
= 0, 使能IOA1内部下拉
= 1, 禁止IOA1内部下拉.
/PDA2 :
= 0, 使能IOA2内部下拉
= 1, 禁止IOA2内部下拉.
/PDA3 :
= 0, 使能IOA3内部下拉
= 1, 禁止IOA3内部下拉.
/PDB0:
= 0, 使能IOB 0内部下拉
= 1, 禁止IOB0内部下拉
/PDB1:
= 0, 使能IOB1内部下拉
= 1, 禁止IOB1内部下拉
/PDB2:
= 0, 使能IOB2内部下拉
= 1, 禁止IOB2内部下拉.
Bit7 : 一般的读/写位:
2.2 I/O Ports
Port A 和 port B为双向三态I/O 口. Port A为4脚I/O口. Port B 为8脚I/O口. 注意IOB3只能作为输入口。除了IOB3 只作为输入和IOB2需要通过选项寄存器(Option) 的T0CS((OPTION<5>))位控制,所有的I/O的输入/输出方式.有I/O控制寄存器(IOSTA, IOSTB)设置. IOB<7:4> 和 IOB<2:0>有相应的上拉控制位(PHCON 寄存器)来设置使能内部上拉 ,如果设置为输出模式,内部上拉功能会自动关闭;IOA<3:0>和IOB<2:0>有相应的下拉控制位(PDCON寄存器)来设置使能内部下拉,如果设置为输出模式,内部下拉功能会自动关闭;IOB<7:4>和IOB<2:0>有相应的开路控制位(ODCON寄存器)来设置使能开路来设置输出为开路输出.。
IOB<7:0> 有输入改变中断/唤醒功能.它的每个管脚是否具有该功能通过取决于WUCON寄存器的相应位
当EIS(PCON<6>)=1 时, IOB0作为外部中断输入脚,在该模式下IOB0 输入改变中断/唤醒功能i被硬件屏蔽,即使软件已经设置为中断/唤醒功能可用也不可启用该功能。. CONFIGURATION配置能交替设置I/O口的不同功能.,功能交替设置完以后,读的I/O的值为0。.
FIGURE 2.3: Block Diagram of I/O PINs
Pull-down is not hown in the figure
Pull-high/pull-down and open-drain are not shown in the figure
Pull-high/pull-down and open-drain are not shown in the figure
2.3 Timer0/WDT & Prescler 2.3.1 Timer0
Timer0为8位定时/计数器, Timer0 的时钟源可以是内部或外部时钟源(T0CKI pin).
2.3.1.1 使用内部时钟: 定时模式
T0CS(OPTION<5>)=0为定时模式,定时模式在没有预置器的情况下,定时寄存器每个指令周期自动加1,设置TMR0以后,定时器将在两个时钟周期以后开始自增。
2.3.1.2使用外部时钟: 计数模式
T0CS(OPTION<5>)=1为计数模式,是选择通过T0CK管脚的上升或下降沿触发Timer0寄存器的增加由T0SE 位(OPTION<4>)决定,
外在时钟要求与内部时钟(Tosc)同步。同步以后,Timer0实际增加有一个延迟
在没有预置器的情况下,外部时钟输入同样也可以作为预置器输出;T0CKI与内部时钟同步时能方便处理在T2 和 T4周期上的预分频. 因此T0CKI为高或低电平必须要保持两个以上时钟周期才有效。
有预置分频时器,外部时钟输入被异步分频器平分,这种常用来计算波形。因此:因此T0CKI的一个波形周期至少4Tosc才能被 预置器平分。.
2.3.2 Watchdog Timer (WDT)
看门狗定时器(WDT)的运行依赖于芯片里的RC振荡器,无需任何额外电路即能工作。不管时钟OSCI和OSCO管脚是否关闭,它都能运行,如在睡眠模式。在一般操作或睡眠模式情况下,看门狗定时器的溢出都会导致MCU复位同时TO (STATUS<4>)位被清零。.
如WDTE 位(PCON<7>)清零. 看门狗定时器不能工作
在没有预置器时看门狗的溢出为18 ms, 4.5ms, 288ms , 72ms这个时间可以通过SUT<1:0> 设置;
需要看门狗的t溢出周期变长可以通过设置OPTION寄存器的看门狗定时器分频大于1:128.,因此最长的看门狗的t溢出周期为 36.8 秒。.
CLRWDT指令能使WDT和预置器清零,启用看门狗可以防止超时,如果超时MCU能复位。
SLEEP 指令重置WDT和预置器, 启用看门狗就给机器分派了一个最大睡眠时间。
2.3.3 Prescaler(预置器)
有一个8位的向下计数器作为Timer0和看门狗定时器(WDT)的预置器。注意该预置器只能分配给Timer0 或 WDT使用,不能两者同时使用。PSA 位(OPTION<3>) 决定预置器是指派给Timer0还是WDT. PS<2:0> 位(OPTION<2:0>) 配置分频。当作为Timer0的预置器的时候, TMR0会被预置器清零。. 当作为WDT的预置器的时候, CLRWD 指令会清除预置器内容。预置器不能读写. 机器复位,预置器各位全为1。
为了避免机器非正常复位,当Timer0 或 WDT的预置器发生改变的时候,需要执行CLRWDT 或 CLRR TMR0 指令,反之亦然。
FIGURE 2.4: Block Diagram of The Timer0/WDT Prescaler
2.4 Interrupts
FM8P53系统具备有三种中断方式:
1. INT 管脚的外部中断.
2. TMR0 溢出中断.
3. Port B 输入改变中断 (IOB7:IOB0脚).
INTFLAG为中断标志寄存器,决定该寄存器机器所发生的中断状态。.
中断允许总控位GIE (INTEN<7>), 能使所有中断被开放 (GIE=1) 或屏蔽所有中断(GIE=0),每中断能否启用决定INTEN 寄存器同时保证GIE=1
中断发生时GIE 位(在中断发生前GIE 位和该中断相关的中断屏蔽位置1)被硬件清零从而禁止进一步中断(FM8P53不区分中断优先级别),同时下条指令跳到008h后开始执行。中断标志位在中断允许总控位GIE重新置1的时候需要被软件清零以防止重复中断。一个中断标志位(PBIF除外的)会被它的中断事件置1,而不管与它相关的中断屏蔽位是否启用。通过INTFLAG 和INTEN 的相应中位来判断是否发生中断以及中断类型。当通过INT指令发生软中断时,下条指令跳到002后开始执行。
2.4.1 外部中断
外部中断INT管脚上升沿还是下降沿触发由 INTEDG 位 (OPTION<6>)决定),当一个有效的跳变发生时标志位INTIF置1,如INTIE位(INTEN<2>)清零,该中断被屏蔽。
在睡眠之前INTIE 位已被置1,INT管脚可以作为系统睡眠条件。在睡眠之前GIE位已被置1机器唤醒以后会执行中断服务程序,否则会运行睡眠以后的下一条指令。
2.4.2 Timer0 中断
TMR0发生溢出 (FFh à 00h)时T0IF标志位置1 (INTFLAG<0>). T0IE 位(INTEN<0>)清零,该中断被屏蔽.
2.4.3 Port B 输入改变中断
输入改变中断触发时IOB<7:0> PBIF标志位置1 (INTFLAG<1>). PBIE位(INTEN<1>)清零,该中断被屏蔽。
在输入改变中断发生之前,必须读取port B信息
与PortB的管脚相对应的WUBn位 (WUCON<7:0>) i清零或设置为输出或IOB0 脚设置为外部中断输入脚INT 都拥有该功能。PBIE在睡眠之前置1, port B 输入脚改变中断也可以作为睡眠唤醒条件。在睡眠之前GIE位已被置1机器唤醒以后会执行中断服务程序,否则会运行睡眠以后的下一条指令。
2.5 省电模式 (SLEEP)
执行SLEEP 指令以后机器进入省
展开阅读全文