使用说明
78K0S/Kx1+
示例 程序(16 位定时器 / 事件计数器 00)
单次脉冲输出
本文档描述了示例 程序的操作概述及使用方法,以及如何设置和应用 16 位定时器/ 事件计数器 00 的单次脉冲输出功
能。在该示例 程序中,16 位定时器/ 事件计数器 00 的单次脉冲输出功能用于自检测到输入 TI000 引脚的外部信号的上升
沿开始,给定的延迟时间过后,输出一个单次脉冲。此外,有效脉冲宽度依照开关输入次数而发生变化。
目录
目标器件
78K0S/KA1+ 微控制器
78K0S/KB1+ 微控制器
78K0S/KU1+ 微控制器
78K0S/KY1+ 微控制器
文档编号 U18891CA1V0AN00( 第一版)
发布日期 2008 年 03 月 N
2008
日本印刷
第一章 概要………... …………………………………………………………………….3
1.1 初始设置的主要内容 .................................................................................... 3
1.2 主循环之后的内容........................................................................................ 4
第二章 电路图.......................................................................................................... 5
2.1 电路图.......................................................................................................... 5
2.2 外围硬件..... ................................................................................................. 5
第三章 软件............................................................................................................. 6
3.1 文件的组成.. ................................................................................................ 6
3.2 所用的内部外设功能 .................................................................................... 7
3.3 初始设置和操作概述 .................................................................................... 7
3.4 流程图.......................................................................................................... 9
第四章 设置方法....................................................................................................10
4.1 设置 16 位定时器/事件计数器 00 的单次脉冲输出功能............................... 10
4.2 设置单次脉冲有效宽度............................................................................... 27
4.3 设置抖动检测时间...................................................................................... 28
第五章 用系统仿真器 SM+ 进行操作检验............................................................... 29
5.1 连编举例程序 ............................................................................................. 29
5.2 SM+的操作. ...............................................................................................30
第六章 相关文档....................................................................................................34
附录 A 程序清单..................................................................................................35
附录 B 版本修订历史........................................................................................... 49
●
本文档信息发布于2008年03月。未来可能未经预先通知而进行更改。在实际进行生产设计时,请参
阅各产品最新的数据规格书或数据手册等相关资料,以获取本公司产品的最新规格。并非所有的产品
和/ 或型号都向每个国家供应。请向本公司销售代表查询产品供货及其他信息。
● 未经本公司事先书面许可,禁止采用任何方式复制或转载本文件中的内容。本文件所登载内容的错
误,本公司概不负责。
● 本公司对于因使用本文件中列明的本公司产品而引起的,对第三者的专利、版权以及其它知识产权的
侵权行为概不负责。本文件登载的内容不应视为本公司对本公司或其他人所有的专利、版权以及其它
知识产权做出任何明示或默示的许可及授权。
● 本文件中的电路、软件以及相关信息仅用以说明半导体产品的运作和应用实例。用户如在设备设计中
应用本文件中的电路、软件以及相关信息,应自行负责。对于用户或其他人因使用了上述电路、软件
以及相关信息而引起的任何损失,本公司概不负责。
● 虽然本公司致力于提高半导体产品的质量及可靠性,但用户应同意并知晓,我们仍然无法完全消除出
现产品缺陷的可能。为了最大限度地减少因本公司半导体产品故障而引起的对人身、财产造成损害
(包括死亡)的危险,用户务必在其设计中采用必要的安全措施,如冗余度、防火和防故障等安全设
计。
● 本公司产品质量分为: “ 标准等级 ” 、 “ 专业等级 ” 以及 “ 特殊等级 ” 三种质量等级。
“特殊等级 ”仅适用于为特定用途而根据用户指定的质量保证程序所开发的日电电子产品。另外,各种日
电电子产品的推荐用途取决于其质量等级,详见如下。用户在选用本公司的产品时,请事先确认产品的
质量等级。
“标准等级”: 计算机,办公自动化设备,通信设备,测试和测量设备,视音频设备,家电,加工
机械,个人电气设备以及产业用机器人。
“专业等级”: 运输设备(汽车、火车、船舶等),交通用信号控制设备,防灾装置,防止犯罪装
置,各种安全装置以及医疗设备(不包括专门为维持生命而设计的设备)。
“特殊等级”: 航空器械,宇航设备,海底中继设备,原子能控制系统,为了维持生命的医疗设备和
用于维持生命的装置或系统等。
除在本公司半导体产品的数据表或数据手册等资料中另有特别规定以外,本公司半导体产品的质量等级
均为“ 标准等级” 。如果用户希望在本公司设计意图以外使用本公司半导体产品,务必事先与本公司销售
代表联系以确认本公司是否同意为该项应用提供支持。
(注)
(1 )本声明中的“ 本公司” 是指日本电气电子株式会社(NEC Electronics Corporation )及其控股公司。
(2 )本声明中的“ 本公司产品” 是指所有由日本电气电子株式会社或为日本电气电子株式会社(如上定义)
开发或制造的产品。
M8E 02.11-1
2
使用说明 U18891CA1V0AN
第一章 概要
该举例程序介绍了使用 16 位定时器/ 事件计数器 00 的单次脉冲输出功能实例。自检测到输入 TI000 引脚的外部信号
上升沿开始,给定的延迟时间过后,输出一个单次脉冲。此外,有效脉冲宽度依照开关输入次数而发生变化。
1.1 初始设置的主要内容
初始设置的主要内容如下所示:
• 选择内部高速振荡器作为系统时钟信号源
注
。
• 停止看门狗定时器运行。
• 设置 VLVI (低压检测电压)为 4.3 V ±0.2 V。
• VDD(电源电压)变得高于或等于 V LVI 后,当检测到 V DD 低于 V LVI 时产生内部复位( LVI 复位)信号 。
• 设置 CPU 时钟频率为 8 MHz。
• 设置 I/O 端口。
• 设置 16 位定时器 /事件计数器 00。
• 设置 CR000 和 CR010 作为比较寄存器。
• 设置从检测到 TI000 引脚有效沿到有效输出的延迟时间为 1 ms ( 0.5µs × 2,000)。
• 设置脉冲有效输出宽度为 10 ms ( 0.5 µs × 20,000)。
• 设置计数时钟为 f
• 设置 TI000 引脚上升沿有效。
• 设置输出模式为单次脉冲输出模式。
• 允许基于 CR010 和 TM00或 CR000 和 TM00匹配而引起的定时器输出反转。
• 设置定时器输出初始值为 0 (复位( 0) 定时器输出 F/F)。
• 允许定时器输出 ( TO00 引脚输出)。
• 设置操作模式为检测到 TI000 引脚有效沿时清零并启动。
2
XP/2
( 2 MHz)。
• 设置 INTP1 (外部中断) 下降沿有效。
• 使能 INTP1 中断。
注 用选项字节进行设置。
使用说明 U18891CA1V0AN
3
第一章 概要
1.2 主循环之后的内容
初始设置完成后,自检测到输入 TI000 引脚的外部信号的上升沿开始,给定的延迟时间过后,输出一个单次脉冲。
当检测到由开关输入产生的 INTP1 引脚下降沿时,进行 INTP1 中断服务。检测到 INTP1 引脚下降沿 10 ms 后,若
INTP1 为高电平(开关关闭),确认为抖动。自检测到边沿 10ms 后,若 INTP1 检测为低电平(开关开启),则有效
脉冲宽度依照开关输入次数而发生变化。
注 第三次开关输入后,有效脉冲宽度从第零次开关输入重复。
注意事项 关于使用器件时的注意事项,参见各产品(78K0S/KU1+ , 78K0S/KY1+ , 78K0S/KA1+ ,
78K0S/KB1+)用户手册。
[专栏] 抖动
抖动是一种开关按下之后由于机械触点的弹跳而引起电信号瞬时反复接通和断开的现象。
4
使用说明 U18891CA1V0AN
第二章 电路图
本章描述了该举例程序中所使用的电路图和外围硬件。
2.1 电路图
电路图如下所示:
注 1. 适用电压范围为 4.5 V ≤ VDD ≤ 5.5 V。
2. INTP1/TxD6/P43: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
INTP1/P32: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
3. TI000/INTP0/P30: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
TI000/ANI0/TOH1/P20: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
4. TO00/TI010/INTP2/P31: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
TO00/TI010/INTP0/ANI1/P21:78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
注意事项 1. 直接将 AV
REF 引脚连接到 V DD (仅适用于 78K0S/KA1+ 和 78K0S/KB1+ 微控制器 )。
2. 直接将 AVSS 引脚连接到 GND (仅适用于 78K0S/KB1+微控制器)。
3. 除电路图中所示引脚及 AV
REF 和 AV SS 引脚外,保留其他所有未用引脚为开路状态(未连接)。
2.2 外围硬件
使用的外围硬件如下所示:
• 开关(SW)
开关用于控制单次脉冲输出有效宽度的输入。
使用说明 U18891CA1V0AN
5
第三章 软件
本章描述了所下载的压缩文件组成、所用微控制器的内部外设功能以及举例程序的初始设置和操作概述,并显示了
流程图。
3.1 文件的组成
下表显示了所下载压缩文件的组成:
包含的压缩文件(*.zip) 文件名称 说明
main.asm
(汇编语言版本)
main.c
( C语言版本)
op.asm
tm00one.prw
tm00one.prj
tm00one.pri
tm00one.prs
tm00one.prm
tm00one0.pnl
tm00one0.wvo
有关微控制器硬件初始化处理和主处理程序的源文件。
有关设置选项字节(设置系统时钟信号源)的汇编程序源文
件。
有关集成开发环境PM+的工作空间文件。
有关集成开发环境PM+的工程文件。
有关78K0S/Kx1+系统仿真器SM+的工程文件。
有关78K0S/Kx1+ 系统仿真器SM+ 的I/O 面板文件(用于检查外
围硬件的工作)。
有关78K0S/Kx1+系统仿真器SM+的时序图文件 (用于检查波
形)。
z
z z
注 1. 汇编语言版本包含“main.asm”文件, C 语言版本包含 “main.c”文件。
2. 78K0S/KU1+微控制器的文件中不包含这些文件。
备注 : 仅包含源文件。
: 包含用于集成开发环境 PM+和 78K0S/Kx1+系统仿真器 SM+的文件。
: 包含用于 78K0S/Kx1+系统仿真器 SM+的微控制器工作仿真文件。
注 1
z
注 1
z
z
注 2
z
注 2
z
z
z
6
使用说明 U18891CA1V0AN
第三章 软件
3.2 所用的内部外设功能
该举例程序中,使用了微控制器的下列内部外设功能:
• 单次脉冲输出功能: 16 位定时器 / 事件计数器 00 。
DD < V LVI 检测: 低压检测器(LVI)。
• V
• 开关输入: INTP1
• 外部脉冲输入: TI000
• 单次脉冲输出: TO00
注 1
(外部中断)。
注 2
(定时器输入)。
注 3
(定时器输出)。
注 1. INTP1/P43 : 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
INTP1/P32: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
2. TI000/INTP0/P30: 78K0S/KA1+ 和 78K0S/KB1 + 微控制器。
TI000/ANI0/TOH1/P20: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
3. TO00/TI010/INTP2/P31: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
TO00/TI010/INTP0/ANI1/P21:78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
3.3 初始设置和工作概要
在该举例程序中,初始设置包括设置低压检测功能、时钟频率选择、设置 I/O 端口、设置 16 位定时器/ 事件计数器
00 (单次脉冲输出功能)和中断设置。
初始设置完成后,自检测到输入 TI000 引脚的外部信号上升沿开始,给定的延迟时间过后,输出一个单次脉冲。
当检测到由开关输入产生的 INTP1 引脚下降沿时,进行 INTP1 中断服务。自检测到 INTP1 引脚下降沿 10ms 后,若
INTP1 为高电平(开关关闭),确认为抖动。自检测到边沿 10ms 后,若 INTP1 为低电平(开关开启),则有效脉冲
宽度依照开关输入次数而发生变化。
使用说明 U18891CA1V0AN
7
详情如下列状态转换图所示:
第三章 软件
注 1. INTP1/P43 : 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
INTP1/P32: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
2. TI000/P30: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
TI000/P20: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
3. TO00/P31: 78K0S/KA1+ 和 78K0S/KB1+ 微控制器。
TO00/P21: 78K0S/KY1+ 和 78K0S/KU1+ 微控制器。
8
使用说明 U18891CA1V0AN
3.4 流程图
举例程序的流程图如下所示:
第三章 软件
注 复位解除后,微控制器自动援引选项字节。在该举例程序中,援引选项字节设置以下内容:
• 内部高速振荡时钟( 8MHz( TYP.))用作系统时钟信号源。
• 可由软件停止内部低速振荡器。
• P34/RESET 引脚用作 RESET引脚。
使用说明 U18891CA1V0AN
9
0B第四章 设置方法
本章描述了 16 位定时器/ 事件计数器 00 的单次脉冲输出功能。
关于其他的初始设置,参见 78K0S/Kx1+ 举例程序(初始设置)LED 灯开关控制的使用说明 。关于中断,参见
78K0S/Kx1+ 举例程序(中断)由开关输入产生外部中断的使用说明。关于低压检测(LVI ),参见 78K0S/Kx1+ 举例程
序(低压检测)电压低于 2.7V 时的复位使用说明。
关于如何设置寄存器,参见各产品(78K0S/KU1+ ,78K0S/KY1+ ,78K0S/KA1+ ,78K0S/KB1+ )用户手册。
关于汇编器指令,参见 78K/0S 系列指令用户手册 。
1B 4.1 设置 16 位定时器/ 事件计数器 00 的单次脉冲输出功能
使用 16 位定时器/ 事件计数器 00 的单次脉冲输出功能时,设置以下九类寄存器:
• 捕获 /比较控制寄存器 00( CRC00)。
• 16 位定时器捕获/ 比较寄存器 000 (CR000 )。
• 16 位定时器捕获/ 比较寄存器 010 (CR010 )。
• 预分频模式寄存器 00( PRM00)。
• 16 位定时器输出控制寄存器 00 (TOC00 )。
• 16 位定时器模式控制寄存器 00 (TMC00 )。
• 端口寄存器 x( Px)
• 端口模式寄存器 x( PMx)
• 端口模式控制寄存器 x( PMCx)
注
。
注
。
注
。
注 由于单次脉冲输出功能将 TO00 引脚用作定时器输出,所以 Px、PMx 和 PMCx 寄存器需进行如下设置。此
外,由于将 TI000 引脚用作定时器输入,以便输出一个与外部触发同步的单次脉冲,故而对 Px、PMx 和
PMCx 寄存器进行如下设置
• TO00 引脚
78K0S/KA1+ 和 78K0S/KB1+ 微控制器 P31 = 0 PM31 = 0 不需要设置
78K0S/KY1+ 和 78K0S/KU1+ 微控制器 P21 = 0 PM21 = 0 PMC21 = 0
Px 寄存器 PMx 寄存器 PMCx 寄存器
• TI000 引脚
78K0S/KA1+ 和 78K0S/KB1+ 微控制器 不需要设置 PM30 = 1 不需要设置
78K0S/KY1+ 和 78K0S/KU1+ 微控制器 不需要设置 PM20 = 1 PMC20 = 0
10
Px 寄存器 PMx 寄存器 PMCx 寄存器
使用说明 U18891CA1V0AN
第四章 设置方法
<16位定时器/事件计数器 00 用作单次脉冲输出时,基本操作设置步骤举例 >
<1> 设置 CRC00 寄存器。
<2> 给 CR000 和 CR010 寄存器设置任意值(不可设置为 0000H) 。
<3> 用 PRM00 寄存器设置计数时钟。
<4> 设置 TOC00 寄存器。
<5> 设置 TMC00 寄存器: 开始运行。
注意事项 步骤 <1>至 <4>顺序不分先后。
(1) 设置 CRC00 寄存器
该寄存器控制 CR000 和 CR010 寄存器的操作。
图 4-1. 捕获/ 比较控制寄存器 00 (CRC00 )的格式
CRC00
0 0 0 0 0
CRC002 CRC001 CRC000
CR000操作模式的选择
0
用作比较寄存器操作。
1
用作捕获寄存器操作。
CR000捕获触发器的选择
0
在 TI010引脚的有效沿捕获 。
1
在 TI000引脚有效沿的反转相位捕获。
CR010操作模式的选择
0
用作比较寄存器操作。
1
用作捕获寄存器操作。
注意事项 1. 设置 CRC00 寄存器之前必须停止定时器的操作。
2. 当使用 TMC00 寄存器选择基于 TM00 和 CR000 匹配而清零并启动的模式时,不要指定 CR000
寄存器作为捕获寄存器。
(2) 设置 CR000 寄存器
该寄存器兼有捕获寄存器功能和比较寄存器功能。
图 4-2. 16 位定时器捕获/ 比较寄存器 000 (CR000 )的格式
CR000
CR000 用作比较寄存器
CR000 的设定值不断的与 16 位定时器计数器 00( TM00)的计数值比较,若二者匹配则产生中断请求
(INTTM000 )。
使用说明 U18891CA1V0AN
11
第四章 设置方法
注意事项 1. 基于 TM00 和 CR000 匹配而清零并启动的模式下,给 CR000 寄存器设置一个非 0000H 值。在自
由运行模式或基于 TI000 引脚有效沿而清零并启动的模式下,若 CR000 寄存器设置为 0000H ,
则发生溢出(FFFFH )后,当寄存器由 0000H 变成 0001H 时,产生一个中断请求
(INTTM000 )。
2. 如果 CR000 寄存器的新值小于 16 位定时器计数器 00 ( TM00 )的值, TM00 寄存器继续计数,
直至溢出,然后再从 0 开始重新计数。如果 CR000 寄存器的新值小于原先值,在 CR000 寄存器
的值改变之后,定时器必须复位并重新启动。
3. 不保证 TM00 计数器停止后 CR000 寄存器的值。
4. 若将 CR000 寄存器设置为比较模式,即使输入捕获触发信号,也不会执行捕获操作。
5. 在 TM00 计数器操作期间改变 CR000 寄存器的设置可能会出错。
(3) 设置 CR010 寄存器
该寄存器兼有捕获寄存器和比较寄存器的功能。
图 4-3. 16 位定时器捕获/ 比较寄存器 010 (CR010 )的格式
CR010
CR010 用作比较寄存器
CR010 的设定值不断的与 16 位定时器计数器 00( TM00)的计数值
比较,若二者匹配则产生中断请求
(INTTM010 )。
注意事项 1. 在自由运行模式下或在由 TI000 引脚的有效沿进入的清零并启动模式下,若 CR010 设置为
0000H ,则发生溢出后(FFFFH ),当寄存器的值由 0000H 变成 0001H 时,产生一个中断请求
(INTTM010 )。
2. 如果 CR010 寄存器的新值小于 TM00 计数器的值,TM00 计数器继续计数,直至溢出,然后再从
0 开始重新计数。如果 CR010 寄存器的新值小于原先值,在 CR010 寄存器的值改变之后,定时
器必须复位和重新启动。
3. 不保证 TM00 计数器停止后 CR010 寄存器的值。
4. 若将 CR010 寄存器设置为比较模式,即使输入捕获触发信号,也不会执行捕获操作。
5. 在 TM00 计数器操作期间改变 CR010 寄存器的设置可能会出错。
12
使用说明 U18891CA1V0AN
第四章 设置方法
(4) 设置 PRM00 寄存器
该寄存器用于设置 TM00 计数器的计数时钟以及 TI000 引脚和 TI010 引脚输入的有效沿。
图 4-4. 预分频模式寄存器 00 (PRM00 )的格式
PRM00
ES110 ES100 ES010 ES000 0
0
PRM001 PRM000
计数时钟( fsam) 的选择
0 0 f
0 1
1 0
1 1
TI000引脚有效沿的选择
0 0
0 1
1 0
1 1
TI010引脚有效沿的选择
0 0
0 1
1 0
1 1
XP
2
f
XP/2
8
f
XP/2
TI000 引脚有效沿
下降沿
上升沿
设置禁止
双边沿
下降沿
上升沿
设置禁止
双边沿
注
。
注 外部时钟脉冲需要长于两个内部时钟(f
XP)周期。
备注 fXP:供给外围硬件的时钟振荡频率。
注意事项 1. 总是在停止定时器操作后给 PRM00 寄存器设置数据。
2. 当设定 TI000 引脚的有效沿作为计数时钟时,不要设置为由 TI000 引脚的有效沿清零并启动模式,也
不要将 TI000 引脚用作捕获触发。
3. 在下列情况中,应对 TI0n0 引脚(n = 0,1)有效沿的检测情况加以注意。
<1> 系统复位后 TI0n0 引脚输入高电平并立即使能 TM00 。
→ 如果指定 TI0n0 引脚为上升沿或双边沿有效,则使能 TM00 后,随即检测到上升沿。
<2> TI0n0 引脚处于高电平时,停止 TM00 操作,且 TI0n0 引脚输入低电平后,立即使能 TM00。
→ 如果指定 TI0n0 引脚为下降沿或双边沿有效,则使能 TM00 后,随即检测到下降沿。
<3> TI0n0 引脚处于低电平时,停止 TM00 操作,且 TI0n0 引脚输入高电平后,立即使能 TM00。
→ 如果指定 TI0n0 引脚为上升沿或双边沿有效,则使能 TM00 后随即检测到上升沿。
使用说明 U18891CA1V0AN
13
第四章 设置方法
注意事项 4. TI000 引脚的有效沿用作计数时钟时,对其以 fXP 频率进行采样来抑制噪声。当采样到有效沿且两次检
测到有效电平时才执行捕获操作,因而抑制了尖脉冲噪声。
5. 当 TI010/TO00/Pxx 引脚用作有效沿的输入引脚(TI010)时,则不能将其用作定时器输出引脚
(TO00)。当 TI010/TO00/Pxx 引脚用作定时器输出引脚 (TO00)时,则不能将其用作有效沿的输
入引脚(TI010)。
(5) 设置 TOC00 寄存器
该寄存器控制 16 位定时器/ 事件计数器 00 输出控制器的工作。其用于设置/ 复位定时器输出 F/F 、允许或禁止输
出反相、定时器输出(TO00 引脚输出)、单次脉冲输出操作以及用软件设置单次脉冲输出触发器。
图 4-5. 16 位定时器输出控制寄存器 00 (TOC00 )的格式
TOC00
0
OSPT00 OSPE00 TOC004
LVS00 LVR00
TOC001
TOE00
定时器输出控制
0
禁止输出(固定输出为 0电平)。
1
允许输出。
CR000 和 TM00匹配时定时器 F/F的控制
0
禁止反相操作。
1
允许反相操作。
定时器输出F/F 状态设置
0 0
0 1
1 0
1 1
不改变。
复位(0) 定时器输出F/F。
设置(1) 定时器输出F/F。
设置禁止。
CR010 和 TM00匹配时定时器 F/F的控制
0
1
禁止反相操作。
允许反相操作。
单次脉冲输出操作控制
0
连续脉冲输出模式。
1
单次脉冲输出模式
注
。
用软件控制单次脉冲输出触发器
0
不使用单次脉冲输出触发器。
1
使用单次脉冲输出触发器。
注 单次脉冲输出模式通常仅用于自由运行模式和由 TI000 引脚有效沿设置的清零并启动模式中操作。在基于
TM00 和 CR000 匹配而清零并启动模式下,因为不发生溢出,所以不可能有单次脉冲输出。
14
使用说明 U18891CA1V0AN
第四章 设置方法
注意事项 1. 在设置除 OSPT00 外的位之前,必须停止定时器操作。
2. 如果读取 LVS00和 LVR00 ,读出值为 0。
3. 设置数据后 OSPT00 自动清零,故读出值为 0。
4. 在非单次脉冲输出模式下,不要将 OSPT00 设置为 1。
5. 连续将 OSPT00 设置为(1)时,写入间隔至少需要用 PRM00 寄存器所选择计数时钟的两个周
期。
6. 当 TOE00 为 0 时,用 8 位存储器操作指令同时设置 TOE00、LVS00 和 LVR00。当 TOE00 为 1
时,用 1 位存储器操作指令可设置 LVS00 和 LVR00 。
7. 当 TI010/TO00/Pxx 引脚用作有效沿的输入引脚(TI010)时,则不能将其用作定时器输出引脚
(TO00 )。当 TI010/TO00/Pxx 引脚用作定时器输出引脚(TO00 )时,则不能将其用作有效沿
的输入引脚(TI010 )。
(6) 设置 TMC00 寄存器
该寄存器设置 16 位定时器/事件计数器 00 的 操作模式、 TM00 计数器清零模式、输出时序以及检测溢出。
TMC00
0 0 0 0
图 4-6. 16 位定时器模
TMC003 TMC002 TMC001
式控制寄存器 00 (TMC00 )的格式
OVF00
16位定时器计数器 00( TM00)的溢出检测
0
未检测到溢出。
1
检测到溢出。
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
操作模式和清除
模式的选择
操作停止
(TM00 清除为
0 )。
自由运行模式。
在TI000引脚的
有效沿发生清零
并启动。
TM00 和CR000
匹配时发生清零
并启动。
TO00 反相时序
的选择
不改变 不产生
TM00 和CR000
匹配或TM00 和
CR010匹配。
TM00 和 CR000
匹配或 TM00 和
CR010匹配或
TI000引脚有效
沿。
−
TM00 和 CR000
匹配或 TM00 和
CR010匹配。
TM00 和 CR000
匹配或 TM00 和
CR010匹配或
TI000引脚有效
沿。
中断请求的产生
<当用作比较寄
存器时>
TM00 和CR000
匹配或TM00 和
CR010匹配的基
础上产生。
<当用作捕获寄
存器时>
在TI000引脚或
TI010引脚的有
效沿产生。
使用说明 U18891CA1V0AN
15
第四章 设置方法
注意事项 1. 当一个非 0 值和 0 (操作停止模式)被分别设置到 TMC002 和 TMC003 时,启动 TM00 计数器的
操作。若要停止操作,应分别将 TMC002 和 TMC003 设置为 0 。
2. 停止定时器操作后写入除 OVF00 位之外的标志位。
3. 当定时器停止时,即使信号输入到 TI000/TI010 引脚也不发生定时器计数和定时器中断。
4. 当 TI000 引脚的有效沿选作计数时钟时,应在设置为停止模式或系统时钟停止模式前停止定时器
操作。否则,当系统时钟启动时定时器可能会出错。
5. 停止定时器操作后用 PRM00 寄存器的位 4和位 5 设置 TI000 引脚的有效沿。
6. 如果在基于 TM00 和 CR000 匹配而清零并启动模式下,或基于 TI000 引脚的有效沿而清零并启
动模式下,或选择为自由运行模式下,当 CR000 寄存器的设定值是 FFFFH 且 TM00 计数器值从
FFFFH 至 0000H 变化时, OVF00 标志设置为 1。
7. TM00 计数器溢出后,在下一个计数时钟计数之前( TM00 计数器变为 0001H 前),即使清除了
OVF00 标志, TM00 计数器仍被重置并禁止清零。
8. 在计数时钟下降沿执行捕获操作,而中断请求(INTTM0n0: n = 0, 1)发生在下一个计数时钟
的上升沿。
16
使用说明 U18891CA1V0AN
第四章 设置方法
[例1] 用外部触发进行单次脉冲输出:
(计数时钟: f
2
XP/2
( fXP = 2 MHz); TI000引脚的有效沿:上升沿; TO00输出初始值: 低电平;
自检测到有效沿到有效输出的延迟时间:1 ms ;有效脉冲宽度:10 ms )
(与举例源程序内容相同)
图 4-7. 用外部触发进行单次脉冲输出的时序举例 (指定为上升沿)
备注 N < M 。
(1) 寄存器设置
<1> CRC00
0 0 0 0 0
0 x 0
CR000 操作模式的选择
0
用作比较寄存器操作。
CR000 捕获触发器的选择
(因为 CR000用作比较寄存器所以设置无效。)
x
CR010 操作模式的选择
0
用作比较寄存器操作。
使用说明 U18891CA1V0AN
17
第四章 设置方法
<2> CR010
设定值( N): 1999
• 计数时钟 fsam = 8 [MHz]/22 = 2 [MHz]
• 延迟时间 1 [ms] = 1000 [
→ N = 1000 [
μ
s] × 2 [MHz] − 1 = 1999
μ
s] = ( N + 1) /2 [MHz]
<3> CR000
设定值 ( M): 21999
• 计数时钟 fsam = 8 [MHz]/2
• 有效宽度: 10 [ms] = 10000 [
→ M = 10000 [
μ
s] × 2 [MHz] + 1999 = 20000 + 1999 = 21999
2
= 2 [MHz]
μ
s] = ( M − N )/2 [MHz]
注意事项 以上<2> 和<3> 中提到的设定值是 N 小于 M 条件下的举例。若 N 大于 M ,CR010 寄存器用于设置有效
宽度而 CR000 寄存器用于设置延迟时间。不要设置成 N 等于 M 。此外,不要将 CR000 寄存器和
CR010 寄存器设置为 0000H 。
<4> PRM00
x x
0 1
0
0
0 1
计数时钟 ( fsam) 的选择
2
f
XP/2
0 1
TI000 引脚有效沿的选择
0 1
上升沿
TI010引脚有效沿的选择
x x
(因为不用TI010 引脚所以设置无效。但禁
止设置为 “1 ,0” 。)
18
使用说明 U18891CA1V0AN
<5> TOC00
0 0
1 1 0
1 1 1
第四章 设置方法
定时器输出控制
1
CR000 和 TM00匹配时定时器 F/F 的控制
1
定时器输出 F/F 状态设置
0 1
CR010 和 TM00匹配时定时器 F/F 的控制
1
单次脉冲输出操作控制
1
用软件控制单次脉冲输出触发器
0
允许输出。
允许反相操作。
复位 (0) 定时器输出F/F。
允许反相操作。
单次脉冲输出模式。
不使用单次脉冲输出触发器。
<6> TMC00
0 0 0 0 1 0 0/1 0
16位定时器计数器 00 ( TM00)的溢出检测
0
未检测到溢出。
1 0 0
操作模式和清除
模式的选择
在TI000 引脚有
效沿发生清零并
启动。
<7> Px, PMx, PMCx
78K0S/KA1+ 和 78K0S/KB1+ 微控制器 P31 = 0 PM30 = 1,
78K0S/KY1+ 和 78K0S/KU1+ 微控制器 P21 = 0 PM20 = 1,
Px 寄存器 PMx 寄存器 PMCx 寄存器
PM31 = 0
PM21 = 0
TO00反相时序
的选择
−
不需要设置。
PMC20 = 0,
PMC21 = 0
中断请求的产生
TM00 和CR000
匹配或 TM00
和CR010 匹配
时产生。
使用说明 U18891CA1V0AN
19
第四章 设置方法
(2) 举例程序
在下面实例中, (1) 寄存器设置中的 “x”设置为 “0”。
<1> 汇编语言 (当使用 78K0S/KA1+ 和 78K0S/KB1+ 微控制器时)
CLR1 P3.1
SET1 PM3.0
CLR1 PM3.1
MOV CRC00, #00000000B
MOVW CR010, #1999
MOVW CR000, #21999
MOV PRM00, #00010001B
MOV TOC00, #00110111B
MOV TMC00, #00001000B
<2> C 语言 (当使用 78K0S/KA1+和 78K0S/KB1+ 微控制器时)
P3.1 = 0;
PM3.0 = 1;
PM3.1 = 0;
CRC00 = 0b00000000;
CR010 = 1999;
CR000 = 21999;
PRM00 = 0b00010001;
TOC00 = 0b00110111;
TMC00 = 0b00001000;
20
使用说明 U18891CA1V0AN
第四章 设置方法
[例2] 用软件触发进行单次脉冲输出:
(计数时钟: f
2
XP/2
( fXP = 2 MHz); TO00输出初始值: 低电平;自检测到软件触发到有效输出的
延迟时间: 1 ms ;脉冲有效宽度: 10 ms )
图 4-8. 用软件触发进行单次脉冲输出的时序举例
备注 N < M 。
(1) 寄存器设置
<1> CRC00
0 0 0 0 0
0 x 0
CR000 操作模式的选择
0
用作比较寄存器操作。
CR000 捕获触发器的选择
(因为 CR000用作比较寄存器 ,所以设置无效。)
x
CR010操作模式的选择
0
用作比较寄存器操作。
使用说明 U18891CA1V0AN
21
第四章 设置方法
<2> CR010
设定值 ( N): 1999
• 计数时钟: fsam = 8 [MHz]/22 = 2 [MHz]
• 延迟时间: 1 [ms] = 1000 [
→ N = 1000 [
μ
s] × 2 [MHz] − 1 = 1999
μ
s] = ( N + 1) /2 [MHz]
<3> CR000
设定值 ( M): 21999
• 计数时钟: fsam = 8 [MHz]/2
• 有效宽度: 10 [ms] = 10000 [
→ M = 10000 [
μ
s] × 2 [MHz] + 1999 = 20000 + 1999 = 21999
2
= 2 [MHz]
μ
s] = ( M − N )/2 [MHz]
注意事项 以上<2> 和<3> 中提到的设定值是 N 小于 M 条件下的举例。若 N 大于 M ,则 CR010 寄存器用于设置有
效宽度而 CR000 寄存器用于设置延迟时间。不要设置成 N 等于 M 。此外,不要将 CR000 和 CR010 寄
存器设置为 0000H 。
<4> PRM00
x x
x x
0
0
0 1
计数时钟 ( fsam) 的选择
2
f
XP/2
0 1
TI000 引脚有效沿的选择
x x
(因为不使用TI000 引脚,所以设置无效。
但禁止设置为“1 , 0” 。)
TI010引脚有效沿的选择
x x
(因为不使用用TI010 引脚,所以设置无
效。但禁止设置为“1 , 0” 。)
22
使用说明 U18891CA1V0AN
<5> TOC00
0 0
1 1 0
1 1
<6> TMC00
0 0 0 0 0 1 0 0
第四章 设置方法
1
定时器输出控制
CR000 和 TM00匹配时定时器 F/F 的控制
定时器输出 F/F 状态设置
CR010 和 TM00匹配时定时器 F/F 的控制
单次脉冲输出操作控制
用软件控制单次脉冲输出触发器
* 若要进行单次脉冲输出,将 OSPT00 设置为 1。
16位定时器计数器 00( TM00)的溢出检测
1
允许输出。
1
允许反相操作。
0 1
1
允许反相操作。
1
单次脉冲输出模式。
0
不使用单次脉冲输出触发器。
0
未检测到溢出。
复位(0 )定时器输出F/F 。
0 1 0
操作模式和清除
模式的选择
自由运行模式。 TM00 和CR000
TO00 反相时序
的选择
匹配或 TM00
和CR010 匹
配。
中断请求的产生
TM00 和CR000
匹配或 TM00 和
CR010 匹配时产
生。
<7> Px, PMx, PMCx
78K0S/KA1+ 和 78K0S/KB1+ 微控制器 P31 = 0 PM31 = 0 不需要设置。
78K0S/KY1+ 和 78K0S/KU1+ 微控制器 P21 = 0 PM21 = 0 PMC21 = 0
Px 寄存器 PMx 寄存器 PMCx 寄存器
使用说明 U18891CA1V0AN
23
第四章 设置方法
(2) 举例程序
在下面实例中, (1) 寄存器设置中的 “x”设置为 “0”。
<1> 汇编语言 (当使用 78K0S/KA1+ 和 78K0S/KB1+ 微控制器时。)
CLR1 P3.1
CLR1 PM3.1
MOV CRC00, #00000000B
MOVW CR010, #1999
MOVW CR000, #21999
MOV PRM00, #00000001B
MOV TOC00, #00110111B
MOV TMC00, #00000100B
SET1 OSPT00
<2> C 语言(当使用 78K0S/KA1+ 和 78K0S/KB1+ 微控制器时。)
P3.1 = 0;
PM3.1 = 0;
CRC00 = 0b00000000;
CR010 = 1999;
CR000 = 21999;
PRM00 = 0b00000001;
TOC00 = 0b00110111;
TMC00 = 0b00000100;
OSPT00 = 1;
24
使用说明 U18891CA1V0AN
初始化比较值
初始化比较值
CR000
设置计数时钟和
有效沿
设置单次脉冲
输出
启动定时器
操作
停止定时器操
作后设置 CR0x0
寄存器
设置 TO00
输出初始值
启动定时器
操作
第四章 设置方法
[ 举例源程序中的摘录]
从附录 A 程序清单 中摘录与 16 位定时器/事件计数器 00功能相关的内容,如下所示: (和上面[例 1 ] 中提到的内
容相同)。
(1) 汇编语言
XMAIN CSEG UNIT
RESET_START:
CR010
MOVW AX, #2000-1 ; 设置延迟时间为 1 ms。
MOVW CR010, AX
ADDW AX, #20000 ; 设置有效脉冲宽度为 10 ms。
MOVW CR000, AX
MOV PRM00, #00010001B
MOV TOC00, #00110111B ; 单次脉冲输出模式,CR000 或 CR010 与 TM00 匹配时输出反相
; 缺省为 0 输出,定时器输出使能。
MOV TMC00, #00001000B
U MOV CRC00, #00000000B U ; 将CR000 和 CR010 用作比较寄存器。
INTERRUPT_P1:
MOV TMC00, #00000000B
MOVW AX, CR000 ; 读取 CR000。
ADDW AX, #20000 ; 有效脉冲宽度增加 10 ms。
BNC $CHANGE_CR ; 如果不发生溢出则进行转移。
MOVW AX, #22000-1 ; 初始化有效宽度为 10 ms 。
CHANGE_CR:
MOVW CR000, AX
SET1 LVR00
MOV TMC00, #00001000B
•
•
•
; 初始化比较值 CR010。
; 初始化比较值 CR000。
; 计数时钟= fxp/4 = 2 MHz, TI000 引脚的有效沿 = 上升沿。
; 启动定时器操作(检测到 TI000 引脚有效沿时清零并启动)。
•
•
•
•
•
•
; 停止定时器操作。
; 写入 CR000。
; 设置为缺省 0 输出。
; 启动定时器操作(检测到 TI000 引脚有效沿时清零并启动)。
•
•
•
设置 CR000 和 CR010
的操作模式为比较寄存器
使用说明 U18891CA1V0AN
25
(2) C 语言
void hdwinit(void){
unsigned char ucCnt200us; /* 用于 200 us 等待的 8位变量。*/
初始化比较值
CR000
设置计数时钟
和有效沿
为 0 输出,定时器输出使能。*/
设置单次脉冲
输出
__interrupt void fn_intp1 (){
停止定时器操作后
设置 CR0x0 寄存
i f (__getcy()){ /* 发生溢出时执行处理。*/
}
}
return;
}
第四章 设置方法
初始化比较值
CR010
UCRC00 = 0b00000000;U /* 将CR000 和CR010 用作比较寄存器。*/
UCR010 = 2000 - 1;U /* 初始延迟时间为 1 ms。 */
UCR000 = CR010 + 20000;U /* 初始化有效脉冲宽度为 10 ms 。*/
UPRM00 = 0b00010001;U /* 计数时钟= fxp/4 = 2 MHz, TI000 引脚的有效沿 = 上升沿。 */
UTOC00 = 0b00110111;U /* 单次脉冲输出模式,CR000 或CR010 与TM00 匹配时输出反相, 缺省
UTMC00 = 0b00001000;U /* 启动定时器操作(检测到TI000 引脚有效沿时清零并启动)。 */
•
•
•
设置 CR000 和 CR010
的操作模式为比较寄存器
•
启动定时器
操作
•
•
•
•
•
UTMC00 = 0b00000000; U /* 停止定时器操作。*/
UCR000 = CR000 + 20000; U /* 有效脉冲宽度增加 10 ms 。 */
器
U CR000 = 22000 - 1; U /* 初始化有效脉冲宽度为 10 ms 。 */
设置 TO00
输出初始值
UTMC00 = 0b00001000; U /*启动定时器操作(检测到 TI000 引脚有效沿时清零并启动)。
ULVR00 = 1; U / * 设置为缺省 0 输出。*/
启动定时器操作
*/
26
使用说明 U18891CA1V0AN
第四章 设置方法
2B 4.2 设置单次脉冲的有效宽度
该举例程序中,16 位定时器/ 事件计数器 00 的单次脉冲输出功能用于检测输入 TI000 引脚的外部信号的上升沿,在
给定的延迟时间过后输出一个单次脉冲。
• 自检测到有效沿到有效输出的延迟时间= ( N + 1) /fsam
• 有效输出宽度= ( M − N )/fsam
备注 N: CR010 寄存器设定值。
M: CR000 寄存器设定值。
fsam: 16 位定时器/事件计数器 00 的计数时钟频率。
N < M
计算举例: CR010 寄存器的设定值为 1,999 且 CR000 寄存器的设定值为 21,999 (以 fsam = 2 MHz =
2,000 kHz 工作时):
• 延迟时间= ( N + 1) /fsam = ( 1,999 + 1) /2,000 [kHz] = 1 [ms]
• 有效宽度 = ( M − N)/fsam = (21,999 − 1,999)/2,000 [kHz] = 10 [ms]
此外, CR000 寄存器的设定值和有效脉冲宽度依照开关输入次数而发生变化。
开关输入次数
0 21,999
1 41,999
2 61,999
注
CR000 寄存器设定值 CR010 寄存器设定值 单次脉冲输出的有效宽度
1,999
10 ms
(( 21,999 − 1,999 ) /2,000 kHz)
20 ms
(( 41,999 − 1,999 ) /2,000 kHz)
30 ms
((61,999 − 1,999 )/2,000 kHz )
注 第三次开关输入后,有效脉冲宽度从第零次开关输入重复。
使用说明 U18891CA1V0AN
27
3B 4.3 设置抖动检测时间
该举例程序中为了处理开关输入(INTP1 中断产生)期间的抖动,通过设置 10 ms 的等待时间来抑制最长达 10 ms
的抖动。
[举例源程序中的摘录 ]
(1) 汇编语言
INTERRUPT_P1:
设置等待时间
PUSH AX ; 将 AX 寄存器数据存入堆栈。
PUSH BC ; 将 BC 寄存器数据存入堆栈。
CHAT_LOOP2:
CHAT_LOOP1:
U DBNZ C, $CHAT_LOOP2
经过上述设置,等待时间设置为 10 ms。
等待时间可用下式计算。
• 一个 CPU 时钟= 1/8 [MHz] = 0.125 [
• 时钟的数目= (a) + {(b) + ((c) + (d)) × 211 + (e) + (f)} × 47
• 等待时间= [(a) + {(b) + ((c) + (d)) × 211 + (e) + (f)} × 47] × 0.125 [
= [6 + {6 + ( 2 + 6) × 211 + 2 + 6} × 47] × 0.125 [
= 80000 × 0.125 [
(2) C 语言
第四章 设置方法
UMOV C, #47U ; 设置主循环的计数值。
UMOV B, #211U ; 设置子循环的计数值。
UNOP
UDBNZ B, $CHAT_LOOP1
UNOP
μ
s]
重复 ( c) + ( d) 211次。
μ
s]
μ
s] = 10000 [μs] = 10 [ms]
重复(b )至
(f )47 次。
μ
s]
指令的时钟数目
(a )6 个时钟
(b )6 个时钟
(c )2 个时钟
(d )6 个时钟
(e )2 个时钟
(f ) 6 个时钟
__interrupt void fn_intp1(){
unsigned int unChat; /* 用于抑制抖动的 8 位变量*/
设置等待时间
U for ( unChat = 0; unChat <1111; unChat++) U { /* 等待 10 ms 的循环*/
NOP();
}
28
经过上面的“for”循环语句,等待时间设置为大约 10 ms。
使用说明 U18891CA1V0AN
第五章 用系统仿真器SM+进行操作检验
使用选择 图标所下载的汇编语言文件(源文件+工程文件),本章描述了如何使用 78K0S/Kx1+ 的系统仿真器
SM+ 运行举例程序。
注意事项 78K0S/Kx1+ 的系统仿真器 SM+ 不支持 78K0S/KU1+ 微控制器(直至 2007 年 09 月)。因此
78K0S/KU1+微控制器的操作不能由 78K0S/Kx1+的系统仿真器 SM+来检验。
5.1 连编举例程序
为使用 78K0S/Kx1+ 的系统仿真器 SM+ (以下简称“SM+” )来检验举例程序的操作,SM+ 必须在连编举例程序之后
启动。本节介绍了一个操作次序实例:从使用集成开发环境 PM+ 连编举例程序开始,然后使用选择 图标所下载的
汇编语言文件(源文件+工程文件),直到启动 SM+ 。关于如何编译其他下载的程序,参见 78K0S/Kx1+举例程序启
动指南使用说明中的 第三章 注册集成开发环境 PM+工程项目和执行编译。
关于如何操作 PM+ 的细节,参见 PM+ 工程管理用户手册 。
(1) 启动 PM+。
(2) 单击 [File]菜单中 [Open Workspace] 选项,选择 “tm00one.prw”并单击 [Open]按钮。创建一个可自动读取源文件
的工作空间。
(3) 选择 [Project]菜单中 [Project Settings]选项。 [Project Settings]窗口打开,选择所用的器件名称(缺省选用具有
最大容量 ROM 或 RAM 的器件),然后单击[OK] 按钮。
选择器件名称
单击[OK] 按钮
单击
使用说明 U18891CA1V0AN
29
第五章 用系统仿真器 SM+进行操作检验
(4) 单击 ([Build → Debug]按钮)。当 “main.asm” 和 “op.asm” 源文件正常编译完成后,将显示 “I3500: Build
completed normally”信息。
(5) 单击信息框中的 [OK] 按钮以自启动 SM+。
单击
单击
SM+ 自动启动。
5.2 SM+ 的操作
本节介绍了检验 SM+的 I/O 面板窗口或时序图窗口操作的实例。
关于如何操作 SM+的详情,参见 SM+系统仿真器操作用户手册 。
[专栏] 编译链接错误
用 PM+进行编译时,当显示“A006 File not found ‘C:\NECTOOLS32\LIB78K0S\s0sl.rel’” 或“*** ERROR
F206 Segment ‘@@DATA’ can’t allocate to memory - ignored.”错误信息时,根据以下步骤改变编译选项设
置。
<1>选择 [Tool]菜单中 [Compiler Options]选项。
<2>显示 [Compiler Options]对话框,选择 [Startup Routine] 选项。
<3>取消选择 [Using Fixed Area of Standard Library]复选框。 (将其他复选框保持原状。)
当取消选择[Using Fixed Area of Standard Library]复选框时,允许使用一个位于 RAM 区域内被保护的 118 字
节区域作为固定标准库,但是,禁止使用标准库 (例如 getchar 函数和 malloc 函数)。
30
使用说明 U18891CA1V0AN
第五章 用系统仿真器 SM+进行操作检验
(1) 单击 PM+ 窗口的 [Build → Debug] 启动 SM+ 后(参见 5.1 ),将显示以下界面:(此界面为使用汇编
语言源文件时的界面。)
(2) 单击 ([Restart]按钮)。CPU复位后将执行程序同时显示如下界面:
单击
程序执行期间,
此处变为红色。
使用说明 U18891CA1V0AN
31
第五章 用系统仿真器 SM+进行操作检验
(3) I/O 面板窗口的拨动开关用作 TI000 引脚的外部脉冲输入。在程序执行期间点击拨动开关,输出一个单次脉冲,
当其有效时 [LED]点亮。
此外,单次脉冲输出的有效宽度依照 [SW]按钮的输入次数而发生变化。
分别检查 I/O 面板窗口中 [LED]的点亮时间,时序图窗口中的波形以及 [Watch] 窗口中 CR000 和 CR010 寄存器
的变化。
• [SW] 按钮输入次数: 0 次
I/O 面板窗口 [Watch] 窗口
点击
(按下→
弹起 )
(点亮
10 ms
(0 次 )
注 2
)
点击拨动开关 (上升沿检测)
时序图窗口
(a)
(b)
(a): 延迟时间 = (1999 + 1) × 0.5µ s = 1 ms
(b): 有效宽度 = (21999 − 1999) × 0.5µ s = 10 ms
注 1
• [SW] 按钮输入次数: 2 次
I/O 面板窗口 [Watch] 窗口
点击
(按下
→ 弹起)
(点亮
30 ms
(2 次 )
注 2
)
点击拨动开关(上升沿检测)
时序图窗口
(a)
(b)
(a): 延迟时间= (1999 + 1) × 0.5µs = 1 ms
(b): 有效宽度 = (61999 − 1999) × 0.5µ s = 30 ms
注 1. 第三次开关输入后,有效脉冲宽度从第零次开关输入重复。
2. 使用 PC的操作环境不同,实际点亮时间可能与此不同。
32
使用说明 U18891CA1V0AN
第五章 用系统仿真器 SM+进行操作检验
[补充 ] 设置 [SW] 按钮的保持时间少于 10 ms 以检验是否可以检测到抖动。
<1> 在工具栏选择 。
<2> 右击 I/O 面板窗口的 [SW] 按钮并选择 [Properties]。
<3> 在 “Hold Time”域中键入 “9”然后单击 [OK] 按钮。
键入“9”, 然后
单击 [OK] 按钮。
<4> 选择工具栏中的 。
<5> 执行程序并单击 [SW] 按钮。因为按钮保持时间是 9 ms ,所以即使单击 [SW]按钮,也将被视为抖动,因而
单次脉冲的有效宽度(CR000 寄存器的值)不会改变。
使用说明 U18891CA1V0AN
33
78K0S/KU1+用户手册
78K0S/KY1+用户手册
78K0S/KA1+用户手册
78K0S/KB1+用户手册
78K/0S系列指令用户手册
RA78K0S汇编语言程序包用户手册
CC78K0S C 编译器用户手册
PM+工程管理用户手册
SM+系统仿真器操作用户手册
78K0S/KA1+简化的 Flash写入手册 MINICUBE2信息
78K0S/Kx1+
使用说明
举例程序启动指南
举例程序(初始设置)LED灯开关控制
举例程序(中断)由开关输入产生的外部中断
举例程序(低压检测)电压低于2.7V时的复位
举例程序(16位定时器/事件计数器00)间隔定时器
举例程序(16位定时器/事件计数器00)外部事件计数器
举例程序(16位定时器/事件计数器00)脉冲宽度测量
举例程序(16位定时器/事件计数器00)PPG(可编程脉冲发生器)输出
第六章 相关文档
文档名称 日语/英语
PDF
PDF
PDF
PDF
PDF
语言
操作
语言
操作
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
34
使用说明 U18891CA1V0AN
附录 A 程序清单
78K0S/KB1 +微控制器源程序作为程序清单实例如下所示:
z main.asm (汇编语言版本)
;***************************************************************************
;
; NEC Electronics 78K0S/KB1+
;
;***************************************************************************
; 78K0S/KB1+ 举例程序
;***************************************************************************
; 16 位定时器 00 (单次脉冲输出)
;***************************************************************************
;<< 历史记录 >>
; 2007.7.-- 发布
;***************************************************************************
;
;<< 概要 >>
;
;
该举例程序提供了一个使用 16 位定时器 00 的单次脉冲输出功能实例。
;检测输入 TI000 引脚的外部信号的上升沿,
;给定的延迟时间过后,从 TO00 引脚输出一个宽度为 10 ms 的单次脉冲。
;有效的脉冲宽度依照每次的开关输入而发生变化。
;
;
; <
主要设置内容>
;
;
; -
停止看门狗定时器运行。
; -
设置低电压检测电压(VLVI)为 4.3 V +-0.2 V。
; -
在 VDD > = VLVI 后当检测到 VDD < VLVI 时,产生内部复位信号(低电压检测器)。
; -
设置 CPU 的时钟频率为 8 MHz 。
; -
设置供给外围硬件的时钟频率为 8 MHz 。
; -
设置外部中断 INTP1 的下降沿有效。
; -
设置在开关输入期间抖动的检测时间为 10ms 。
;
;
;
;
; <16 位定时器 00 的设置>
; -
操作模式:检测到 TI000 引脚有效沿 时清零并启动定时器计数。
; - 设置 TI000 引脚上升沿有效。
; - 计数时钟= fxp/4 (2 MHz)。
; - 将 CR000 和 CR010 用作比较寄存器。
; - 设置为单次脉冲输出模式。
使用说明 U18891CA1V0AN
35
附录 A 程序清单
; - TM00与 CR000 或 CR010匹配时输出反转。
; - 设置输出初始值为低电平(单次脉冲输出电平=高电平)。
; - 允许定时器输出。
; - 初始化 CR010 的延迟时间为 1 ms。
; - 初始化 CR000 的有效宽度为 10 ms。
; - 设置 P31 的输出锁存为低电平(以便将 TO00 用作输出)。
; - 设置 P31 为输出模式 (以便将 TO00 用作输出)。
;
;
; <开关输入次数与单次脉冲输出有效宽度>
;
; +-----------------------------------+
; | SW 输入| 单次脉冲 |
; | | 输出有效宽度 |
; |-----------------------------------|
; | 0 次 | 10 ms |
; | 1 次 | 20 ms |
; | 2 次 | 30 ms |
; +-----------------------------------+
; # 第三次开关输入后,有效脉冲宽度从第零次开关输入重复。
;
;
;<<I/O 端口设置>>
;
; 输入: P30、P43
; 输出:P00-P03、 P20-P23、 P31-P33、 P40-P42、 P44-P47、 P120-P123、 P130。
; # 所有未使用端口设置为输出模式。
;
;***************************************************************************
;==========================================================================
;
; 向量表
;
;==========================================================================
XVCT CSEG AT 0000H
DW RESET_START ;(00) RESET
DW RESET_START ;(02) - DW RESET_START ;(04) - DW RESET_START ;(06) INTLVI
DW RESET_START ;(08) INTP0
DW INTERRUPT_P1 ;(0A) INTP1
DW RESET_START ;(0C) INTTMH1
DW RESET_START ;(0E) INTTM000
DW RESET_START ;(10) INTTM010
DW RESET_START ;(12) INTAD
DW RESET_START ;(14) --
36
使用说明 U18891CA1V0AN
附录 A 程序清单
DW RESET_START ;(16) INTP2
DW RESET_START ;(18) INTP3
DW RESET_START ;(1A) INTTM80
DW RESET_START ;(1C) INTSRE6
DW RESET_START ;(1E) INTSR6
DW RESET_START ;(20) INTST6
;==========================================================================
;
; 定义内存堆栈区
;
;==========================================================================
XSTK DSEG AT 0FEE0H
STACKEND:
DS 20H ;内存堆栈区= 32 字节。
STACKTOP: ;
内存堆栈区的开始地址= FF00H 。
;***************************************************************************
;
;
复位后的初始化
;
;***************************************************************************
XMAIN CSEG UNIT
RESET_START:
;---------------------------------------------------------------------------
; 初始化堆栈指针
;---------------------------------------------------------------------------
MOVW AX, #STACKTOP
MOVW SP, AX ; 设置堆栈指针。
;---------------------------------------------------------------------------
; 初始化看门狗定时器
;---------------------------------------------------------------------------
MOV WDTM , #01110111B ;
停止看门狗定时器运行。
;---------------------------------------------------------------------------
; 检测低电压+ 设置时钟
;---------------------------------------------------------------------------
;----- 设置时钟<1> -----
MOV PCC, #00000000B ; 供给 CPU (fcpu)的时钟 = fxp (= fx/4 = 2 MHz)。
MOV LSRCM, #00000001B ;
停止内部低速振荡器的振荡。
;----- 检查复位信号源-----
使用说明 U18891CA1V0AN
37
附录 A 程序清单
MOV A, RESF ; 读取复位信号源。
BT A.0, $SET_CLOCK ;
LV I 复位期间,省略后续的 LVI 相关处理并进入 SET_CLOCK。
; ----- 设置低电压检测 ---- MOV LVIS, #00000000B ; 设置低电压检测电平 (VLVI) 为 4.3 V +- 0.2 V。
SET1 LVION ; 使能低电压检测器操作。
MOV A, #40 ; 赋 200 us 的等待计数值。
; ----- 200 us 等待 ----WAIT_200US:
DEC A
BNZ $WAIT_200US ; 0.5[us/clk] x 10[clk] x 40[计数值] = 200[us]。
; ----- VDD >= VLVI 等待处理 ----WAIT_LVI:
NOP
BT LVIF, $WAIT_LVI ; 如果 VDD < VLVI 则进行转移。
SET1 LVIMD ; 设置使得 VDD < VLVI时产生内部复位信号。
; ----- 设置时钟 <2> ----SET_CLOCK:
MOV PPCC, #00000000B ; 供给外围硬件的时钟 (fxp) = fx (= 8 MHz)。
; -> 供给 CPU ( fcpu)的时钟= fxp = 8 MHz。
;--------------------------------------------------------------------------; 初始化端口 0
;---------------------------------------------------------------------------
MOV P0, #00000000B ; 设置 P00-P03 的输出锁存为低电平。
MOV PM0, #11110000B ; 设置 P00-P03 为输出模式。
;--------------------------------------------------------------------------; 初始化端口 2
;---------------------------------------------------------------------------
MOV P2, #00000000B ; 设置 P20-P23 的输出锁存为低电平。
MOV PM2, #11110000B ; 设置 P20-P23 为输出模式。
;--------------------------------------------------------------------------; 初始化端口 3
;---------------------------------------------------------------------------
MOV P3, #00000000B ; 设置 P30-P33 的输出锁存为低电平。
MOV PM3, #11110001B ; 设置 P31-P33 为输出模式, P30/TI000 为输入模式。
38
使用说明 U18891CA1V0AN
附录 A 程序清单
;---------------------------------------------------------------------------
; 初始化端口 4
;---------------------------------------------------------------------------
MOV P4, #00000000B ; 设置 P40-P47 的输出锁存为低电平。
MOV PU4, #00001000B ; 将片内上拉电阻连接至 P43。
MOV PM4, #00001000B ; 设置 P40-P42 和 P44-P47 为输出模式, P43 为输入模式。
;---------------------------------------------------------------------------
; 初始化端口 12
;---------------------------------------------------------------------------
MOV P12, #00000000B ; 设置 P120-P123的输出锁存为低电平。
MOV PM12, #11110000B ; 设置 P120-P123 为输出模式。
;---------------------------------------------------------------------------
; 初始化端口 13
;---------------------------------------------------------------------------
MOV P13, #00000001B ; 设置 P130 的输出锁存为高电平。
;---------------------------------------------------------------------------
; 设置 16 位定时器 00
;---------------------------------------------------------------------------
MOV CRC00, #00000000B ; CR000 和 CR010用作比较寄存器。
MOVW AX, #2000-1 ; 设置延迟时间为 1 ms。
MOVW CR010, AX ; 初始化比较值 CR010。
ADDW AX, #20000 ; 设置有效宽度为 10 ms。
MOVW CR000, AX ;初始化比较值 CR000。
MOV PRM00, #00010001B ; 计数时钟= fxp/4 = 2 MHz, TI000引脚有效沿 = 上
升沿。
MOV TOC00, #00110111B ; 单次脉冲输出模式,CR000 或 CR010 与 TM00 匹配时
输出反相。
; 缺省为 0 输出, 定时器输出使能。
MOV TMC00, #00001000B ; 启动定时器操作 (检测到 TI000 引脚有效沿时清零并
启动)。
;---------------------------------------------------------------------------
; 设置中断
;---------------------------------------------------------------------------
MOV INTM0, #00000000B ; 设置 INTP1 的下降沿有效。
MOV IF0, #00H ; 预先清除无效的中断请求。
CLR1 PMK1 ; 不屏蔽 INTP1 中断。
EI ; 使能向量中断
;***************************************************************************
;
使用说明 U18891CA1V0AN
39
附录 A 程序清单
; 主循环
;
;***************************************************************************
MAIN_LOOP:
NOP
BR $MAIN_LOOP ; 进入 MAIN_LOOP。
;***************************************************************************
;
; 外部中断 INTP1
;
;***************************************************************************
INTERRUPT_P1:
PUSH AX ; 将 AX 寄存器的数据存入堆栈。
PUSH BC ; 将 BC 寄存器的数据存入堆栈。
; ----- 等待 10 ms 以处理抖动 ---- MOV C, #47 ; 为主循环设置计数值。
CHAT_LOOP2:
MOV B, #211 ; 为子循环设置计数值。
CHAT_LOOP1:
NOP
DBNZ B, $CHAT_LOOP1
NOP
DBNZ C, $CHAT_LOOP2
CLR1 PIF1 ; 清除 INTP1 中断请求。
;-----
抖动检测的确认 -----
BT P4.3, $END_INTP1 ; 如果没有开关输入则进行转移。
;----- 改变单次脉冲输出的延迟时间 -----
MOV TMC00, #00000000B ; 停止定时器操作。
MOVW AX, CR000 ; 读取 CR000。
ADDW AX, #20000 ; 有效脉冲宽度增加 10 ms。
BNC $CHANGE_CR ; 如果不发生溢出则进行转移。
MOVW AX, #22000-1 ; 初始化有效宽度为 10 ms。
CHANGE_CR:
MOVW CR000, AX ; 写入 CR000。
SET1 LVR00 ; 设置为缺省 0 输出。
MOV TMC00, #00001000B ; 启动定时器操作 (检测到 TI000 引脚的有效沿时清零
并启动)。
END_INTP1:
POP BC ; 恢复 BC 寄存器数据。
40
使用说明 U18891CA1V0AN
附录 A 程序清单
POP AX ; 恢复 AX寄存器数据。
RETI ; 从中断服务返回。
end
使用说明 U18891CA1V0AN
41
附录 A 程序清单
z main.c (C 语言版本)
/***************************************************************************
NEC Electronics 78K0S/KB1+
****************************************************************************
78K0S/KB1+ 举例程序
****************************************************************************
16 位定时器 00 (单次脉冲输出)
****************************************************************************
<<历史记录 >>
2007.7.-- 发布
****************************************************************************
<<概要 >>
该举例程序提供了一个使用 16 位定时器 00 的单次脉冲输出功能实例。
给定的延迟时间过后,检测输入到 TI000 引脚的外部信号的上升沿,
从 TO00 引脚输出一个宽度为 10 ms 的单次脉冲。
有效脉冲宽度依照每次的开关输入而发生变化。
<主要设置内容 >
-
声明由中断运行的函数 : INTP1 - > fn_intp1()。
- 停止看门狗定时器的运行。
- 设置低电压检测电压 (VLVI) 为 4.3 V +- 0.2 V。
-
在 VDD >= VLVI 后,当检测到 VDD < VLVI 时产生内部复位信号(低电压检测器)。
- 设置 CPU 的时钟频率为 8 MHz。
-
设置供给外围硬件的时钟频率为 8 MHz。
-
设置外部中断 INTP1 的下降沿有效。
-
设置在开关输入期间抖动检测时间为 10ms。
<16 位定时器 00 的设置 >
- 操作模式: 检测到 TI000 引脚有效沿时进入清零并启动模式。
- 设置 TI000 引脚上升沿有效。
- 计数时钟= fxp/4 ( 2 MHz)。
- 将 CR000 和 CR010 用作比较寄存器。
- 设置为单次脉冲输出模式。
- TM00与 CR000 或 CR010匹配时输出反转 。
- 设置输出初始值为低电平 (单次脉冲输出电平=高电平)。
- 允许定时器输出。
42
使用说明 U18891CA1V0AN
附录 A 程序清单
- 初始化 CR010 的延迟时间为 1 ms。
- 初始化 CR000 的有效宽度为 10 ms。
- 设置 P31 的输出锁存为低电平(以便将 TO00 用作输出)。
- 设置 P31 为输出模式(以便将 TO00 用作输出)。
<开关输入次数与单次脉冲输出有效宽度 >
+ -----------------------------------+
| SW 输入 | 单次脉冲 |
| | 输出有效宽度 |
|----------------------------------|
| 0 次 | 10 ms |
| 1 次 | 20 ms |
| 2 次 | 30 ms |
+ -----------------------------------+
# 第三次开关输入后,有效宽度从第零次开关输入重复。
<<I/O 端口设置 >>
输入: P30、 P43
输出: P00-P03、 P20-P23、 P31-P33、 P40-P42、 P44-P47、 P120-P123、 P130。
# 所有未用端口设置为输出模式。
****************************************************************************
/*===========================================================================
预处理指令 (#pragma)
===========================================================================*/
#pragma SFR /* SFR
#pragma EI /* EI
#pragma DI /* DI
#pragma NOP /* NOP
#pragma interrupt INTP1 fn_intp1 /*
中断函数声明:INTP1 */
名称可在 C 源程序层面上描述。*/
指令可在 C 源程序层面上描述。*/
指令可在 C 源程序层面上描述。*/
指令可在 C 源程序层面上描述。*/
#pragma realregister /* 使用立即寄存器引用函数。*/
/***************************************************************************
使用说明 U18891CA1V0AN
43
附录 A 程序清单
复位后的初始化
***************************************************************************/
void hdwinit(void){
unsigned char ucCnt200us; /*用于 200 us 等待的 8 位变量。*/
/*------------------------------------------------------------------------- 初始化看门狗定时器+ 检测低电压+ 设置时钟
--------------------------------------------------------------------------*/
/*初始化看门狗定时器*/
WDTM = 0b01110111; /* 停止看门狗定时器运行。*/
/* 设置时钟<1> */
PCC = 0b00000000; /*供给 CPU (fcpu)的时钟 = fxp (= fx/4 = 2 MHz)。 */
LSRCM = 0 b00000001; /*
停止内部低速振荡器的振荡。*/
/* 检查复位信号源*/
if (!(RESF & 0b00000001)){ /*省略
在 LVI 复位期间后续的 LVI 相关处理。 */
/* 设置低电压检测*/
LVIS = 0b00000000; /* 设置低电压检测电平(VLVI)为 4.3 V +-0.2 V 。*/
LVION = 1; / * 使能低电压检测器操作。*/
for (ucCnt200us = 0; ucCnt200us < 9; ucCnt200us++){ /* 等待大约 200 us。 */
N O P();
}
while (LVIF){ /* 等待 VDD >= VLVI。 */
N O P();
}
LVIMD = 1; / *
设置使得当 VDD < VLVI时产生内部复位信号。 */
}
/* 设置时钟<2> */
PPCC = 0b00000000; /* 供给外围硬件的时钟 (fxp) = fx (= 8 MHz)。
->供给 CPU 的时钟 (fcpu) = fxp = 8 MHz *。/
/*--------------------------------------------------------------------------
44
使用说明 U18891CA1V0AN
附录 A 程序清单
初始化端口 0
--------------------------------------------------------------------------*/
P0 = 0b00000000; /* 设置 P00-P03 的输出锁存为低电平。 */
PM0 = 0b11110000; /* 设置 P00-P03 为输出模式 。 */
/*------------------------------------------------------------------------- 初始化端口 2
--------------------------------------------------------------------------*/
P2 = 0b00000000; /* 设置 P20-P23 的输出锁存为低电平。 */
PM2 = 0b11110000; /* 设置 P20-P23 为输出模式。 */
/*------------------------------------------------------------------------- 初始化端口 3
--------------------------------------------------------------------------*/
P3 = 0b00000000; /* 设置 P30-P33 的输出锁存为低电平。 */
PM3 = 0b11110001; /* 设置 P31-P33 为输出模式, P30/TI000 为输入模式。 */
/*------------------------------------------------------------------------- 初始化端口 4
--------------------------------------------------------------------------*/
P4 = 0b00000000; /* 设置 P40-P47 的输出锁存为低电平。 */
PU4 = 0b00001000; /* 将片内上拉电阻连接至 P43。 */
PM4 = 0b00001000; /* 设置 P40-P42 和 P44-P47 为输出模式, P43 为输入模式。 */
/*------------------------------------------------------------------------- 初始化端口 12
--------------------------------------------------------------------------*/
P12 = 0b00000000; /* 设置 P120-P123的输出锁存为低电平。 */
PM12 = 0b11110000; /* 设置 P120-P123 为输出模式。 */
/*------------------------------------------------------------------------- 初始化端口 13
--------------------------------------------------------------------------*/
P13 = 0b00000001; /*设置 P130 的输出锁存为高电平。 */
/*------------------------------------------------------------------------- 设置 16 位定时器 00
--------------------------------------------------------------------------*/
CRC00 = 0b00000000; /* CR000 和 CR010用作比较寄存器。 */
CR010 = 2000 - 1; / * 初始化延迟时间为 1 ms。 */
CR000 = CR010 + 20000; /* 初始化有效宽度为 10 ms。 */
PRM00 = 0b00010001; /* 计数时钟= fxp/4 = 2 MHz, TI000 引脚的有效沿 =
上升沿。*/
使用说明 U18891CA1V0AN
45
附录 A 程序清单
TOC00 = 0b00110111; /* 单次脉冲输出模式,CR000 或 CR010 与 TM00 匹配时
输出反相 。
缺省为 0输出, 定时器输出使能。*/
TMC00 = 0b00001000; /* 启动定时器操作(检测到 TI000 引脚的有效沿时清零并
启动)。 */
/*------------------------------------------------------------------------- 设置中断
--------------------------------------------------------------------------*/
INTM0 = 0b00000000; /* 设置 INTP1 下降沿有效。 */
IF0 = 0x00; / * 清除无效的中断请求。*/
PMK1 = 0; / * 不屏蔽 INTP1 中断。*/
return;
}
/**************************************************************************
主循环
***************************************************************************/
void main(void){
EI(); / * 使能向量中断。*/
while (1) {
NOP();
}
}
/***************************************************************************
中断 INTP1
***************************************************************************/
__interrupt void fn_intp1(){
unsigned int unChat; /* 用于抑制抖动的 8 位变量。*/
for (unChat = 0; unChat <1111; unChat++) { /* 等待 10 ms的循环。 */
NOP();
}
PIF1 = 0; / * 清除 INTP1 中断请求。*/
if (!P4.3){ / *如果 SW 按下长达 10 ms 或更长时间则执行处理。*/
46
使用说明 U18891CA1V0AN
附录 A 程序清单
TMC00 = 0b00000000; /* 停止定时器操作。*/
CR000 = CR000 + 20000; /* 有效脉冲宽度增加 10 ms 。*/
if (__getcy()){ /* 发生溢出时执行处理。*/
CR000 = 22000 - 1; /* 初始化有效宽度为 10 ms。 */
}
LVR00 = 1; / * 设置为缺省 0 输出。*/
TMC00 = 0b00001000; /* 启动定时器操作(检测到 TI000 引脚有效沿时
清零并启动)。 */
}
return;
}
使用说明 U18891CA1V0AN
47
附录 A 程序清单
z op.asm (汇编语言版本和 C 语言版本通用)
;===========================================================================
;
; 选项字节
;
;===========================================================================
OPBT CSEG AT 0080H
DB 10011100B ;
选项字节区域。
; ||||
; |||+----------; | ++-----------
可用软件停止内部低速振荡器。
内部高速振荡时钟 (8 MHz)选作系统时钟信号源。
; +-------------- P34/RESET 引脚用作 RESET 引脚。
DB 11111111B ;
保护字节区域(用于自编程模式)。
; ||||||||
; ++++++++----------
所有块都能被写入或擦除。
end
48
使用说明 U18891CA1V0AN
附录 B 版本修订历史
版本 出版日期 页码 修订
第一版 2008 年02 月
− −
使用说明 U18891CA1V0AN
49
详细信息请联系:
中国区
MCU 技术支持热线:
电话:+86-400-700-0606 (普通话)
服务时间:9:00-12:00,13:00-17:00 (不含法定节假日)
网址:
http://www.cn.necel.com/ (中文)
http://www.necel.com/ (英文)
[ 北京]
日电电子(中国)有限公司
中国北京市海淀区知春路 27 号
量子芯座 7,8,9,15 层
电话:(+86)10-8235-1155
传真:(+86)10-8235-7679
[ 深圳]
日电电子(中国)有限公司深圳分公司
深圳市福田区益田路卓越时代广场大厦 39 楼
3901 ,3902 ,3909 室
电话:(+86 )755-8282-9800
传真:(+86 )755-8282-9899
[ 上海]
日电电子(中国)有限公司上海分公司
中国上海市浦东新区银城中路 200 号
中银大厦 2409-2412 和 2509-2510 室
电话:(+86)21-5888-5400
传真:(+86)21-5888-5230
上海恩益禧电子国际贸易有限公司
中国上海市浦东新区银城中路 200 号
中银大厦 2511-2512 室
电话:(+86)21-5888-5400
传真:(+86)21-5888-5230
[ 香港]
香港日电电子有限公司
香港九龙旺角太子道西 193 号新世纪广场
第 2 座 16 楼 1601-1613 室
电话: (+852)2886-9318
传真: (+852)2886-9022
2886-9044
[成都 ]
日电电子(中国)有限公司成都分公司
成都市二环路南三段 15 号天华大厦 7 楼 703 室
电话:(+86)28-8512-5224
传真:(+86)28-8512-5334