SM59R16A2 参考程序使用手册

SM59R16A2 参考程序
使用手册
SM59R16A2 参考程序使用手册
适用微控制器型号:SM59R16A2、SM59R08A2
内 容
1. 概要 ............................................................................................................................................................... 2
1-1 简介 ...................................................................................................................................................... 2
1-2 开发平台 .............................................................................................................................................. 2
1-2 档案配置 .............................................................................................................................................. 2
1-3 使用方法 .............................................................................................................................................. 3
2. 周边功能函式 ............................................................................................................................................... 4
2-1 I/O_7Segment...................................................................................................................................... 4
2-2 Interrupt.............................................................................................................................................. 6
2-3 Timer ................................................................................................................................................... 8
2-4 模拟数字转换(ADC)........................................................................................................................ 15
2-5 16x2 字符型 LCD 显示器................................................................................................................. 19
2-6 内部 EEPROM 功能 (Internal EEPROM) ................................................................................. 26
2-7 I2C 模块 ............................................................................................................................................. 29
2-8 Microwire 模块 ................................................................................................................................. 35
2-9 Pulse Width Modulation (PWM) .................................................................................................... 41
2-10 其它应用函式 ................................................................................................................................. 44
2-10-1 4x4 键盘............................................................................................................................... 44
2-10-2 蜂鸣器.................................................................................................................................. 44
2-10-3 延时函式.............................................................................................................................. 45
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
1
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
1. 概要
1-1 简介
SM59R16A2 系列 MCU 系一功能多,性能优异之微控制器。本公司为此提供使用者参考程序及
应用电路供使用者参阅。以期能协助使用者快速熟悉,顺利导入到所开发之项目中。
1-2 开发平台
本参考程序全部以 C 语言撰写,编译器(Compiler)为 Keil® C51 v7.5;连结器(Linker)为 BL51 v5.12;
整合环境为μVision 2。所有程序以新茂公司 SM59R16A2 64-pin demo board 为运行的 Target Board(note
1)
。微控制器(Micro- controller)为 SM59R16A2C25WP。并使用新茂 On-Chip Debugger 为开发工具。
1-2 档案配置
每个 .C 档案都有一个相对应的 .h 档案,提供函式宣告和定义。并按功能分类存放于各数据夹之
中。
\Demo
存放 64-pin demo board,demo 程序原始码。
\Demo\Output
存放 64-pin demo board,demo 程序之 Hex code 及 debug file。
\h
\I/O_7Segment
\Interrupt
\Timer
\ADC
\LCD
\InternalEE
\IIC
\Microwire
\PWM
\MISC
存放 SM59R16A2 所有缓存器定义,及一般常用之定义。
存放 I/O port 驱动七段显示器之函式。
存放中断之相关函式。
存放计时/计数器相关函式。
存放模拟数字转换器 ADC 相关函式。
存放 16x2 字符型 LCD 相关函式。
存放内建 EEPROM 相关函式。
存放 I2C 模块相关函式。
存放 Microwire 相关函式。
存放 PWM 相关函式。
存放其它应用例如:4x4 键盘、蜂鸣器、延时等相关函式。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
2
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
1-3 使用方法
1. 本公司提供完整原始程序代码,使用者可以复制其中的函式到您的项目上并加以修改,以符合您目
标板上之线路配置,并达到最佳化。(note 1)
2. 如果使用者要直接引入(Include),可将您的 project 放在各函式目录的同一阶层,如下图所示,并
将使用到之函式加入到您的 Keil® project 窗口中,重新编译(compile)即可。
FolderName
Your_project
---- main.c
h
Interrupt
Timer
ADC
:
MISC
Note 1: 使用者需依所使用的 Target Board 修改程序代码,(例如:修改 I/O pin 定义与所连接之接口设备)以确保在使用者的系统上正确
地运作。因此本公司不保证本程序代码可以直接运行于使用者的 Target Board。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
3
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2. 周边功能函式
2-1 I/O_7Segment
64-pin demo board 上配置两个七段显示器,并连接于 Port 2 上。七段显示器的输入为 BCD 码,
所以在输入之前需先经过数值转换。在 Segment7.h 中,定义 Seg7_Port 为 Port 2,使用者可依所使用
的 Target Board pin 脚配置进行调整。
函式宣告 :void Wr7SegmentDec(unsigned char Value)
功能
:将一个 byte 数据显示在七段显示器上(BCD)
含括檔
:Segment7.h
传入值
返回值
:Value 参数:欲写入七段显示器之数值,以 Byte 表示。
:无
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\MISC\Delay.h"
#include "..\IO_7Segment\Segment7.h"
void main()
{
unsigned char Counter;
Seg7_Port
Counter
= 0x00;
= 0;
while(1)
{
if(Counter<100)
{
Wr7SegmentDec(Counter);
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
4
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
Delay10mSec(100);
Counter ++;
}
else
Counter = 0;
}
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
5
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-2 Interrupt
SM59R16A2 的周边很多可以触发产生 CPU 中断,在此以两个外部中断(int0、int1)为例,说明中
断的初始化。其它另有 Timer、ADC 的中断,请参阅相关章节。
函式宣告 :void Int0Init(unsigned char IntConfig, unsigned char IntType)
功能
:初始化外部中断 0 (INT 0),并打开缓存器 IEN0 之 EA bit。
含括檔
:Interrupt.h
传入值
:欲设定外部中断 0 的组态及触发的型态。
IntConfig 参数:设定缓存器 IEN0。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
IntConfig ∈{ EXINT0_EN }
返回值
IntType 参数:设定触发型态。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
IntType ∈{ INT0_FALLEDGE,INT0_LOWLEVEL }
:无
本函式初始化 INT 0 之后,亦同时致能 INT 0。
函式宣告 :void Int1Init(unsigned char IntConfig, unsigned char IntType)
功能
:初始化外部中断 1 (INT 1),并打开缓存器 IEN0 之 EA bit。
含括檔
:Interrupt.h
传入值
:欲设定外部中断 1 的组态及触发的型态。
IntConfig 参数:设定缓存器 IEN0。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
IntConfig ∈{ EXINT1_EN }
IntType 参数:设定触发型态。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
IntType ∈{ INT1_FALLEDGE、INT1_LOWLEVEL }
返回值
:无
本函式初始化 INT 1 之后,亦同时致能 INT 1。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
6
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\MISC\Delay.h"
#include "..\Interrupt\Interrupt.h"
void Int0ISR(void);
unsigned char
SW1Pressed = 0;
void main()
{
Int0Init( EXINT0_EN, INT0_LOWLEVEL );
while(1)
{
if( SW1Pressed )
{
SW1Pressed = 0;
Delay10mSec(1);
}
}
}
void Int0ISR(void) interrupt 0 using 1
{
//Clear TCON_IE0 Flag. This flag can be cleared by software
//and is automatically cleared when interrupt is processed, too.
//INT0IF = 0;
SW1Pressed = 1;
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
7
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-3 Timer
函式宣告 :void Timer0_Init(unsigned char T0Mode, unsigned int TimerValue)
功能
:初始化定时器 0。
含括檔
:Timer.h
传入值
返回值
:欲设定定时器 0 的运作模式及初始值。
T0Mode 参数:设定缓存器 TMOD。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
T0Mode ∈{ T0_GATE_EN,T0_ASCOUNTER,T0_13B_MODE,T0_16B_MODE,
T0_8BREL_MODE,T0_IND8BMODE }
TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
:无
函式宣告 :void Timer1_Init(unsigned char T1Mode, unsigned int TimerValue)
功能
:初始化定时器 1。
含括檔
:Timer.h
传入值
返回值
:欲设定定时器 1 的运作模式及初始值。
T1Mode 参数:设定缓存器 TMOD。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
T1Mode ∈{ T1_GATE_EN,T1_ASCOUNTER,T1_13B_MODE,T1_16B_MODE,
T1_8BREL_MODE,T1_STOPMODE }
TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
8
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void Timer2_Init(unsigned char T2Control, unsigned int TimerValue)
功能
:初始化定时器 2。
含括檔
:Timer.h
传入值
:欲设定定时器 2 的运作模式及初始值。
T2Control 参数:设定缓存器 T2CON。常用的参数定义于 SM59R16A2_ExtraDef.h 档案中。
T2Control ∈{ T2_CLK12,T2_CLK24,
T2_FALL_EDGE,T2_RISE_EDGE,
T2_REL_DIS,T2_REL_MODE0,T2_REL_MODE1,
T2_CMP_MODE0,T2_CMP_MODE1,
T2_STOP,T2_INF,T2_EXF,T2_GATED }
TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
返回值
:无
函式宣告 :void Timer0_IntEN(unsigned char T0Priority)
功能
:设定并启动定时器 0 之中断。
含括檔
:Timer.h
传入值
返回值
:欲设定定时器 0 的中断等级。
T0Priority 参数:定时器 0 的中断等级。T0Priority ∈{ 0, 1, 2, 3 }
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
9
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void Timer1_IntEN(unsigned char T1Priority)
功能
:设定并启动定时器 1 之中断。
含括檔
:Timer.h
传入值
返回值
:欲设定定时器 1 的中断等级。
T1Priority 参数:定时器 1 的中断等级。T1Priority ∈{ 0, 1, 2, 3 }
:无
函式宣告 :void Timer2_IntEN(unsigned char T2Priority)
功能
:设定并启动定时器 2 之中断。
含括檔
:Timer.h
传入值
返回值
:欲设定定时器 2 的中断等级。
T2Priority 参数:定时器 2 的中断等级。T2Priority ∈{ 0, 1, 2, 3 }
:无
函式宣告 :void Timer0_IntDis(void)
功能
:关闭定时器 0 之中断。
含括檔
:Timer.h
传入值
返回值
:无
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
10
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void Timer1_IntDis(void)
功能
:关闭定时器 1 之中断。
含括檔
:Timer.h
传入值
返回值
:无
:无
函式宣告 :void Timer2_IntDis(void)
功能
:关闭定时器 2 之中断。
含括檔
:Timer.h
传入值
返回值
:无
:无
函式宣告 :void SetTimer0Value(unsigned int TimerValue)
功能
:设定定时器 0 之起始值。
含括檔
:Timer.h
传入值
返回值
:TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
11
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void SetTimer1Value(unsigned int TimerValue)
功能
:设定定时器 1 之起始值。
含括檔
:Timer.h
传入值
返回值
:TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
:无
函式宣告 :void SetTimer2Value(unsigned int TimerValue)
功能
:设定定时器 2 之起始值。
含括檔
:Timer.h
传入值
返回值
:TimerValue 参数:设定定时器初始值。TimerValue ∈{ 0, 1, 2, …, 65535 }
:无
除了上述的函式之外,在 Timer.h 档案中已定义如下之宏:
宏名称
功能
Timer0_Run( )
Timer 0 run
Timer0_Stop( )
Timer 0 stop
Timer1_Run( )
Timer 1 run
Timer1_Stop( )
Timer 1 stop
Timer2_Stop( )
Timer 2 stop
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
12
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\Timer\Timer.h"
#include "..\MISC\4x4Keypad.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// The 64-pin demo board use 22.1184MHz as system clock.
//
// Timer 0 uses system clock by 12 as clock source.
//
// 22.1184/12 = 1.8432MHz.
//
// (1/1.8432MHz)*18432 = 10ms.
//
//
//
// Therefore, if we want timer0 interrupt every 20ms,
//
// The timer 0 should count 18432*2 = 36864, then
//
// interrupt.
//
// The TH0 and TL0 should be setted to 65535-36864.
//
// That is 28671.
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#define
T0ReloadValue
28671
void Timer0ISR (void);
unsigned char
KeypadValue, Timer0OverFlow=0;
void main()
{
unsigned char
temp;
Timer0_Init( T0_16B_MODE, T0ReloadValue );
Timer0_IntEN(0);
// Set Timer 0 as 16 bit
// Set Timer 0 interrupt priority as 0
Timer0_Run();
while(1)
{
if( Timer0OverFlow )
{
Timer0OverFlow = 0;
temp = ScanKeypad();
if (temp>=0 && temp <=9)
P2 = temp;
else
P2 = NoKeyPressed;
// P2 is 7 segment. Force P2 to shows 0~9 only.
}
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
13
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
}
void Timer0ISR (void) interrupt 1 using 0
{
//Clear Timer0 Flag. This flag can be cleared by software
//and is automatically cleared when ISR is processed
SetTimer0Value( T0ReloadValue );
Timer0OverFlow = 1;
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
14
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-4 模拟数字转换(ADC)
函式宣告 :void ADCInit(unsigned char ADC_Channel, unsigned char ADC_Setting)
功能
:初始化 ADC 功能。
含括檔
:ADC.h
传入值
:欲致能之 ADC 通道(Channels)及设定值。
ADC_Channel 参数:设定缓存器 ADCC1。常用的参数定义于 SM59R16A2_ExtraDef.h 档
案中。ADC_Channel ∈{ ADCC0_EN,ADCC1_EN,ADCC2_EN,ADCC3_EN }
ADC_Setting 参数:设定缓存器 ADCC2。常用的参数定义于 SM59R16A2_ExtraDef.h 档案
中。ADC_Setting ∈{ ADC_8BIT,ADC_10BIT,
ADC_CH0_IN,ADC_CH1_IN,ADC_CH2_IN,ADC_CH3_IN,
ADC_CLK_DIV8,ADC_CLK_DIV16,ADC_CLK_DIV32,
ADC_CLK_DIV64 }
返回值
:无
函式宣告 :void ADCInt_EN(void)
功能
:致能(Enable)ADC 中断功能。
含括檔
:ADC.h
传入值
返回值
:无
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
15
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void ADC_ChannelSel(unsigned char ADC_Channel)
功能
:选择 ADC 输入通道(Channels)。
含括檔
:ADC.h
传入值
:欲选择之 ADC 通道。
ADC_Channel 参数:设定缓存器 ADCC2。常用的参数定义于 SM59R16A2_ExtraDef.h 档
案中。ADC_Channel ∈{ ADC_CH0_IN,ADC_CH1_IN,ADC_CH2_IN,ADC_CH3_IN }
返回值
:无
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\LCD\LCD16x2.h"
#include "..\ADC\ADC.h"
unsigned char
ADCDone;
void main()
{
LCD_Init();
PrintLcdStr("SyncMOS ADC");
SetCursorAddr(2, 0);
// Initialize ADC
// -------------------------------------------------------------------------// Turn on all ADC 4 channels. 8 bit, System clock divided by 8
// -------------------------------------------------------------------------//
ADCInit(ADCC3_EN|ADCC2_EN|ADCC1_EN|ADCC0_EN, ADC_8BIT|ADC_CLK_DIV8);
// Enable ADC interrupt
ADCInt_EN();
ADCDone = false;
do
{
// -----------------------------------// Catch channel 0
// -----------------------------------ADC_ChannelSel(ADC_CH0_IN);
ADCStart();
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
16
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
while( ADCDone )
{
ADCDone = false;
PrintLcdStrLX(2, 0, " ");
PrintLcdDec(ADCDL);
}
// -----------------------------------// Catch channel 1
// -----------------------------------ADC_ChannelSel(ADC_CH1_IN);
ADCStart();
while( ADCDone )
{
ADCDone = false;
PrintLcdStrLX(2, 4, " ");
PrintLcdDec(ADCDL);
}
// -----------------------------------// Catch channel 2
// -----------------------------------ADC_ChannelSel(ADC_CH2_IN);
ADCStart();
while( ADCDone )
{
ADCDone = false;
PrintLcdStrLX(2, 8, " ");
PrintLcdDec(ADCDL);
}
// -----------------------------------// Catch channel 3
// -----------------------------------ADC_ChannelSel(ADC_CH3_IN);
ADCStart();
while( ADCDone )
{
ADCDone = false;
PrintLcdStrLX(2, 12, "
PrintLcdDec(ADCDL);
}
");
}
while(1);
}
void ADCISR(void) interrupt 10 using 1
//ADC Interrupt Vector Address 0053h => interrupt 10
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
17
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
{
IRCON
&= (~ADC_IF);
ADCDone
= true;
//A/D converter interrupt flag, must be cleared by software
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
18
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-5 16x2 字符型 LCD 显示器
64-pin demo board 上所设置的 LCD 模块为 16x2 字符型 LCD (LMC-SSC2F16-01 serial),如不是使
用与 demo board 相同之 LCD 模块时需修改 Timing 方能正常显示。LCD 所连接至 SM59R16A2 之 pin
脚如下:并定义在 LCD16x2.h 档案中。
LCD_RS
LCD_E
LCD_RW
LCD_PORT
Port3.4
Port3.5
Port3.6
Port0
函式宣告 :void WriteLcdCmd(unsigned char Cmd)
功能
:写入 LCD 模块一个 byte 命令。
含括檔
:LCD16x2.h
传入值
返回值
:欲写入 LCD 模块之控制命令,以 Byte 表示。
:无
函式宣告 :void WriteLcdData(unsigned char Data)
功能
:写入 LCD 模块一个 byte 数据。
含括檔
:LCD16x2.h
传入值
返回值
:欲写入 LCD 模块之显示数据,以 Byte 表示。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
19
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void LCD_Init(void)
功能
:初始化 LCD 模块。
含括檔
:LCD16x2.h
传入值
返回值
:无
:无
本函式之初始化动作包括:
1. Power on delay 50ms,让 LCD 模块之内部 Reset 电路重置。
2. 设定 LCD 模块为 8-bit interface、Dual line、5x7 ASCII format。
3. 点亮(Turn on)LCD 模块、No cursor、No blinking mode、Increment entry mode。
4. 清空 LCD 画面。
使用者如需改变初始化之设定,可自行由原始程序代码修改。
函式宣告 :void WriteLcdLX(unsigned char LineNo, unsigned char XPos, unsigned char Value)
功能
:在 LCD 画面特定位置,写入一个 byte 数据。
含括檔
:LCD16x2.h
传入值
:欲显示之行列位置及显示数据。
LineNo 参数:设定行号,LineNo ∈{ 1,2 }。
XPos 参数:设定列位置,XPos ∈{ 0, 1, 2, … , 15 }。
Value 参数:显示的数据,以 Byte 表示。
返回值
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
20
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void SetCursorAddr(unsigned char LineNo, unsigned char XPos)
功能
:在 LCD 画面上移动光标到特定位置。
含括檔
:LCD16x2.h
传入值
:欲移动之目的地行列位置。
LineNo 参数:设定行号,LineNo ∈{ 1,2 }。
XPos 参数:设定列位置,XPos ∈{ 0, 1, 2, … , 15 }。
返回值
:无
函式宣告 :void CopyL2_To_L1(void)
功能
:复制第二行之画面到第一行。
含括檔
:LCD16x2.h
传入值
返回值
:无
:无
函式宣告 :void PrintLcdStr(unsigned char *Str)
功能
:在 LCD 画面现在的位置上输出字符串。
含括檔
:LCD16x2.h
传入值
返回值
:*Str 参数:欲输出之字符串指针。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
21
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void PrintLcdStrLX(unsigned char LineNo, unsigned char XPos, unsigned char *Str)
功能
:在 LCD 画面特定位置,输出字符串。
含括檔
:LCD16x2.h
传入值
返回值
:LineNo 参数:设定行号,LineNo ∈{ 1,2 }。
XPos 参数:设定列位置,XPos ∈{ 0, 1, 2, … , 15 }。
*Str 参数:输出字符串指针。
:无
函式宣告 :void ClearLcdLine(unsigned char LineNo)
功能
:清除 LCD 画面某一行的资料。
含括檔
:LCD16x2.h
传入值
返回值
:LineNo 参数:欲清除之行号,LineNo ∈{ 1,2 }。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
22
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void PrintLcdSpace(unsigned char Count)
功能
:在 LCD 画面现在的位置,输出特定个数之空白。输出个数超过第一行(16 字符)时,自
动延伸到第二行。
含括檔
:LCD16x2.h
传入值
返回值
:Count 参数:欲输出空白之个数。
:无
函式宣告 :void PrintLcdHex(unsigned int Value)
功能
:在 LCD 画面现在的位置上显示数值,以 16 进制表示。本函式不会自动在数字前加 ”0x”
含括檔
或字尾 ’H’。
:LCD16x2.h
传入值
返回值
:Value 参数:欲显示之数值。
:无
函式宣告 :void PrintLcdDec(unsigned int Value)
功能
:在 LCD 画面现在的位置上显示数值,以 10 进制表示。
含括檔
:LCD16x2.h
传入值
返回值
:Value 参数:欲显示之数值。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
23
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :unsigned char ReadLcdData(void)
功能
:读取 LCD 画面现在位置上所显示之数值。
含括檔
:LCD16x2.h
传入值
返回值
:无
:显示之数值。
函式宣告 :unsigned char ReadLcdLX(unsigned char LineNo, unsigned char XPos)
功能
:读取 LCD 画面特定位置上所显示之数值。
含括檔
:LCD16x2.h
传入值
返回值
:LineNo 参数:欲读取之行号,LineNo ∈{ 1,2 }。
XPos 参数:欲读取之列位置,XPos ∈{ 0, 1, 2, … , 15 }。
:显示之数值。
除了上述的函式之外,在 LCD16x2.h 档案中已定义如下之宏:
宏名称
功能
SetCursorHome( )
设定光标/显示位置回到第 1 行、第 0 列
TurnLcdOff( )
关闭 LCD
TurnLcdOn( )
开启 LCD
ClrLcdAll( )
清除 LCD 整个画面
CursorBack( )
光标移回一字符,但不更改显示数据
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
24
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\LCD\LCD16x2.h"
void main(void)
{
LCD_Init();
SetCursorAddr(1, 0);
PrintLcdStr("WelcomeToSyncMOS");
SetCursorAddr(2, 0);
PrintLcdStr("SM59R16 LCD demo");
while(1);
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
25
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-6 内部 EEPROM 功能 (Internal EEPROM)
函式宣告 :void PMEE_ByteWrite(unsigned int Address, unsigned char Data)
功能
:在内部 EEPROM 特定位置上,写入一 Byte 数据。
含括檔
:InternalEE.h
传入值
返回值
:Address 参数:欲写入之位置。
Data 参数:欲写入之 Byte 资料。
:显示之数值。
函式宣告 :unsigned char PMEE_ByteRead(unsigned int Address)
功能
:在内部 EEPROM 特定位置上,读取一 Byte 数据。
含括檔
:InternalEE.h
传入值
返回值
:Address 参数:欲读取之位置。
:读取到之 Byte 数据。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
26
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例(note 1):
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\InternalEE\InternalEE.h"
//===============================================
// We define this area(for example, 0xFC00~0xFDFF) 512 Bytes as the internal
// EEPROM area.
// The definition here is to reserve this area to prevent compiler destruction.
//===============================================
#define
EEROMArea_Start
0xFC00
unsigned char code
EEROMArea[512]
_at_ EEROMArea_Start;
void main()
{
unsigned int
Value, Counter;
unsigned char code RomDataBuffer[]=
{
0x09, 0x08, 0x10, 0x00, 0x00, 0x06, 0x05, 0x00, 0xEC, 0x15, 0xCD, 0x08, 0xC9, 0xC0, 0x00, 0x00,
0x06, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x00, 0xB0, 0x04, 0xC1, 0x00, 0x02, 0x00, 0x00, 0x00,
0xE2, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x6C,
0x65, 0x79, 0x20, 0x20, 0x20, 0x20, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x3B, 0x5C, 0x2D,
0x22, 0x24, 0x22, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x1E, 0x04, 0x23, 0x00, 0x0B,
0x00, 0x1E, 0x00, 0x00, 0x11, 0x24, 0x22, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x3B,
0x5B, 0x52, 0x65, 0x64, 0x5D, 0x5C, 0x2D, 0x22, 0x22, 0x24, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E,
0x30, 0x30, 0x1E, 0x04, 0x35, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x00, 0x5F, 0x2D, 0x22, 0x24, 0x22
}; // 128 Bytes
//===============
// Read/Write One byte
//===============
PMEE_ByteWrite(0xFC01, 0x12);
Value = PMEE_ByteRead(0xFC01);
//===============
//Write 128 bytes
//===============
for(Counter=0; Counter<128; Counter++)
{
PMEE_ByteWrite(EEROMArea_Start+Counter, *(RomDataBuffer+Counter));
}
//===============
//Read back and check.
//===============
Value = 0;
for(Counter=0; Counter<128; Counter++)
{
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
27
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
if ( PMEE_ByteRead(EEROMArea_Start+Counter) != *(RomDataBuffer+Counter) )
Value ++;
// Error accumulating
}
while(1);
}
Note 1: 本应用例目前无法使用新茂 OCD 模拟执行,如必须使用 OCD 模拟,请洽询新茂公司或新茂公司之代理商,以获得进一步的协
助。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
28
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-7 I2C 模块
函式宣告 :void IICInit(unsigned char IICSetting)
功能
:初始化 I2C 模块。
含括檔
:IIC.h
传入值
:IICSetting 参数:设定 I2C 模块缓存器 IICCTL。常用的参数定义于 SM59R16A2_ExtraDef.h
返回值
档案中。IICSetting ∈{ IIC_EN,
IIC_MASTER,IIC_SLAVE,
IIC_ADR_CA1,IIC_ADR_CA2,
IIC_BR32,IIC_BR64,IIC_BR128,IIC_BR256,IIC_BR512,
IIC_BR1024,IIC_BR2048,IIC_BR4096 }
:无
函式宣告 :void IICDisable(void)
功能
:关闭 I2C 模块。
含括檔
:IIC.h
传入值
返回值
:无
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
29
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void IIC_SendStart(unsigned char ControlByte)
功能
:令 I2C 模块送出 Start 讯号及其后的控制 Byte。
含括檔
:IIC.h
传入值
返回值
:ControlByte 参数:在 Start 讯号之后,接着要送出的控制数据(Byte)。
:无
函式宣告 :void IIC_SendRestart(unsigned char ControlByte)
功能
:令 I2C 模块送出 Restart 讯号及其后的控制 Byte。
含括檔
:IIC.h
传入值
返回值
:ControlByte 参数:在 Restart 讯号之后,接着要送出的控制数据(Byte)。
:无
函式宣告 :void IIC_TransmitByte(unsigned char TxData)
功能
:令 I2C 模块送出一个 Byte 资料。
含括檔
:IIC.h
传入值
返回值
:TxData 参数:欲送出的资料(Byte)。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
30
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :unsigned char IIC_ReceiveByte(bit ACKStatus)
功能
:令 I2C 模块接收一个 Byte 数据。
含括檔
:IIC.h
传入值
返回值
:ACKStatus 参数:接收一个 Byte 数据之后,要响应 ACK 或是 NACK。其中 ACK 及 NACK
分别定义于 IIC.h。ACKStatus∈{ ACK,NACK }
:无
函式宣告 :unsigned char IICEE_CurrentRead(unsigned char Block)
功能
:读取 EEPROM 现在位置(Current address)一个 Byte 数据。
含括檔
:IIC.h
传入值
返回值
:Block 参数:欲读取 EEPROM 哪一个 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
:无
函式宣告 :void IICEE_ByteWrite(unsigned char Block, unsigned char Address, unsigned char WriteData)
功能
:写入 EEPROM 指定位置一个 Byte。
含括檔
:IIC.h
传入值
:Block 参数:欲写入 EEPROM 哪一个 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
返回值
Address 参数:欲写入 EEPROM 之地址(note 2)。Address∈{ 0, 1, 2, …, 255 }
WriteData 参数:欲写入 EEPROM 之资料。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
31
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :unsigned char IICEE_RandomRead(unsigned char Block, unsigned char Address)
功能
:读取 EEPROM 指定位置一个 Byte。
含括檔
:IIC.h
传入值
返回值
:Block 参数:欲读取 EEPROM 哪一个 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
Address 参数:欲读取 EEPROM 之地址(note 2)。Address∈{ 0, 1, 2, …, 255 }
:读取之 EEPROM 数据(byte)。
函式宣告 :void IICEE_PageWrite(unsigned char Block, unsigned char Address, unsigned char N,
unsigned char *DataBuffer)
功能
:写入 EEPROM 指定位置 N 个 Bytes。
含括檔
:IIC.h
传入值
返回值
:Block 参数:欲写入 EEPROM 哪一个 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
Address 参数:欲写入 EEPROM 之地址(note 2)。Address∈{ 0, 1, 2, …, 255 }
N 参数:欲写入之 byte 数。N∈{ 1, 2, …, 16 }(note 3)
*DataBuffer 参数:欲写入 EEPROM 之数据数组指针。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
32
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void IICEE_SeqRead(unsigned char Block, unsigned char Address, unsigned int N,
unsigned char *DataBuffer)
功能
:读取 EEPROM 指定位置 N 个 Bytes。
含括檔
:IIC.h
传入值
返回值
Note 1:
:Block 参数:欲读取 EEPROM 哪一个 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
Address 参数:欲读取 EEPROM 之地址(note 2)。Address∈{ 0, 1, 2, …, 255 }
N 参数:欲读取之 byte 数。
*DataBuffer 参数:欲存放 EEPROM 读取数据之数组指针。
:无
64-pin demo board 上所设置的 I2C 界面 EEPROM 为 24LC04 / 24LC04B,此 EEPROM 内含两个 256 bytes 的 block。读写时需指
定欲读写 EE_BLOCK0 或 EE_BLOCK1,其中 EE_BLOCK0、EE_BLOCK1 定义在 IIC.h 档案中。
本函式以 24LC04/24LC04B EEPROM 为存取目标,不同容量(Size)的 EEPROM 存取命令及地址数据长度虽有不同,但是大同
小异,使用者仍可参照所选用的 EEPROM 规格书,对参考程序的原始码稍做修改即可。
Note 2:
24LC04 / 24LC04B EEPROM 之地址数据长度为一个 byte。
Note 3:
24LC04 / 24LC04B EEPROM 之 Page write 长度最大为 16 个 byte。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
33
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\MISC\Delay.h"
#include "..\IIC\IIC.h"
void main()
{
unsigned char
RamDataBuffer[50], Value ;
unsigned char code RomDataBuffer[]=
{
0x09, 0x08, 0x10, 0x00, 0x00, 0x06, 0x05, 0x00, 0xEC, 0x15, 0xCD, 0x08, 0xC9, 0xC0, 0x00, 0x00,
0x06, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x00, 0xB0, 0x04, 0xC1, 0x00, 0x02, 0x00, 0x00, 0x00,
0xE2, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x6C,
0x65, 0x79, 0x20, 0x20, 0x20, 0x20, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x3B, 0x5C, 0x2D,
0x22, 0x24, 0x22, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x1E, 0x04, 0x23, 0x00, 0x0B,
0x00, 0x1E, 0x00, 0x00, 0x11, 0x24, 0x22, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E, 0x30, 0x30, 0x3B,
0x5B, 0x52, 0x65, 0x64, 0x5D, 0x5C, 0x2D, 0x22, 0x22, 0x24, 0x23, 0x2C, 0x23, 0x23, 0x30, 0x2E,
0x30, 0x30, 0x1E, 0x04, 0x35, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x00, 0x5F, 0x2D, 0x22, 0x24, 0x22
}; // 128Byte
// Initialize IIC
IICInit(IIC_EN|IIC_MASTER|IIC_ADR_CA1|IIC_BR64);
// RandomRead:
Value = IICEE_RandomRead(EE_BLOCK0, 0x00);
// CurrentRead:
Value = IICEE_CurrentRead(EE_BLOCK0);
// Sequential Read:
IICEE_SeqRead(EE_BLOCK1, 0x00, 50, RamDataBuffer);
// Byte Write:
IICEE_ByteWrite(EE_BLOCK0, 0x00, 0x54);
Delay10mSec(1);
// Delay 10ms to wait EEPROM writing completed.
Value = IICEE_RandomRead(EE_BLOCK0, 0x00);
// Value should be 0x54
// Page Write:
IICEE_PageWrite(EE_BLOCK1, 0x00, 16, RomDataBuffer);
Delay10mSec(1);
// Delay 10ms to wait EEPROM writing completed.
IICEE_SeqRead(EE_BLOCK1, 0x00, 16, RamDataBuffer);
while(1);
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
34
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-8 Microwire 模块
64-pin demo board 上所设置的 Microwire EEPROM,其 chip select pin 使用 Port1.0。定义在 Microwire.
h 档案中。
函式宣告 :void SPIInit(unsigned char SPICtrl1, unsigned char SPICtrl2, unsigned char MSB_LSB)
功能
:初始化 SPI/Microwire 模块。
含括檔
:Microwire.h
传入值
:SPICtrl1 参数:设定 SPI/Microwire 模块缓存器 SPIC1。常用的参数定义于 SM59R16A2_
ExtraDef.h 档案中。
SPICtrl1∈{ SPI_EN,
SPI_MASTER,SPI_SLAVE,
SPI_SSP_HIGH,SPI_SSP_LOW,
SPI_CKP_HIGH,SPI_CKP_LOW,
SPI_CKE_RISE,SPI_CKE_FALL,
SPI_BR4,SPI_BR8,SPI_BR16,SPI_BR32,SPI_BR64,SPI_BR128,
SPI_BR256,SPI_BR512 }
SPICtrl2 参数:设定 SPI/Microwire 模块缓存器 SPIC2。常用的参数如下:
SPICtrl2∈{ SPI_FULLDUP_EN,SPI_FULLDUP_DIS,
SPI_TX_1B,SPI_TX_2B,SPI_TX_3B,SPI_TX_4B,SPI_TX_5B,
SPI_TX_6B,SPI_TX_7B,SPI_TX_8B,
SPI_RX_1B,SPI_RX_2B,SPI_RX_3B,SPI_RX_4B,SPI_RX_5B,
SPI_RX_6B,SPI_RX_7B,SPI_RX_8B }
MSB_LSB 参数:设定 SPI/Microwire 模块 MSB 或 LSB 优先传送。
MSB_LSB∈{ SPI_MSB_FIRST,SPI_LSB_FIRST }
返回值
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
35
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void MW_TransmitData(unsigned char BitCount, unsigned char TxData)
功能
:令 SPI/Microwire 模块送出指定 bit 数的 data。
含括檔
:Microwire.h
传入值
返回值
:BitCount 参数:设定欲传送的 bit 数。BitCount∈{ 1, 2, 3, …, 8 }
TxData 参数:欲传送的 data,以 byte 暂存。
:无
函式宣告 :unsigned char MW_ReceiveData(unsigned char BitCount)
功能
:令 SPI/Microwire 模块接收指定 bit 数的 data。
含括檔
:Microwire.h
传入值
返回值
:BitCount 参数:设定欲接收的 bit 数。BitCount∈{ 1, 2, 3, …, 8 }
:已接收的 data,以 byte 表示。
函式宣告 :void MWEE_WordWrite(unsigned char Address, unsigned int WriteData)
功能
:对 Microwire 接口 EEPROM(93xx 系列) (note 1, 2),在指定地址写入一个 word。
含括檔 :Microwire.h
传入值
返回值
:Address 参数:设定欲写入的地址。Address∈{0, 1, 2, …, 63 }
WriteData 参数:欲写入的资料,以 word 表示。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
36
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :unsigned int MWEE_WordRead(unsigned char Address)
功能
:对 Microwire 接口 EEPROM(93xx 系列) (note 1, 2),在指定地址读取一个 word。
含括檔 :Microwire.h
传入值
返回值
:Address 参数:设定欲读取的地址。Address∈{0, 1, 2, …, 63 }
:读取的数据,以 word 表示。
函式宣告 :void MWEE_Erase(unsigned char Address)
功能
:对 Microwire 接口 EEPROM(93xx 系列) (note 1, 2),使用 EEPROM 抹除指令,在指定地址抹
除一个 word。
含括檔 :Microwire.h
传入值
返回值
:Address 参数:设定欲抹除的地址。Address∈{0, 1, 2, …, 63 }
:无
函式宣告 :void MWEE_EraseAll(void)
功能
:对 Microwire 接口 EEPROM(93xx 系列) (note 2),使用 EEPROM 全部抹除指令(Erase all),将
含括檔
EEPROM 内容全部抹除。
:Microwire.h
传入值
返回值
:无
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
37
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void MWEE_ChkRdy(void)
功能
:检查 Microwire 接口 EEPROM(93xx 系列) (note 2),是否就绪。
含括檔
:Microwire.h
传入值
返回值
:无
:无
函式宣告 :void MWEE_EWDisable(void)
功能
:关闭/禁止 Microwire 接口 EEPROM(93xx 系列) (note 2),抹写功能。
含括檔
:Microwire.h
传入值
返回值
:无
:无
函式宣告 :void MWEE_EWEnable(void)
功能
:开启/致能 Microwire 接口 EEPROM(93xx 系列) (note 2),抹写功能。
含括檔
:Microwire.h
传入值
返回值
:无
:无
Note 1:
64-pin demo board 上所设置的 Microwire 界面 EEPROM 为 93C46B/93LC46B/93AA46B。其地址长度为 6-bit,故 Address= 0~63。
此 EEPROM 内部存放数据的格式是 16-bit 格式。
Note 2: 本函式以 93C46B/93LC46B/93AA46B EEPROM 为存取目标,不同容量(Size)的 EEPROM 存取命令及地址数据长度虽有不同,
但是大同小异,使用者仍可参照所选用的 EEPROM 规格书,对参考程序的原始码稍做修改即可。EEPROM 存取命令定义在
Microwire.h 档案中。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
38
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\Microwire\Microwire.h"
void main()
{
unsigned int
Value;
unsigned char
RamDataBuffer[50], Counter;
unsigned int code RomDataBuffer[]=
{
0x0900, 0x08C9, 0x1008, 0x00CD, 0x0015, 0x06EC, 0x0500, 0x0005,
0xEC06, 0x1506, 0xCD00, 0x0800, 0xC910, 0xC008, 0x0009, 0x008C,
0x0600, 0x0302, 0x0000, 0x00C1, 0xE104, 0x00B0, 0x0200, 0x0002,
0xB000, 0x0400, 0xC1E1, 0x0000, 0x0200, 0x0003, 0x0006, 0x0030,
0xE26E, 0x0074, 0x0053, 0x0000, 0x5C00, 0x0007, 0x7000, 0x0070,
0x0700, 0x0000, 0x005C, 0x5300, 0x7400, 0x6100, 0x6EE2, 0x6C07,
0x655C, 0x7930, 0x2030, 0x202E, 0x2030, 0x2023, 0x2C23, 0x232C,
0x2300, 0x3020, 0x2E20, 0x3020, 0x3020, 0x3B79, 0x5C65, 0x2D93,
0x2200, 0x2404, 0x221E, 0x2330, 0x2C30, 0x232E, 0x2330, 0x3023,
0x2E33, 0x3023, 0x302C, 0x1E23, 0x0422, 0x2324, 0x0022, 0x0B40,
0x0030, 0x1E2E, 0x0030, 0x0023, 0x1123, 0x242C, 0x2223, 0x2322,
0x2C04, 0x2324, 0x2311, 0x3000, 0x2E00, 0x301E, 0x3000, 0x3BE2,
0x5B30, 0x5223, 0x652C, 0x6423, 0x5D24, 0x5C22, 0x2D22, 0x222D,
0x224C, 0x245C, 0x235D, 0x2C64, 0x2365, 0x2352, 0x305B, 0x2E22,
0x3024, 0x302D, 0x1E5F, 0x0400, 0x3500, 0x0030, 0x2A00, 0x002A,
0x3040, 0x0000, 0x0035, 0x5F04, 0x2D1E, 0x2230, 0x2430, 0x2202
}; // 128Word
SPIInit(SPI_EN|SPI_MASTER|SPI_CKP_LOW|SPI_CKE_FALL|SPI_BR64,
SPI_FULLDUP_DIS, SPI_MSB_FIRST);
// Enable erase & write function of Microwire EEPROM
MWEE_EWEnable();
MWEE_EraseAll();
MWEE_ChkRdy();
// Write one byte & read back to check
MWEE_WordWrite(0x10, 0x1234);
MWEE_ChkRdy();
Value = MWEE_WordRead(0x10);
// Erase that byte
MWEE_Erase(0x10);
MWEE_ChkRdy();
//===========================
//Write 64 words & read back to check.
//===========================
for(Counter=0; Counter<64; Counter++)
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
39
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
{
MWEE_WordWrite(Counter, *(RomDataBuffer+Counter));
MWEE_ChkRdy();
}
Value = 0;
for(Counter=0; Counter<64; Counter++)
{
if ( MWEE_WordRead(Counter) != *(RomDataBuffer+Counter) )
{
Value ++;
}
}
// Disable erase & write function of Microwire EEPROM
MWEE_EWDisable();
while(1);
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
40
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-9 Pulse Width Modulation (PWM)
函式宣告 :void PWM_EN(unsigned char PWM_Resolution, unsigned char PWM_Channel)
功能
:初始化 PWM 模块。
含括檔
:PWM.h
传入值
:PWM_Resolution 参数:设定 PWM 分辨率。常用的参数定义于 SM59R16A2_ExtraDef.h
档案中。PWM_Resolution ∈{PWM_8BMODE,PWM_10BMODE,PWM_12BMODE }
PWM_Channel 参数:设定致能的 PWM 通道。PWM_Channel ∈{ PWM_CH0_EN,
PWM_CH1_EN,PWM_CH2_EN,PWM_CH3_EN }
返回值
:无
函式宣告 :void PWM0Duty(unsigned char PWM0_H, unsigned char PWM0_L)
功能
:设定 PWM 0 Duty。
含括檔
:PWM.h
传入值
返回值
:PWM0_H 参数:设定 Duty 高位。
PWM0_L 参数:设定 Duty 低位。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
41
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void PWM1Duty(unsigned char PWM1_H, unsigned char PWM1_L)
功能
:设定 PWM 1 Duty。
含括檔
:PWM.h
传入值
返回值
:PWM1_H 参数:设定 Duty 高位。
PWM1_L 参数:设定 Duty 低位。
:无
函式宣告 :void PWM2Duty(unsigned char PWM2_H, unsigned char PWM2_L)
功能
:设定 PWM 2 Duty。
含括檔
:PWM.h
传入值
返回值
:PWM2_H 参数:设定 Duty 高位。
PWM2_L 参数:设定 Duty 低位。
:无
函式宣告 :void PWM3Duty(unsigned char PWM3_H, unsigned char PWM3_L)
功能
:设定 PWM 3 Duty。
含括檔
:PWM.h
传入值
返回值
:PWM3_H 参数:设定 Duty 高位。
PWM3_L 参数:设定 Duty 低位。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
42
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
函式宣告 :void PWM_OFF(void)
功能
:关闭 PWM 模块。
含括檔
:PWM.h
传入值
返回值
:无
:无
应用例:
#include "..\h\SM59R16A2.h"
#include "..\h\SM59R16A2_ExtraDef.h"
#include "..\PWM\PWM.h"
void main()
{
PWM0Duty(0, 0);
PWM1Duty(0, 0x20);
PWM2Duty(0, 0x80);
PWM3Duty(0, 0xFF);
PWM_EN(PWM_8BMODE, PWM_CH3_EN|PWM_CH2_EN|PWM_CH1_EN|PWM_CH0_EN);
while(1);
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
43
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-10 其它应用函式
2-10-1 4x4 键盘
64-pin demo board 上设置一组 4x4 键盘,并连接于 SM59R16A2 MCU 之 Port 5,键盘连接及按键
码分别定义在 4x4Keypad.h 及 4x4Keypad.c 档案中。若使用者不是使用 64-pin demo board,可依所使
用之目标板,对参考程序的原始码稍做修改即可。
函式宣告 :unsigned char ScanKeypad(void)
功能
:扫描键盘一次。
含括檔
:4x4Keypad.h
传入值
返回值
:无
:使用者所按的按键编号 0~15,若没有任何按键输入则返回 0xFF。
2-10-2 蜂鸣器
64-pin demo board 上设置一蜂鸣器,并连接于 SM59R16A2 MCU 之 Port 3.7,蜂鸣器连接定义在
Speaker.h 档案中。
函式宣告 :void BeepCount(unsigned int count, unsigned int soundlong, unsigned int tone)
功能
:令蜂鸣器发声。
含括檔
:Speaker.h
传入值
:count 参数:设定发声次数。
soundlong 参数:设定发声长度。
tone 参数:设定发声频率。
返回值
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
44
Ver. A 2008/06
SM59R16A2 参考程序
使用手册
2-10-3 延时函式
以下各延时函式是以 64-pin demo board 上之外部晶振 22.1184MHz 为系统频率(Clock base)。
函式宣告 :void Delay100uSec(unsigned int NTime)
功能
:延时 100 usecond N 次。
含括檔
:Delay.h
传入值
返回值
:NTime 参数:设定延时 100 usecond 次数。
:无
函式宣告 :void Delay1mSec(unsigned int NTime)
功能
:延时 1 msecond N 次。
含括檔
:Delay.h
传入值
返回值
:NTime 参数:设定延时 1 msecond 次数。
:无
函式宣告 :void Delay10mSec(unsigned int NTime)
功能
:延时 10 msecond N 次。
含括檔
:Delay.h
传入值
返回值
:NTime 参数:设定延时 10 msecond 次数。
:无
Specifications subject to change without notice, contact your sales representatives for the most recent information.
IRFSX-0018
45
Ver. A 2008/06