MK7A21P 8Bit Microcontroller with 8bit ADC 概述 MK7A21P 是带 8 位 A/D 转换器的 RISC 高性能 8 位微控制器。它内部包含 2K 字节的一次性可编程只读 存储器、128 字节数据存储器、定时器/计数器、捕捉、中断、LVR(低电压复位)、I/O 口和 PWM 输出。 1. 基本特性 ● ROM:2K×16 bits ● RAM:37×8 bits(特殊寄存器)+ 128×8 bits(一般寄存器) ● 椎栈:8 级 ● 一个指令周期由两个系统时钟组成 ● 复位模式: (a) 上电复位 (b) 低电压复位 (c) RESETB/PC1(如果设置成复位脚位)输入一个负脉冲 (d) 看门狗定时器计数溢出复位 ● 双时钟模式 - 外部 RC 或晶振振荡器 - 内部 4MHz RC 振荡器 ● 定时器/计数器 - TM1:16-bit,捕捉 & 定时器 - TM2:8-bit,PWM(period)& 定时器 - TM3:8-bit,PWM(duty)& 定时器 - TO:TM2(PWM)时钟输出 ● 看门狗定时器:芯片内 WTD 是基于一个内部 RC 振荡器(仅 WDT 使用)。有 8 个周期可供选择。使用 者可通过使用预分频器来延长 WDT 溢出周期。 ● 中断结果: (a) 外部中断(PA7~PA0) (b) 内部定时器/结果计数器中断(TM1~TM3) (c) ADC结束转换中断 ● I/O 口:16 脚位 ● PWM:一个通道 ● ADC:最多 8-bit 及 4 通道,至少 7-bit 精度。它能在转换模式或比较模式下使用 ● 唤醒模式:A 口(PA7~PA0)脚位变化唤醒 1 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 2. 图表 VDD CPU CORE GND ROM 2K x 16 bit RESET RESET OSC 1 RAM 128 Bytes PA 0 ~7 PB 0 ~3 OSC OSC 2 STACK & PC Clock & Timer I/O Port Watchdog Timer A/D Converter PWM output 2 EXT _CLK TO PWM 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 3. 脚位定义 & 管脚分配 18 17 16 15 14 13 12 11 10 1 2 3 4 5 6 7 8 9 PA3/TO PA2 PA1 PA0 PB3/AN3 PB2/AN2 PB1/AN1 PB0/AN0 VSS PA4/EXT_CLK PA5 PA6 PA7 OSC2/PC3 OSC1/PC2 VDD RESETB/PC1 PWM/PC0 封装类型:18 脚 DIP 或 SOP PA3/TO PA2 PB3/AN3 PB2/AN2 PB1/AN1 PB0/AN0 VSS 14 13 12 11 10 9 8 1 2 3 4 5 6 7 PA4/EXT_CLK PA5 OSC2/PC3 OSC1/PC2 VDD RESETB/PC1 PWM/PC0 封装类型:14 脚 DIP 或 SOP 3 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 4. 脚位说明 脚位名称 PA0~2 PA5~7 说 明 I/O 1. I/O口(输入模式下会有上拉电阻) I/O 2. 脚位改变时唤醒(选择) 3. 外部中断输入(选择) 1. I/O口(输入模式下会有上拉电阻) PA3/TO I/O 2. 脚位改变时唤醒(选择) 3. 外部中断输入(选择) 4. TO时钟输出 1. I/O口(输入模式下会有上拉电阻) PA4/EXT_CLK I/O 2. EXT_CLK时钟输入(或捕捉输入) 3. 脚位改变时唤醒(选择) 4. 外部中断输入(选择) PB3/AN3 I/O PB2/AN2 I/O 1. I/O口(输入模式下会有上拉电阻) PB1/AN1 I/O 2. 相似体输入 PB0/AN0 I/O PWM/PC0 I/O RESETB/PC1 I OSC1/PC2 I, I/O OSC2/PC3 O, I/O VDD P 电源输入 VSS P 接地输入 1. I/O口(输入模式下会有上拉电阻) 2. PWM输出 1. 复位脚位 2. 输入口 1. 振荡器输入 2. I/O口(输入模式下会有上拉电阻) 1. 振荡器输出 2. I/O口(输入模式下会有上拉电阻) 4 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 5. 存储器映象 MK7A21P 芯片带有两种存储器,分别是程序存储器(ROM)和数据存储器(RAM)。程序存储器用于存储程 序、数据表及中断向量,它是连续的 2048×16bits,不需要转换到 bank。数据存储器是 165(37+128)×8bits, 它包括特殊功能寄存器和一般的数据存储器。 5.1 程序存储器(ROM) 指令和数据表存储在程序存储器内。程序存储器只能有一个中断向量存在,那意味着所有发生的中断都将跳 到相同的向量。程序会通过中断标记来判断是哪一种中断发生。程序计数器(PC)有 11bit,它能直接寻找 所有 1024×16bits 位置地址。查询数据表可以置于程序存储器的任何地方。 RESET 向量位于 000H,中断向量位于 004H。映象图如下所示: RESET VECTOR 000H INTERRUPT VECTOR 004H PC (11bit) STACK Level 1 STACK Level 2 STACK Level 3 STACK Level 4 STACK Level 5 STACK Level 6 STACK Level 7 STACK Level 8 7FFH 5.2 数据存储器(RAM) 全部的数据存储器集都是 165×8bits,它们包含两种寄存器组。一种是 128×8bits 的一般存储器,另一种是 37×8bits 的特殊寄存器。特殊寄存器的每一字节都用来存储控制数据和操作数据。 数据存储器映象如下所示: 5 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 00H Special Purpose Register 3FH 40H General Purpose RAM BFH 5.2.1 特殊寄存器 Name Addr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG_L RST_DEF LV1 LV0 WDTE CPRT INRC FOSC1 FOSC0 CONFIG_H ADJ6 ADJ5 ADJ4 ADJ3 ADJ2 ADJ1 ADJ0 RTCEN INDF $00 A7 A6 A5 A4 A3 A2 A1 A0 PCL $01 A7 A6 A5 A4 A3 A2 A1 A0 PCH $02 -- -- -- -- -- A10 A9 A8 STATUS $03 -- -- -- TO PD Z DC C FSR $04 D7 D6 D5 D4 D3 D2 D1 D0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 I/O PAD & Control Name Addr PA_DIR $05 IOA7 IOA6 IOA5 IOA4 IOA3 CA2 IOA1 IOA0 PA_DAT $06 DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0 PB_DIR $07 -- -- -- -- IOB3 IOB2 IOB1 IOB0 PB_DAT $08 -- -- -- -- DB3 DB2 DB1 DB0 PC_DIR $09 -- -- -- -- IOC3 IOC2 -- IOC0 PC_DAT $0A -- -- -- -- DC3 DC2 DC1 DC0 Bit 2 Bit 1 Bit 0 Timer 1: 16-bit (Timer & capture) Name Addr Bit 7 Bit 6 Bit 5 6 Bit 4 Bit 3 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC TM1_CTL1 $13 TM1_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 TM1_CTL2 $1F E_CLR -- -- -- -- -- -- -- CLR_CNT $21 CLR_CNT TM1L_LA $14 D7 D6 D5 D4 D3 D2 D1 D0 TM1H_LA $15 D7 D6 D5 D4 D3 D2 D1 D0 TM1L_CNT $16 D7 D6 D5 D4 D3 D2 D1 D0 TM1H_CNT $17 D7 D6 D5 D4 D3 D2 D1 D0 Timer 2: 8-bit, PWM (period) & Timer Name Addr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM2_CTL1 $18 TM2_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 TM2_CTL2 $19 MOD PWM_OS TO_E -- POS3 POS2 POS1 POS0 TM2_LA $1A D7 D6 D5 D4 D3 D2 D1 D0 TM2_CNT $1C D7 D6 D5 D4 D3 D2 D1 D0 Timer 3: 8-bit, PWM (duty) & Timer Name Addr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM3_CTL $1E TM3_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 TM3_LA $20 D7 D6 D5 D4 D3 D2 D1 D0 TM3_CNT $22 D7 D6 D5 D4 D3 D2 D1 D0 Bit 4 Bit 3 IRQ Name Addr Bit 7 Bit 6 Bit 5 Bit 2 Bit 1 IRQM $25 INTM ADCM -- PAM TM3M TM2M/PWM IRQF $26 -- ADCF -- PAF TM3F TM2F/PWM TM1M/CPT TM1F/CPT Bit 0 --- ADC control Name Addr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 AD_CTL1 $29 EN -- MODE -- -- -- CHSEL1 CHSEL0 AD_CTL2 $2A RSUT -- -- -- -- -- CKSEL1 CKSEL0 AD_CTL3 $2B -- -- -- -- -- PBSEL2 PBSEL1 PBSEL0 AD_DAT $2D D7 D6 D5 D4 D3 D2 D1 D0 Other Name Addr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PA_PLU $31 UA7 UA6 UA5 UA4 UA3 UA2 UA1 UA0 PB_PLU $33 -- -- -- -- UB3 UB2 UB1 UB0 PC_PLU $35 -- -- -- -- UC3 UC2 -- UC0 7 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC PA_INTE $3A EN7 EN6 EN5 EN4 EN3 EN2 EN1 EN0 WDT_CTL $3D WDTEN -- -- -- -- PRE2 PRE1 PRE0 TAB_BNK $3E -- -- -- -- -- BNK2 BNK1 BNK0 SYS_CTL $3F CLKS -- -- -- -- -- STP1 STP0 < 注 > “—”:表示未使用 5.2.2 结构寄存器 Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG_L RST_DEF LV1 LV0 WDTE CPRT INRC FOSC1 FOSC0 - Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 CONFIG_H ADJ6 ADJ5 ADJ4 ADJ3 ADJ2 ADJ1 ADJ0 EXT_CLK ● Bit15~9(ADJ6~0) :用于校准内部RC振荡器 ● Bit8(EXT_CLK):EXT_CLK 输入 0:EXT_CLK(PA4)脚位是普通I/O脚位 1:EXT_CLK(PA4)脚位是定时器源输入 & PA4输入 ● Bit7(RST_DEF):RESETB脚位定义 0:RESETB是普通输入脚位 1:RESETB是系统复位脚位 ● Bit6~5(LV1~0) :设置低电压复位(LVR)的复位电压级别 Bit6 Bit5 LV1 LV0 0 0 4V 0 1 Unimplemented 1 0 2.3V 1 1 Don’t use Detect voltage < 注 > 掉电电压会受到过程及温度的影响,因此列表中的电压会存在一些误差。 ● Bit4(WDTE) :看门狗定时器使能/禁止 0:WDT 禁止 1:WDT 使能 ● Bit3(CPRT):ROM 密码保护位 0:开 1:关 8 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC ● Bit2~0(INRC,FOSC1~0):OSC类型及系统时钟选择 Bit2 Bit1 Bit0 INRC FOSC1 FOSC0 0 0 0 LS (low speed) System clock=32~200KHz 0 0 1 NS (Normal speed) System clock=200K~10MHz 0 1 0 HS (high speed) System clock=10~20MHz 0 1 1 External RC System clock=32K ~ 10MHz 1 0 0 LS &Internal RC 1 0 1 NS &Internal RC 1 1 0 HS & Internal RC 1 1 1 Internal RC OSC Type Resonance Frequency 1. Dual clock mode LS & 4MHz 2. Initial system clock=4MHz 1. Dual clock mode NS & 4MHz 2. Initial system clock=4MHz 1. Dual clock mode HS & 4MHz 2. Initial system clock=4MHz 1. System clock=4MHz 2. OSC1 & OSC2 work as I/O ports 6. 功能描述 此芯片提供许多功能,包括定时器,WDT,PWM,ADC,捕捉,中断,数据表位置,复位,程序计数器及 STATUS 寄存器。我们将会在下面详细描述。 6.1 I/O口 该芯片有 3 个 I/O 口用于数据输入及输出,每一个 I/O 口有不同的功能。A 口可通过选择寄存器实现外部中断, EXT_CLK 时钟输入或捕捉输入。B 口具有 ADC 模拟输入功能。C 口带有外部 RC 振荡器输入,PWM 系统复 位输入(复位功能)或输出功能。 6.1.1 Port A A 口有 3 个寄存器可设置 8 个 I/O 口,分别是 PA_DIR,PA_DAT,PA_PLU。A 口的每一脚位都可做为外部中 断输入或一般 I/O 口。欲了解如何将这些脚位设置为外部中断,请参考章节 6.7。PA4 脚位带多功能,使用者 需先定义 8 位结构寄存器。 A. PA_DIR($05H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PA_DIR IOA7 IOA6 IOA5 IOA4 IOA3 IOA2 IOA1 IOA0 ● Bit7~0(IOA7~0) :定义每一个脚位是输入口还是输出口 0:输出 1:输入 9 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC B. PA_DAT($06H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PA_DAT DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0 ● Bit7~0(DA7~0) :数据缓冲器 C. PA_PLU($31H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PA_PLU UA7 UA6 UA5 UA4 UA3 UA2 UA1 UA0 ● Bit7~0(UA7~0) :上拉使能/禁止 0:上拉禁止 1:上拉使能 6.1.2 B 口 B 口有 3 个寄存器可设置 4 个 I/O 口,分别是 PB_DIR,PB_DAT,PB_PLU。B 口的每一脚位都可设置为 ADC 模拟信号输入或一般 I/O 口。欲了解如何使用 ADC 功能,请参考章节 6.8。当 B 口被设置为输入模式时,使用 者可设置上拉。 A. PB_DIR($07H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PB_DIR -- -- -- -- IOB3 IOB2 IOB1 IOB0 ● Bit3~0(IOB3~0) :定义每一个脚位是输入口还是输出口 0:输出 1:输入 B. PB_DAT($08H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PB_DAT -- -- -- -- DB3 DB2 DB1 DB0 ● Bit3~0(DB3~0) :数据缓冲器 C. PB_PLU($33H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PB_PLU -- -- -- -- UB3 UB2 UB1 UB0 ● Bit3~0(UB3~0) :上拉使能/禁止 0:上拉禁止 1:上拉使能 6.1.3 C 口 C 口有 3 个寄存器可设置 4 个 I/O 口,分别是 PC_DIR,PC_DAT,PC_PLU。PC0(PWM)可被设置为 PWM 输出。欲了解如何使用 PWM,请参考章节 6.3。当 PC3,PC2,PC0 被设置为输入模式时,使用者可设置上 拉。CONFIG 寄存器可设置 PC1(RESETB)为系统复位(低电压复位)信号输入脚位。通常情况下,PC2(OSC1) 和 PC3(OSC2)是外部振荡器脚位,只有选择内部 RC 模式时,PC2 和 PC3 才是一般 I/O 口。 10 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC A. PC_DIR($09H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PC_DIR -- -- -- -- IOC3 IOC2 -- IOC0 ● Bit3,2,0(IOC3,2,0):定义每一个脚位是输入口还是输出口 0:输出 1:输入 < 注 > IOC1 仅是输入 B. PC_DAT($0AH): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PC_DAT -- -- -- -- DC3 DC2 DC1 DC0 ● Bit3,2,0(DC3,2,0) :数据缓冲器 < 注 > DC1 仅是输入数据 C. PC_PLU($35H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 PC_PLU -- -- -- -- UC3 UC2 -- UC0 ● Bit3,2,0(UC3,2,0) :上拉使能/禁止 0:上拉禁止 1:上拉使能 6.2 定时器/结果计数器(TM1,TM2,TM3) MK7A21P提供3个倒计时定时器/计数器和1个看门狗定时器。通过设置每一个定时器控制寄存器,计数器的时钟 源可以是系统时钟,也可以是外部时钟。TM1是16位计数器,TM2和TM3是8位计数器。所有定时器带自动重复 下载功能,TM1带捕捉功能,TM2/TM3组合后可实现PWM功能。寄存器详细设置及图表如下所示: Latch Buffer EXT_CLK Crystal mode OSC1 & 2 RC mode OSC1 & 2 Timer reload MUX Prescaler Capture counter latch Counter Register System clock IRQ Instruction read out Clock Source Select 11 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.2.1 TM1 TM1 是 16 位定时器/计数器,有 5 个寄存器设置他的属性。欲了解如何使用 TM1 捕捉功能,请参考章节 6.4。 A. TM1_CTL1 ($13H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM1_CTL1 TM1_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 ● Bit7(TM1_EN):定时器1(TM1)使能/禁止 0:TM1禁止 1:TM1使能 ● Bit6(WR_CNT):锁存器数据写到计数器寄存器使能/禁止 0:锁存器数据写到计数器寄存器禁止 1:锁存器数据写到计数器寄存器使能 < 注 > 此位只有在新定时器/计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当 定时器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次,它与此位的状态无 关。 ● Bit5~4(SUR1~0):TM1时钟源选择位 Bit5 Bit4 SUR1 SUR0 0 0 EXT_CLK (PA4) 0 1 晶振模式 OSC1 1 0 RC 模式(外部 & 内部 RC)OSC1 1 1 时钟源是系统时钟,捕捉输入是 PA4 TM1时钟源 < 注 > SUR1~0 定义 TM1 时钟源。如果 TM1 在捕捉功能下使用,则 SUR1~0 必须设置为(1,1),这样 就能记录从 PA4 脚位开始的数值,时钟源是系统时钟。如果捕捉正在运行,则 TM1 的计数器数据将会被 锁定 TM1L_LA 及 TM1H_LA。 ● Bit3(EDGE):TM1时钟源边沿控制位 当TM1在定时器模式下使用 0:时钟从低电平到高电平时,定时器加1 1:时钟从高电平到低电平时,定时器加1 当TM1在捕捉模式下使用 0:当EXT_CLK(PA4)从低电平到高电平时,保存TM1计数器寄存器到锁存器 1:当EXT_CLK(PA4)从高电平到低电平时,保存TM1计数器寄存器到锁存器 12 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC ● Bit2~0(PRE2~0) :设置TM1预分频率(定时器 & 捕捉) Bit2 Bit1 Bit0 PRE2 PRE1 PRE0 0 0 0 1:1 0 0 1 1:2 0 1 0 1:4 0 1 1 1:8 1 0 0 1:16 1 0 1 1:32 1 1 0 1:64 1 1 1 1:128 TMR1 Prescaler rate B. TM1_CTL2 ($1FH): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM1_CTL2 ENC -- -- -- -- -- -- -- ● Bit7(TM1_CTL1):捕捉计数器自动清除 0:自动清除计数器(硬体) 1:通过软体清除计数器(设置CLR_CNT) C. CLR_CNT ($21H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CLR_CNT CLR_CNT -- -- -- -- -- -- -- ● 写该寄存器来清除捕捉计数器,这是边沿触发,因而写0或1都是一样的。 < 注 > 如果 TM1_CTL2 Bit 7 被设置为 1,CLR_CNT 没有写数据,则计数器将会保留不会被清 0。 D. TM1L_LA/TM1H_LA and TM1L_CNT/TM1H_CNT Register ($14H, 15H, 16H, 17H) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM1L_LA D7 D6 D5 D4 D3 D2 D1 D0 TM1H_LA D7 D6 D5 D4 D3 D2 D1 D0 TM1L_CNT D7 D6 D5 D4 D3 D2 D1 D0 TM1H_CNT D7 D6 D5 D4 D3 D2 D1 D0 < 注 > TM1L_CNT & TM1H_CNT 两个寄存器为只读寄存器 6.2.2 TM2(或 PWM period) TM2 是 8 位定时器/计数器,有 4 个寄存器设置他的属性。TM2 可当作 PWM period 使用,与 TM3 一起实现 PWM 波形。 13 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC A. TM2_CTL1 ($18H): Register TM2_CTL1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM2_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 ● Bit7(TM2_EN):定时器2(TM2)使能/禁止 0:TM2禁止 1:TM2使能 ● Bit6(WR_CNT):锁存器数据写到计数器寄存器使能/禁止 0:锁存器数据写到计数器寄存器禁止 1:锁存器数据写到计数器寄存器使能 < 注 > 此位只有在新定时器/计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当 定时器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次,它与此位的状态无 关。 ● Bit5~4(SUR1~0):TM2时钟源选择位 Bit5 Bit4 SUR1 SUR0 0 0 EXT_CLK (PA4) 0 1 晶振模式 OSC1 1 0 RC 模式(外部 & 内部 RC)OSC1 1 1 不使用 TM2时钟源 ● Bit3(EDGE):TM2时钟源边沿控制位 0:时钟从低电平到高电平时,定时器加1 1:时钟从高电平到低电平时,定时器加1 ● Bit2~0(PRE2~0) :设置TM2预分频率 Bit2 Bit1 Bit0 PRE2 PRE1 PRE0 0 0 0 1:1 0 0 1 1:2 0 1 0 1:4 0 1 1 1:8 1 0 0 1:16 1 0 1 1:32 1 1 0 1:64 1 1 1 1:128 TM2 Prescaler rate 14 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC B. TM2_CTL2 ($19H): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM2_CTL2 MOD PWM_OS TO_E -- POS3 POS2 POS1 POS0 ● Bit7(MOD):模式选择位 0:TM2在定时器模式下工作 1:TM2在PWM模式下工作 ● Bit6(PWM_OS):PWM输出状态选择位 0:初始输出状态是高电平,当TM3定时器溢出时将变换为低电平 1:初始输出状态是低电平,当TM3定时器溢出时将变换为高电平 ● Bit5(TO_E):定时器输出(TO)使能/禁止(脚位与PA3共享) 0:设置该脚位为PA3一般I/O脚位 1:设置该脚位为TO(定时器输出脚位,频率是TM2(PWM)计数器频率/2) < 注 > 在 TO 信号输出前,PA3 必须设置为输出口 ● Bit3~0(POS3~0):PWM预分频率选择位(仅在PWM模式下激活) Bit3 Bit2 Bit1 Bit0 POS3 POS2 POS1 POS0 0 0 0 0 1:1 0 0 0 1 1:2 0 0 1 0 1:3 . . . . . . . . . . 1 1 1 0 1:15 1 1 1 1 1:16 PWM Prescaler rate 这些位控制当有多少次 PWM 波形输出将会出现一次 PWM 中断。 C. TM2_LA & TM2_CNT ($1AH, 1CH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM2_LA D7 D6 D5 D4 D3 D2 D1 D0 TM2_CNT D7 D6 D5 D4 D3 D2 D1 D0 < 注 > TM2_CNT 寄存器为只读寄存器 6.2.3 TM3(或 PWM duty) TMR3 是 8 位定时器/计数器,有 3 个寄存器设置它的属性。TMR3 可当作 PWM duty 使用,与 TM2 共同控制 实现 PWM 波形。 A. TM3_CTL ($1EH): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM3_CTL TMR3_EN WR_CNT SUR1 SUR0 EDGE PRE2 PRE1 PRE0 15 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC ● Bit7(TM3_EN):TMR3使能位 0:TM3禁止 1:TM3使能 < 注 > 当 TM2_CTL2 被设置为 PWM 模式,此位将被抑制。TM3 就会成为 PWM 波形的占空比计数器。 ● Bit6(WR_CNT):锁存器数据写到计数器寄存器使能/禁止 0:锁存器数据写到计数器寄存器禁止 1:锁存器数据写到计数器寄存器使能 < 注 > 此位只有在新定时器计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当定时 器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次,它与此位的状态无关。 ● Bit5~4(SUR1~0):TM3时钟源选择位 Bit5 Bit4 SUR1 SUR0 0 0 EXT_CLK (PA4) 0 1 晶振模式 OSC1 1 0 RC 模式(外部及内部 RC)OSC1 1 1 不使用 TM3时钟源 ● Bit3(EDGE):TM3时钟源边沿控制位 0:时钟从低电平到高电平时,定时器加1 1:时钟从高电平到低电平时,定时器加1 ● Bit2~0(PRE2~0) :预分频器分配脚位 Bit2 Bit1 Bit0 PRE2 PRE1 PRE0 0 0 0 1:1 0 0 1 1:2 0 1 0 1:4 0 1 1 1:8 1 0 0 1:16 1 0 1 1:32 1 1 0 1:64 1 1 1 1:128 TM3 Prescaler rate B. TM3_LA & TM3_CNT ($20H, 22H) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TM3_LA D7 D6 D5 D4 D3 D2 D1 D0 TM3_CNT D7 D6 D5 D4 D3 D2 D1 D0 < 注 > TM3_CNT寄存器为只读寄存器 16 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.3 PWM(脉冲宽度调制) PWM 波形由 TM2(period)和 TM3(duty)组合控制。通过设置寄存器,这两个定时器可用作一般定时器 或 PWM 波形计数器。设置步骤如下例所示: ORG 000H LGOTO MAIN ; 跳到主程序 ORG 004H ; 中断程序开始向量 BC IRQF,b2 ; 清除PWM中断标记 ; 使用者的中断程序 IRETI ORG 050H MAIN: MOVLA B'XXXXXXX0' ; PC0(PWM)设置为输出 MOVAM PC_DIR ; 设置PC输出 MOVLA B'01010000' MOVAM TM2_CTL1 MOVLA B'10000000' MOVAM TM2_CTL2 ; 设置TM2为PWM模式,POS为1:1 MOVLA 0AH ; period是0AH MOVAM TM2_LA ; 设置TM2_LA=0AH,WR_CNT bit=1,数据将写到TM2_CNT MOVLA B'01010000' MOVAM TM3_CTL ; 设置TM3 WR_CNT=1,时钟源是晶振模式OSC1 MOVLA 05H ; duty是05H MOVAM TM3_LA ; 设置TM3_LA =05H,WR_CNT bit=1,数据将写到TM3_CNT CLR IRQF ; 使能IRQM前,清除IRQF MOVLA B'10000100' MOVAM IRQM ; 使能INTM & TM2M中断 BC TM2_CTL1,b6 ; TM2 WR_CNT=0 BC TM3_CTL ,b6 ; TM3 WR_CNT=0 BS TM2_CTL1,b7 ; 使能PWM,PC0开始输出 ; 设置TM2为自动写,时钟源是晶振模式OSC1 17 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC System Clock PC0 TM3 counter (Duty) 5 TM2 counter (Period) 5 A 5 A PWM 波形 6.4 捕捉 捕捉功能提供波形测量,设置步骤如下所示: (a) 使用者首先应设置 CONFIG 寄存器,设置 EXT_CLK(bit 8)为“1”,使 PA4 为捕捉输入脚位。 (b) 设置 TM1 预分频率和捕捉条件(极性和边沿) ,然后使能捕捉中断。 (c) 捕捉中断发生,捕捉波形的长度将会被锁定在 TM1L_LA 和 TM1H_LA。 示例 1:捕捉一个周期(2 个上升边沿)和使用中断(ENC=0,自动清除计数器) ORG 000H LGOTO MAIN ; 跳到主程序 ORG 004H ; 中断程序开始向量 BC IRQF,b1 ; 清除TM1中断标记 COM TM1L_LA,a ; 读低字节数据(FFH – 低寄存器数据) MOVAM 40H ; 保存数据到RAM COM TM1H_LA,a ; 读高字节数据(FFH – 高寄存器数据) MOVAM 41H ; 保存数据到RAM MOVM TM1H_LA,a IRETI ORG 050H MAIN: MOVLA B'XXX1XXXX' MOVAM PA_DIR MOVLA B'00110001' MOVAM TM1_CTL ; 捕捉模式使能,TM1预分频率1:2. CLR IRQF ; 使能IRQM前,清除IRQF MOVLA B'10000010' MOVAM IRQM ; 中断功能使能,TM1中断使能 BS TM1_CTL,b7 ; 开始捕捉功能 ; 设置PA4输入 18 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC System Clock PA4 TM1 counter t 示例 2:捕捉一个周期(2 个上升边沿) ,不使用中断(ENC=0,自动清除计数器) MOVLA B'XXX1XXXX' MOVAM PA_DIR CLRM IRQF MOVLA B'10110000' MOVAM TM1_CTL Loop: ; 设置PA4输入 ; 捕捉模式使能,TM1预分频率1:1 ; 等待捕捉标记使能循环 BTMSC IRQF,b1 ; 判断此位来知道标记被设置还是未被设置 LGOTO Cap_part ; 如果标记是“1”则跳到读预下载寄存器 LGOTO Loop ; 如果标记是“0”则跳到Loop Cap_part: ; 捕捉后读预下载寄存器 CLR IRQF COM TM1L_LA,a ; 读低字节数据(FFH – 低寄存器数据) MOVAM 40H ; 保存数据到RAM COM TM1H_LA,a ; 读高字节数据(FFH – 高寄存器数据) MOVAM 41H ; 保存数据到RAM LGOTO Loop 示例 3:捕捉一个脉冲宽度及使用中断(ENC=0,自动清除寄存器) ORG 000H LGOTO MAIN ORG 004H BC IRQF,b1 ; 清除TM1中断标记 BTSC TM1_CTL,b3 ; 判断此位来知道哪一边沿发生 LGOTO Fall_edge ; 如果现在是上升边沿中断,跳到上升_边沿部分去设置控制寄 存器来调节上升_下降边沿长度。如果现在是下降边沿中断,读 数据 BS TM1_CTL,b3 IRETI Fall_edge: 19 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC BC TM1_CTL,b3 ; PA4上升边沿设置控制寄存器来捕捉中断发生。 COM TM1L_LA,a ; 读低字节数据(FFH – 低寄存器数据) MOVAM 40H ; 保存数据到RAM COM TM1H_LA,a ; 读高字节数据(FFH – 高寄存器数据) MOVAM 41H ; 保存数据到RAM IRETI ORG 050H MAIN: MOVLA B'XXX1XXXX' MOVAM PA_DIR MOVLA B'00110000' MOVAM TM1_CTL ; 捕捉模式使能。PA4上升边沿捕捉中断服务。TM1预分频率1:1 CLR IRQF ; 使能IRQM前,清除IRQF MOVLA B'10000010' MOVAM IRQM BS TM1_CTL,b7 ; 设置PA4输入 ; 中断功能使能,TM1中断使能 ; 使用者的程序 System Clock PA4 TM1 counter t 示例 1:捕捉一个周期(1 个上升边沿)及使用中断(ENC=1,通过软体清除计数器) ORG 000H LGOTO MAIN ; 跳到主程序 ORG 004H ; 中断程序开始向量 BC IRQF,b1 ; 清除TM1中断标记 MOV TM1H_LA,a ; 读高字节数据 SUB OLD_HDATA,a ; Old_hdata – New_hdata(a) MOVAM SUM_H ; 保存高字节长度 SUB LENGTH,a ; 检查高字节长度=设置数值?(检查错误) BTSS STATUS,b2 ; Yes:完成,No:继续计数器 LGOTO INTR MOV TM1L_LA,a ; 读低字节数据 20 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC SUB OLD_LDATA,a ; Old_ldata – New_ldata(a) MOVAM SUM_L ; 保存低字节长度 BTSS STATUS,b0 ; 检查未有借出(C=1?) DEC SUM_H,m ; 如果C=0(借出) ,SUM_H – 1 INTR: IRETI ORG 050H MAIN: MOVLA B'XXX1XXXX' MOVAM PA_DIR MOVLA B'00110000' MOVAM TM1_CTL ; 捕捉模式使能,TM1预分频率1:1 CLR IRQF ; 使能IRQM前,清除IRQF MOVLA B’10000010’ MOVAM IRQM ; 中断功能使能前,TM1中断使能 MOV CLR_CNT,m ; 清除计数器 MOV TM1L_LA,a MOVAM OLD_LDATA MOV TM1H_LA,a MOVAM OLD_HDATA ; 保存高字节数据到寄存器 MOVLA 05H ; 设置捕捉长度=05 MOVAM LENGTH ; 保存长度到寄存器 BS TM1_CTL,b7 ; 开始捕捉功能 ; 设置PA4输入 ; 保存低字节数据到寄存器 System Clock T = 0535H PA4 Check high_byte < 05H IRQ 21 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.5 WDT(看门狗定时器) WDT是防止软体故障及跳过含有不可预知结果的未知页面的定时器。WDT时钟源是一个独立的内部RC振荡器。 此定时器会受温度、电压及不同产品批号的影响。 A. WDT_CTL ($3DH): Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 WDT_CTL WDTEN -- -- -- -- PRE 2 PRE 1 PRE0 ● Bit7(WDTEN):看门狗定时器使能位 0:WDT禁止 1:WDT使能 ● Bit2~0(PRE2~0) :设置预分频率。由于是RC OSC,所有的数据不是精确数据 6.6 Bit2 Bit1 Bit0 PRE2 PRE1 PRE1 0 0 0 20mS 0 0 1 40mS 0 1 0 80mS 0 1 1 160mS 1 0 0 320mS 1 0 1 640mS 1 1 0 1.28S 1 1 1 2.56S WDT Prescaler rate 复位 以下列出了4种会引起复位的情况。掉电将会引起MK7A21P复位,检测电压依照CONFIG寄存器的bit6~bit5。这 样能在供电不足的环境下保护芯片,最后两种情况我们称之为热复位。不同的复位都会影响寄存器和数据存储器。 TO 和 PD 位用来决定复位的类型。 (1) 上电复位 (2) 低电压复位(LVR) (3) RESETB脚位复位(输入一个负脉冲) (4) WDT定时器溢出复位 22 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC System Clock Power on reset Synchronize with ripple counter Low voltage reset RESETB pin Delay for setup time RESET Watchdog Timer Internal specific RC OSC WDT overflow 系统复位图表 < 注 > 看门狗设置时间为大约20ms,由于电源电压、进程及温度差异,在时间设置上会有一些偏差。 不同复位条件下的默认值 Address Name Cold Reset Warm Reset N/A Accumulator xxxx xxxx pppp pppp 00H INDF 0000 0000 0000 0000 01H PCL 0000 0000 0000 0000 02H PCH - - - - -000 - - - - -000 03H STATUS 0001 1xxx 0001 1xxx 04H FSR xxxx xxxx pppp pppp 05H PA_DIR 1111 1111 1111 1111 06H PA_DAT xxxx xxxx pppp pppp 07H PB_DIR xxxx 1111 xxxx 1111 08H PB_DAT xxxx xxxx xxxx pppp 09H PC_DIR xxxx 11x1 xxxx 11x1 0AH PC_DAT xxxx xxxx xxxx ppxp 13H TM1_CTL1 0000 0000 0000 0000 14H TM1L_LA 1111 1111 1111 1111 15H TM1H_LA 1111 1111 1111 1111 16H TM1L_DAT 1111 1111 1111 1111 17H TM1H_ DAT 1111 1111 1111 1111 18H TM2_CTL1 0000 0000 0000 0000 23 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 19H TM2_CTL2 0000 0000 0000 0000 1AH TM2_LA 1111 1111 1111 1111 1CH TM2_DAT 1111 1111 1111 1111 1EH TM3_CTL 0000 0000 0000 0000 1FH TM1_CTL2 0000 0000 0000 0000 20H TM3_LA 1111 1111 1111 1111 22H TM3_DAT 1111 1111 1111 1111 25H IRQM 00x0 000x 00x0 000x 2 26H IRQF x0x0 000x x0x0 000x 29H AD_CTL1 0x0x xx00 0x0x xx00 2 2AH AD_CTL2 0xxx xx00 0xxx xx00 2 2BH AD_CTL3 xxxx x000 xxxx x000 2 2DH AD_DAT 0000 0000 0000 0000 31H PA_PLU 0000 0000 0000 0000 33H PB_PLU 0000 0000 0000 0000 35H PC_PLU 0000 0000 0000 0000 3AH PA_INTE 0000 0000 0000 0000 3DH WDT_CTL 1xxx x111 1xxx x111 3EH TAB_BNK xxxx x000 xxxx x000 3FH SYS_CTL 0xxx xx00 0xxx xx00 x:未知的; p:原来的数值; ?:依据条件的数值;-:不执行,清“0” 6.7 中断 MK7A21P提供8种外部中断(PA0~7) ,3种内部定时器/结果计数器中断和1种A/D转换器中断。IRQM和IRQF 寄存器用来控制或判断所有中断的请求状态。外部中断由PA0~7的信号键触发,相关的中断请求标记(PAF; IRQF的bit 4)将被设置。通过设置A/D转换器请求标记(ADCF;IRQF的bit 6) ,A/D转换器中断被初始化,通 过结束A/D转换,中断发生。 IRQM用来使能/禁止中断,IRQF用来指出是哪一种中断发生。如果特殊IRQM不能使能则硬体中断将不会发生。 但不管IRQM使能或禁止,IRQF都会有状态反应。例如,使用者使能TM1来开始计数,如果IRQM的bit 1使能, 当定时器溢出,硬体中断将会发生,IRQF的bit 1将被设置,与此同时,程序将跳到中断向量。使用者应清除 中断服务程序中的IRQF,否则中断将完全不工作。另一种情况是如果IRQM的bit 1禁止,当定时器溢出时,中 断将不会产生,但IRQF的bit 1仍被设置,程序将会跳到中断向量。 A. IRQM ($25H) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IRQM INTM ADCM -- PAM TM3M TM2M/PWM TM1M/CAPT -- 24 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC ● Bit7(INTM):球形使能脚位 0:禁止,所有中断屏蔽 1:使能,所有中断不屏蔽 当中断正在进行时,INTM将会被设置为“0”以防止其他中断的发生。当中断完成后,IRETI指令将 会设置INTM为“1”。 ● Bit6(ADCM) :ADC 结束转换(EOC)中断使能 0:禁止中断 1:使能中断 ● Bit4(PAM):PA 中断使能 0:禁止中断 1:使能中断 ● Bit3(TM3M) :TM3 中断使能 0:禁止中断 1:使能中断 ● Bit2(TM2M/PWM) :TM2/PWM 中断使能 0:禁止中断 1:使能中断 ● Bit1(TM1M/CAPT) :TM1/捕捉中断使能 0:禁止中断 1:使能中断 B. IRQF ($26H) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IRQF -- ADCF -- PAF TM3F TM2F/PWM TM1F/CAPT -- ● Bit6(ADCF):ADC 结束转换中断请求标记 0:结束转换中断请求关 1:结束转换中断请求开 ● Bit4(PAF):PA0~7 中断请求标记 0:PA 中断请求关 1:PA 中断请求开 ● Bit3(TM3F) :TM3 中断请求标记 0:TM3 溢出中断请求关 1:TM3 溢出中断请求开 ● Bit2(TM2F/PWM) :TM2/PWM 中断请求标记 0:TM2 溢出中断请求关 1:TM2 溢出中断请求开 25 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC ● Bit1(TM1F/CAPT) :TM1/捕捉中断标记 0:TM1 溢出或捕捉中断请求关 1:TM1 溢出或捕捉中断请求开 6.7.1 外部中断/唤醒功能 A口(PA)提供外部中断和唤醒功能。当芯片不处于睡眠模式,PA输入信号将做为外部中断工作。当外部中断 发生,程序将会跳到004H(中断向量) 。如果芯片处于睡眠模式,PA输入信号将做为唤醒功能工作。当唤醒信 号输入,芯片将会让系统时钟首先工作,然后等待唤醒定时器(由WDT_CTL寄存器$3PH设置)溢出,再之后, 程序将跳到004H。以下流程图说明如何设置A口作为外部中断或唤醒功能工作。 Set PA4/EXT-CLK pin as Normal I/O pin Set PA0~7 is input port Read PA_DAT to Shift the data to buffer Enable specific PA_INTE bit Clear PAF of IRQF Enable PAM (bit4 of IRQM) Enable INTM of IRQM No Pin change INT occurred ? Ye s Interrupt Rutine 26 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.8 ADC MK7A21P提供4个通道和8位协议A/D转换器。A/D转换器包含4个寄存器,分别是AD_CTL1(29H),AD_CTL2 (2AH),AD_CTL3(2BH)及AD_DAT(2DH)。 A. AD CTL1 ($29H) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 AD_CTL1 EN -- MODE -- -- -- CHSEL1 CHSEL0 ● Bit7(EN):ADC 使能位 0:ADC 禁止 1:ADC 使能 < 注 > 当结束转换,此脚位将会被设置为“0” ● Bit5(MODE):ADC 模式选择位 0:ADC 通道作为 A/D 转换工作 1:ADC 通道作为比较仪工作 < 注 > (a)如果此位是“1” ,Vin 数据将会与 AD_DAT 作比较,结果被存储在 AD_CTL2 Bit7。如果此位是 “0” ,Vin 被转换成 8 位数位数据并保存在 AD_DAT 寄存器。 (b)Vin:ADC 通道的输入电压 ● Bit1~0(CHSEL1~0) :ADC 输入通道选择位 Bit1 Bit0 CHSEL1 CHSEL0 0 0 Channel 0, PB0 0 1 Channel 1, PB1 1 0 Channel 2, PB2 1 1 Channel 3, PB3 Input channel B. AD_CTL2 ($2AH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 AD_CTL2 RSUT -- -- -- -- -- CKSEL1 CKSEL0 ● Bit7(RSUT):比较模式结果位 0:Vin < AD_DAT 1:Vin ≧ AD_DAT ● Bit1~0(CKSEL1~0):ADC 转换时钟源选择位 27 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC Bit1 Bit0 CKSEL1 CKSEL0 0 0 System clock X2 0 1 System clock X8 1 0 System clock X32 1 1 System clock X128 Conversion clock < 注 > 转换时钟决定转换率和精度。如果选择的是快速转换时钟,那将减少精度。如果使用者想得到更精确 的 A/D 数据,推荐使用慢速。 C. AD_CTL3 ($2BH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 AD_CTL3 -- -- -- -- -- PBSEL2 PBSEL1 PBSEL0 ● Bit2~0(PBSEL2~0):ADC 通道输入模式选择位 Bit2 Bit1 PBSEL2 Bit0 PB3~PB0 configurations PBSEL1 PBSEL0 0 0 0 PB3, PB2, PB1, PB0 0 0 1 PB3, PB2, PB1, AN0 0 1 0 PB3, PB2, AN1, AN0 0 1 1 PB3, AN2, AN1, AN0 1 X X AN3, AN2, AN1, AN0 < 注 > 最小化能耗,所有 I/O 脚在进入睡眠模式前都会被小心控制 D. AD_DAT (2DH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 AD_DAT D7 D6 D5 D4 D3 D2 D1 D0 < 注 > 此寄存器有两种不同的用法,如果在比较模式下工作,这些数据将会与 ADC 通道输入电压相比较。在 ADC 模式下,寄存器存储 ADC 转换数据。 28 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 示例: LOOP1 BTSC AD_CTL1,b7 ; 确认A/D是否完成? LGOTO LOOP1 NOP . . NOP ; 等待16 insyruction次 ; BC IRQF,b6 ; 清除A/D标记 ; MOVLA 03H MOVAM AD_CTL1 ; set 设置PB3为A/D输入 ; MOVAM AD_CTL2 ; 设置A/D clk=sys_clk/128; MOVLA 04H MOVAM AD_CTL3 ; 设置PB0~PB3为模拟输入 ; BS AD_CTL1,b7 ; 开始A/D转换 ; CHECK_FLAG BTSS IRQF,b6 ; 确认A/D标记是否等于1? LGOTO CHECK_FLAG MOVLA AD_DAT,a MOVAM 40H ; 读A/D数据到RAM 29 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC START No Bit 7 of AD_CTL1 =0? Yes NOP NOP …… NOP * Wait 16 instruction cycles Clear Bit 6 of IRQF (Clear AD Flag) Set AD Register (AD_CTL1~3) Bit 7 of AD_CTL1=1 (Start AD Covert) No Bit 6 of IRQF =1? (AD end of converting) Yes Read AD Data Fig. ADC Setting Flow 30 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.9 表格查询功能 MK7A21P提供表格查询功能。查询表格可以置于ROM空间的任何位置。TABRDL指令是读ROM表格的低字节。 TABRDH是读高字节。TAB_BNK寄存器用于定义表格位置(3+8=11bits-address bit,211=2Kbytes-data byte) 的高位(MSB)地址。 6.9.1 TAB_BNK ($3EH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TAB_BNK -- -- -- -- -- BANK2 BANK1 BANK0 ● Bit2~0(BANK2~0):高字节表格位置选择位 Bit2 Bit1 Bit0 BANK2 BANK1 BANK0 0 0 0 000 XXXX XXXX Table location 0 0 1 001 XXXX XXXX Table location 0 1 0 010 XXXX XXXX Table location . . . . 1 1 1 111 XXXX XXXX Table location BANK select 6.9.2 表格查询举例程序 以下程序的主要功能是表格查询,TABRDL和TABRDH的结果将会是55H和AAH(地址是0704H)。 #DEFINE TAB_BNK 3EH ; 定义地址,RAM 的 3EH 定义为 TAB_BNK BUFA EQU 43H ; 定义地址,RAM 的 43H 定义为 BUFA (address) ORG 0700H ; 程序从 ROM 的 0700H 开始 0700H MOVLA 00H ; 保存 00H 到 A 寄存器 0701H DW 1122H ; 存储 1122H 在 ROM 的 0701H 0702H DW 3344H ; 存储 3344H 在 ROM 的 0702H 0703H DW 6677H ; 存储 6677H 在 ROM 的 0703H 0704H DW 55AAH ; 存储 55AAH 在 ROM 的 0704H MOVLA 04H ; 保存 04H 到 A 寄存器(低位地址) MOVAM BUFA ; 保存 A 寄存器的数值到 BUFA MOVLA 0FH ; 保存 0FH 到 A 寄存器(高位地址) MOVAM TAB_BNK ; 保存 A 寄存器的数值到 TAB_BNK TABRDL BUFA ; 查询 TAB_BNK 的低字节数值和 BUFA 指定地址, 保存到 A 寄存器 31 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC TABRDH ; 查询 TAB_BNK 的高字节数值和 BUFA 指定地址, BUFA 保存到 A 寄存器 6.10 系统控制器 MK7A21P提供Auto-Bank功能和双重时钟操作模式。当序列管理跳跃,系统将自动保存PC的高字节,以防止PC 进位溢出错误,那就是Auto-Bank的意思。双重时钟模式有内部RC和外部晶振时钟源。使用者可以在同一时间使 用两种模式。例如,内部RC(4MHz)常用作系统时钟源,外部晶振(32KHz)用作计数器时钟源,因为外部晶 振非常精确,使用者可以获得一个非常精确的定时器。 6.10.1 SYS_CTL ($3FH) Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SYS_CTL CLKS -- -- -- -- -- STP1 STP0 ● Bit7(CLKS):系统时钟源选择位,只有在双重时钟模式下激活 双重时钟模式: 0:系统时钟是内部RC 1:系统时钟是OSC(晶振) 单时钟模式: 不使用 ● Bit1(STP1):内部RC振荡器控制位 双重时钟模式: 0:RC振荡开 1:RC振荡关 其他模式: 不使用 < 注 > 在设置 RC 振荡关之前,首先将 CLKS 转换到 OSC 振荡 ● Bit0(STP0):OSC(晶振)振荡器控制位 双重时钟模式: 0:OSC振荡开 1:OSC振荡关 其他模式: 不使用 < 注 > 在设置 OSC 振荡关之前,首先将 CLKS 转换到 RC 振荡 32 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.11 程序计数器 - PC MK7A21P有一个11-bits程序计数器(PC) ,包含PCL(8-bits)和PCH(3bits) 。PC被存储在程序通道内。如果 使用者改变PCL的数值,程序将会跳到指示页面。 Ex1:PCH=01H,PCL=02H+10H=12H,程序将跳到PC=112H Ex2:PCH=01H,PCL=F0H+30H=20H带进位1,程序将跳到PC=220H,但PCH仍旧是01H < 注 > (a)当执行 RET 和 RETI,PCH 数据将不会被更新 (b)当执行 LGOTO,LCALL,JZ,JC 和 RET,PCH 将会在精确的操作后被更新 示例 1: 以下程序说明 PCL 和 PCH 如何直接精确的工作。 #DEFINE PCL 01H ; 定义地址,RAM 的 01H 定义为 PCL #DEFINE PCH 02H ; 定义地址,RAM 的 02H 定义为 PCH #DEFINE ADMIN 41H ; 辅助 PCL 操作 MOVLA HIGH P1 ; 保存 P1(1C6H)高字节地址到 A 寄存器 (address) 1C0H ; PC=1C0H,PCL=C0H,PCH=00H 1C1H MOVAM PCH ; 保存 A 寄存器到 PCH(为了避免 PCL 操作的跳跃 错误,首先存储真正的跳跃高字节地址到 PCH) ; PC=1C1H,PC =C1H,PCH=01H 1C2H MOVLA 4BH ; 保存 4BH 到 A 寄存器(ADDAM PCL,M 的地址 是 1C5H,准备跳到 210H,PCL 增加 210H-1C5H =4BH) ; PC=1C2H,PC =C2H,PCH=01H 1C3H MOVAM ADMIN ; 准备 PCL 操作 ; PC=1C3H,PCL=C3H,PCH=01H 1C4H DEC ADMIN, a ; ADMIN–1(真正的跳跃发生在 1C6H,不在 1C5H, 因此 1C6H+(4BH-1H)=210H) ; PC=1C4H,PCL=C4H,PCH=01H 1C5H ADD PCL,M ; PCL 用 A 寄存器增加,结果存储在 PCL ; PC=1C5H,PCL=C5H,PCH=01H P1:1C6H NOP ; 跳到 0210H ; PC=1C6H,PCL=C6+4AH=10H 带进位 1,进位将 用 PCH 计数,PCH=01H,用途 PC 高字节地址将是 PCH+PCL’s 进位=02H。程序将跳到 PC=210H 210H MOVLA 00H ; 用途功能部分 ; PC=210H,PCL=10H,PCH=01H 33 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 示例 2: 以下程序说明 PCL 和 PCH 如何直接精确的工作。 (address) 1C0H MOVLA 03H ; 保存 03H 到 A 寄存器 ; PC=1C0H,PCL=C0H,PCH=00H 1C1H MOVAM PCH ; 保存 A 寄存器到 PCH ; PC=1C1H,PCL=C1H,PCH=03H 1C2H MOVLA 4BH ; 保存 4BH 到 A 寄存器 ; PC=1C2H,PCL=C2H,PCH=03H 1C3H MOVAM ADMIN ; 准备 PCL 操作 ; PC=1C3H,PCL=C3H,PCH=01H 1C4H DEC ADMIN, a ; ADMIN–1(真正的跳跃发生在 1C6H,不在 1C5H, 因此 1C6H+(4BH-1H)=210H) ; PC=1C4H,PCL =C4H,PCH=03H 1C5H ADD PCL,M ; PCL 用 A 寄存器增加,结果存储在 PCL ; PC=1C5H,PCL=C5H,PCH=03H 1C6H NOP ; 跳到 410H ; PC=1C6H,PCL=C6+4AH=10H 带进位 1,进位将 用 PCH 计数,PCH=03H,用途 PC 高字节地址将是 PCH+PCL’s 进位=04H。程序将跳到 PC=410H 410H MOVLA 00H ; 用途功能部分 ; PC=410H,PCL=10H,PCH=03H 示例 3: 以下程序说明 PCL 和 PCH 如何通过 A 寄存器工作。 (address) 018H MOVLA 02H ; 保存 02H 到 A 寄存器 019H MOVAM PCH ; 保存 A 寄存器到 PCH(用途地址是 200H,因此存 储“02H”到 PCH) 01AH MOVLA 00H ; 保存 00H 到 A 寄存器 01CH MOVAM PCL ; 保存 A 寄存器到 PCL(用途地址是 200H,因此存 储“00H”到 PCL) 01DH NOP 200H MOVLA ; 跳到 200H 00H ; 用途功能部分 34 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 6.12 STATUS寄存器 STATUS寄存器是一个包含零标记(Z) ,进位标记(C),四位进位标记(DC),掉电标记( PD ),看门狗定 时器溢出标记( TO )的8位寄存器,它用于记录状态信息。 Register Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 STATUS -- -- -- TO PD Z DC C ● Bit4( TO ) :定时器溢出标记位 ● Bit3( PD ) :掉电标记位 说 明 TO PD 0 0 在睡眠模式中 WDT 定时器溢出 0 1 在普通模式中 WDT 定时器溢出 1 0 在睡眠模式中给 RESETB 输入一个“低电平” 1 1 上电复位 Unchanged Unchanged 在普通模式中给 RESETB 输入一个“低电平” ● Bit2(Z) :零标记位 0:逻辑操作结果不是0 1:逻辑操作结果是0 ● Bit1(DC) :四位进位与四位借位标记位 加指令: 0:无低四位进位 1:从低四位进位 减指令: 0:从低四位借位 1:无低四位借位 ● Bit0(C) :进位与借位标记位 加指令: 0:无进位 1:从 MSB 进位 减指令: 0:从MSB借位 1:无借位 35 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 7. 指令集 JUMP INSTRUCTION LCALL I LGOTO I JZ I JC I Call subroutine. However, LCALL can addressing 2K address Go branch to any address If z=1 then jump to any address If c=1 then jump to any address 2 None 011i iiii iiii 2 2 2 None None None 010i iiii iiii iiii 001i iiii iiii iiii 000i iiii iiii iiii (M).(acc) → (acc) (M).(acc) → (M) Immediate.(acc) → (acc) ~(M) → (acc) ~(M) → (M) (M) or (acc) → (acc) (M) or (acc) → (M) Immediate or (acc) → (acc) 1 1 1 1 1 1 1 1 Z Z Z Z Z Z Z Z 1010 1000 MMMM MMMM 1010 1001 MMMM MMMM 1111 1000 iiii iiii 1010 0100 MMMM MMMM 1010 0101 MMMM MMMM 1011 1110 MMMM MMMM 1011 1111 MMMM MMMM 1111 0010 iiii iiii 1 None 1110 0000 MMMM MMMM 1 None 1110 0001 MMMM MMMM 1 C 1110 0010 MMMM MMMM 1 C 1110 0011 MMMM MMMM 1 None 1110 1000 MMMM MMMM 1 None 1110 1001 MMMM MMMM 1 C 1110 1010 MMMM MMMM iiii LOGIC AND M, a AND M, m ANDLA I COM M, a COM M, m IOR M, a IOR M, m IORLA l Rotate left from m to acc RL M, a m[6:0] → acc[7:1] m[7] → acc[0] Rotate left from m to itself RL M, m m[6:0] → m[7:1] m[7] → m[0] Rotate left from m to acc RLC M, a m[7] → c m[6:0] → acc[7:1] c → acc[0] Rotate left from m to itself RLC M, m m[7] → c m[6:0] → m[7:1] c → m[0] Rotate right from m to acc RR M, a m[0] → acc[7] m[7:1] → acc[6:0] Rotate right from m to itself RR M, m M[0] → m[7] m[7:1] → m[6:0] RRC M, a Rotate right from m to acc m[0] → c, 36 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC c → acc[7] m[7:1] → acc[6:0] Rotate right from m to itself RRC M, m m[0] → c, c → m[7] 1 C 1110 1011 MMMM MMMM 1 None 1011 1100 MMMM MMMM 1 1 1 1 None Z Z Z 1011 1101 MMMM MMMM 1011 0110 MMMM MMMM 1011 0111 MMMM MMMM 1111 1001 iiii iiii 1 1 1 1 1 1 1 1 1 C, DC, Z C, DC, Z C, DC, Z C, DC, Z C, DC, Z None None Z Z 1010 1010 MMMM MMMM 1010 1011 MMMM MMMM 1011 1010 MMMM MMMM 1011 1011 MMMM MMMM 1111 1010 MMMM MMMM 1001 1bbb MMMM MMMM 1001 0bbb MMMM MMMM 1010 0010 0000 0000 1010 0011 MMMM MMMM 2 None 1101 1000 MMMM MMMM 2 None 1101 1001 MMMM MMMM 1 C 1101 0110 MMMM MMMM 1 C 1101 0111 MMMM MMMM m[7:1] → m[6:0] SWAP M, a SWAP M, m XOR M, a XOR M, m XORLA l m[7:4] → acc[3:0] m[3:0] → acc[7:4] m[7:4] ← → m[3:0] (M) xor (acc) → (acc) (M) xor (acc) → (M) Immediate xor (acc) → (acc) MATHEMATICS ADD M, a ADD M, m ADDC M,a ADDC M,m ADDLA I BC M, bn BS M, bn CLRA CLR M TABRDL M TABRDH M DA M, a DA M, m (M)+(acc) → (acc) (M)+(acc) → (M) (M)+(acc) + (carry) → (acc) (M)+(acc) + (carry) → (M) Immediate + (acc) → (acc) Clear bit n of (M) Set bit n of (M) Clear accumulator Clear memory M Read low byte ROM table (ROM bank) Read high byte ROM table (ROM bank) Decimal Adjust M to ACC If ACC[3:0] > 9 or DC=1 Then ACC[3:0] ← ACC[3:0]+6, DC1=~DC else ACC[3:0] ← ACC[3:0], DC1=0 If ACC[7:4]+DC1 > 9 or C=1 Then ACC[7:4] ← ACC[7:4]+6+DC1, C=1 else ACC[7:4] ← ACC[7:4]+DC1, C=C Decimal Adjust M to memory If ACC[3:0] > 9 or DC=1 Then M[3:0] ← ACC[3:0]+6, DC1=DC else M[3:0] ← ACC[3:0], DC1=0 If ACC[7:4]+DC1 > 9 or C=1 Then 37 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC DEC M, a DEC M, m INC M, a INC M, m MOVAM m MOV M, a M[7:4] ← ACC[7:4]+6+DC1, C=1 else M[7:4] ← ACC[7:4]+DC1, C=C (M) - 1 → (acc) (M) - 1 → (M) (M) + 1 → (acc) (M) + 1 → (M) (acc) →(M) (M) → (acc) 1 1 1 1 1 1 Z Z Z Z None Z 1010 1100 MMMM MMMM 1010 1101 MMMM MMMM 1011 0000 MMMM MMMM 1011 0001 MMMM MMMM 1010 0001 MMMM MMMM 1010 0110 MMMM MMMM (M) → (M) 1 Z 1010 0111 MMMM MMMM MOVLA l Immediate data → acc 1 None 1111 0000 iiii iiii SUBLA I (immediate data)-(Acc) →(Acc) 1 C, DC, Z 1111 0100 iiii iiii SUB M, m (M)–(acc) → (M) 1 C, DC, Z 1011 0101 MMMM MMMM SUB M, a (M) –(acc) → (acc) 1 C, DC, Z 1011 0100 MMMM MMMM No operation 1 None 1111 1111 1111 1111 Clear watch-dog register 1 TO , PD 1111 1111 1111 0000 Return (for lcall instruction ) 2 None 1111 1111 1111 0001 2 None 1111 1111 1111 0010 Return ( for IRQ ) 2 None 1111 1111 1111 0011 Enter sleep (saving) mode 1 TO , PD 1111 1111 1111 100 MOV M, m OTHER OPERATION NOP CLRWDT RET RETI Return and enable INTM ( for IRQ ) RET_INT SLEEP CONDITION OPERATION BTSC M, bn If bit n of(M)=0, skip next instruction 1 or 2 None 1000 1bbb MMMM MMMM BTSS M, bn If bit n of (M)=1, skip next instruction 1 or 2 None 1000 0bbb MMMM MMMM DECSZ M, a (M) - 1 → (acc), skip if (acc) = 0 1 or 2 None 1010 1110 MMMM MMMM DECSZ M, m (M) - 1 → (M), skip if (M) = 0 1 or 2 None 1010 1111 MMMM MMMM INCSZ M, a (M) + 1 →(acc), skip if (acc) = 0 1 or 2 None 1011 0010 MMMM MMMM INCSZ M, m (M) + 1 → (M), skip if (M) = 0 1 or 2 None 1011 0011 MMMM MMMM TMSS A If (acc) =0, skip next instruction 1 or 2 None 1011 1000 XXXX XXXX TMSC M If (M) = 0, skip next instruction 1 or 2 None 1011 1001 MMMM MMMM < 注 > 进入 SLEEP 指令后,请增加一个 NOP 指令在它后面来进行延时。 38 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 8. 电气特性 8.1 绝对最大额定值 电源电压 …… Vss-0.3V to Vss+5.5V 输入电压 …… Vss-0.3V to VDD+0.3V 存储温度 …… –50℃ to 125℃ 工作温度 ……–40℃ to 85℃ < 注 > 这里仅强调额定值,超出“绝对最大额定值”指定的范围会对芯片造成严重伤害。在其他条件下(规 格书列出的除外),此芯片的功能操作并不意味长期暴露在极端条件下会影响芯片的可靠性。 39 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 8.2 直流电特性 Symbol VDD IDD1 IDD2 IDD3 IDD4 Parameter Operating Voltage Operating Current (Crystal OSC) Operating Current (RC OSC) Operating Current (Crystal OSC) Operating Current (Crystal OSC) Test Conditions VDD Conditions --- 5.5 fsys =8MHZ 2.5 5.5 fsys =12MHZ 3.3 5.5 3.3V No Load , fsys =4MHZ 0.8 5V ADC disable . 1.6 3.3V No Load , fsys =4MHZ 0.7 ADC disable . 5V 5V 5V ADC disable No Load , fsys =12MHZ ADC disable 5V I/O Port VIL Input Low Voltage 5V Standby Current 3V IOH IOL Input Leakage Current I/O Port Driving Current I/O Port Sink Current RPH Pull-high Resistance VAD A/D input Voltage EAD A/D Conversion Error IADC A/D Operating current 5V 5.5V V mA 2.6 mA 3.6 mA 2 Vdd V I/O Port 0.8 V WDT disable 1 WDT enable 6 WDT disable 1 WDT enable 2 Vin=VDD, VSS 5.5V Unit mA 1.2 No Load , fsys =8MHZ 5V Max. 2.0 Input High Voltage IIL Typ. fsys =4MHZ VIH ISTB Min. 1 Voh=5V 9.9 Voh=4.5V 17.6 Voh=4V 24.8 Vol=0.5V 24.5 Vol=0.75V 35.3 Vol=1V 43.8 μA μA mA mA 5V 70 85 100 KΩ 3.3V 120 150 180 KΩ VDD V 2 LSB 0 3.3V 100 40 uA 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 8.3 交流电特性 Symbol Parameter Test Conditions Conditions VDD fsys1 System Clock LS Crystal mode fsys2 System Clock NS Crystal mode fsys3 System Clock HS Crystal mode fsys4 System Clock Twdt Watchdog Timer Trht Reset Hold Time TAD A/D clock period TADC TADCS 200 3V 32 200 5V 0.2 10 3V 0.2 10 5V 10 20 3V 10 20 5V 6 3V 4 5V 3V 5V 3V PC0~3 output port, Driving 3V 41 Khz Mhz Mhz Mhz mS 20 mS us 30 tAD 8 tAD Voh=4.5V 9 mA Voh=4.0V 18 mA Voh=3.5V 22 mA Voh=3.0V 26 mA Voh=2.5V 29 mA Voh=2.7V 4 mA Voh=2.4V 7 mA Voh=2.1V 9 mA Voh=2.1V 10 mA Voh=1.8V 12 mA A/D Sampling Time PB0~7 output port, Unit 20 2 5V Max 32 Time Current Typ. 5V A/D Conversion PA0~3 output port , IOH RC mode Min 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 8.4 EXT_RC 振荡器频率 VCC Rext OSCI Cext MK7A21P 下表为典型的外部 RC 振荡频率数据表 当 Cext = 0.1uf(104) Rext 5V 3V 6M 32KHZ 30KHZ 300K 460 KHZ 450 KHZ 140K 0.97 MHZ 0.90 MHZ 68K 2.0 MHZ 1.97 MHZ 37K 3.9 MHZ 3.85 MHZ 25K 6 MHZ 6 MHZ 15K 10.3 MHZ 10 MHZ 42 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 8.5 不同模式下的振荡器电器 C3 OSC2 VDD R1 MK7A22P RESETB C2 OSC1 C1 Crystal mode Crystal mode LP mode NT mode HS mode Crystal C2 C3 32 Khz 20~100P 20~100P 455 Khz 100P 100P 455 Khz 100P 100P 1 Mhz 20~100P 20~100P 2 Mhz 20~100P 20~100P 4 Mhz 20~100P 20~100P 8 Mhz 20~50P 20~50P 10 Mhz 20~50P 20~50P 12 Mhz 20~50P 20~50P 16 Mhz 20~50P 20~50P 20 Mhz 20~50P 20~50P 43 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC 9. 封装尺寸 (a) 18 Pin DIP E C L A1 A A2 D B B1 e D1 eB E1 0.727 TOP E-PIN INDENT ø 0.079 PIN 1INDICATOR ø 0.039 BOTTOM E-PIN INDENT ø 0.118 DIMENSIONS IN MILLIMETERS DIMENSIONS IN INCHES SYMBOLS MIN NOM MAX MIN NOM MAX A ─ ─ 4.57 ─ ─ 0.180 A1 0.38 ─ ─ 0.015 ─ ─ A2 ─ 3.30 3.56 ─ 0.130 0.140 B 0.36 0.46 0.56 0.014 0.018 0.022 B1 1.27 1.52 1.78 0.050 0.060 0.070 C 0.20 0.25 0.33 0.008 0.010 0.013 D 22.71 22.96 23.11 0.894 0.904 0.910 D1 0.43 0.56 0.69 0.017 0.022 0.027 E 7.62 ─ 8.26 0.300 ─ 0.325 E1 6.40 6.50 6.65 0.252 0.256 0.262 e ─ 2.54 ─ ─ 0.100 ─ L 3.18 ─ ─ 0.125 ─ ─ eB 8.38 ─ 9.65 0.330 ─ 0.380 44 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC (b) 18 Pin SOP (TOP11.507±0.05) (BTM11.557±0.05) 1 0° (T 0.762±0.076 1.270 Y P) 3¢ X± 2° 5° ± 3¢X 0.254 10.31±0.10 (TOP7.443±0.05) 1.524 (BTM7.493±0.05) 0.508X45° BTM2.00 TOP 1.0x0.10~0.15DP SEAING PLANE 2.515±0.1 2.337±0.05 1.270 1.041±0.025 0.406 0.1778±0.05 0.05 45 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC (c) 14 Pin DIP D E1 E C TOP E-PIN INDENT ø 0.079 BOTTOM E-PIN INDENT ø 0.118 L A1 A A2 eB B B1 e D1 DIMENSIONS IN MILLIMETERS DIMENSIONS IN INCHES SYMBOLS A MIN NOM MAX MIN ─ ─ 4.57 ─ NOM ─ MAX 0.180 A1 0.38 ─ ─ 0.015 ─ ─ A2 3.25 3.30 3.45 0.128 0.130 0.136 0.022 B 0.36 0.46 0.56 0.014 0.018 B1 1.27 1.52 1.78 0.050 0.060 0.070 C 0.20 0.25 0.33 0.008 0.010 0.013 D 18.90 19.15 19.30 0.744 0.754 0.760 D1 1.07 1.19 1.32 0.042 0.047 0.052 E 7.62 ─ 8.26 0.300 ─ 0.325 E1 6.35 6.50 6.65 0.250 0.256 0.262 e ─ 2.54 ─ ─ 0.100 ─ L 3.18 ─ ─ 0.125 ─ ─ eB 8.64 ─ 9.65 0.340 ─ 0.380 46 2007/6/15 Rev.17 MK7A21P 8Bit Microcontroller with 8bit ADC E H (d) 14 Pin SOP C L D DIMENSIONS IN MILLIMETERS DIMENSIONS IN INCHES SYMBOLS B e y A1 A A2 7°(4X ) MIN NOM A 1.35 1.60 A1 0.10 ─ A2 ─ 1.45 B 0.33 C 0.19 D E MIN NOM 1.75 0.053 0.063 0.069 0.25 0.004 ─ 0.010 ─ ─ 0.057 ─ ─ 0.51 0.013 ─ 0.020 ─ 0.25 0.007 ─ 0.010 8.55 ─ 8.75 0.337 ─ 0.344 3.80 ─ 4.00 0.150 ─ 0.157 e ─ 1.27 ─ ─ 0.050 ─ H 5.80 ─ 6.20 0.228 ─ 0.244 L 0.40 ─ 1.27 0.016 ─ 0.050 ─ 0.10 ─ ─ 0.004 ─ 8° 0° ─ 8° Y ─ θ 0° 47 MAX MAX 2007/6/15 Rev.17