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-0017
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
\Demo\Output
存放 64-pin demo board,demo 程式原始碼。
存放 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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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
Port3.4
Port3.5
LCD_RW
LCD_PORT
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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
傳入值
:Block 參數:欲讀取 EEPROM 哪一個 block(note 1)。Block∈{ EE_BLOCK0,EE_BLOCK1 }
返回值
Address 參數:欲讀取 EEPROM 之位址(note 2)。Address∈{ 0, 1, 2, …, 255 }
N 參數:欲讀取之 byte 數。
*DataBuffer 參數:欲存放 EEPROM 讀取資料之陣列指標。
:無
Note 1:
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
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-0017
45
Ver. A 2008/06