程序编译初始化是设置定义时钟、端口、外围功能等控制寄存器,下面是初始换程序,启动CS+ for CC,打开hdwinit,在编译窗口,把下面的程序拷贝过来即可。请参考《rl78g13用户手册》
应用于本实例的初始换程序:
#includeiodefine.h
.PUBLIC HDWINTI
.SECTION.text,TEXT
HDWINTI:DI
MOVA,RESF
;--------------------------------------------------------
;initializes the clock generator系统初始化
;--------------------------------------------------------
MOVCMC,#0x41 ; Set fMX
MOVOSTS,#0x07
CLR1MSTOP
LABEL1_1:
NOP
CMP!OSTC,#0xFF
BNZ$LABEL1_1
SET1MCM0 ; Set fMAIN
MOV!OSMC,#0
SET1HIOSTOP ; Set fIH
;--------------------------------------------------------
;initializes the Port I/O端口初始化
;--------------------------------------------------------
CLRBP1
CLRBP2
CLRBP3
MOVP5,#0X02
MOVP6,#0X07
CLRBP7
CLRBP12
CLRBP14
MOV!PMC12,#0xFE
MOV!PMC14,#0x7F
MOV!ADPC,#0x04
MOVPM1,#0x80
MOVPM2,#0xF7
MOVPM3,#0xFC
MOVPM5,#0xFC
MOVPM6,#0xF8
MOVPM7,#0xFE
MOVPM12,#0xFE
MOVPM14,#0x7F
;--------------------------------------------------------
;initializes the UART0 module串口初始化
;--------------------------------------------------------
SET1!SAU0EN
NOP
NOP
NOP
NOP
MOVWAX,#0x0041
MOVW!SPS0,AX ;CK01:20MHz/16=1.25MHz,CK00:20MHz/2=10MHz
MOV!ST0L,#0x0F ;disable UART0/UART1 receive and transmit
SET1STMK1 ; disable INTST1 interrupt
CLR1STIF1 ; clear INTST1 interrupt flag
SET1SRMK1 ; disable INTSR1 interrupt
CLR1SRIF1 ; clear INTSR1 interrupt flag
SET1SREMK1 ; disable INTSRE1 interrupt
CLR1SREIF1 ; clear INTSRE1 interrupt flag
SET1STPR11 ; Set INTST1 low priority
SET1STPR01
SET1SRPR11 ; Set INTSR1 low priority
SET1SRPR01
MOVWAX,#0x8022
MOVW!SMR02,AX ;运行时钟CK01=1.25MHz
MOVWAX,#0x8097 ;1停止位=0X8097,2停止位=0X80A7
MOVW!SCR02,AX ;无校验位,LSB优先输出,1停止位,8位数据
MOVWSDR02,#0x8000 ;波特率=9600bps
SET1!NFEN0.2 ;RxD1 引脚的噪声滤波器
MOVWAX,#0x0007
MOVW!SIR03,AX ;clear error flag
MOVWAX,#0x8122
MOVW!SMR03,AX ;
MOVWAX,#0x4097 ;无校验位,LSB优先输出,1停止位,8位数据
MOVW!SCR03,AX ; Set SCR03
MOVWSDR03,#0x8000
MOVWAX,#0X0000
MOVW!SOL0,AX
MOVWAX,#0x000F
MOVW!SO0,AX ; Set SO0
MOVWAX,#0x0004
MOVW!SOE0,AX ; Set SOE0
MOV!PMC0,#0X00
MOVPM0,#0X02
MOVP0,#0X01
;--------------------------------------------------------
;initializes the TAU0 module定时器及PWM初始化
;--------------------------------------------------------
SET1!TAU0EN
MOVWAX,#0x0090
MOVW!TPS0,AX ;CK3=78.1kHz;CK2=10MHz;CK1:39.1kHz;CK0:20MHz
MOVWAX,#0x0AFF
MOVW!TT0,AX
SET1TMMK00 ; disable INTTM00 interrupt
CLR1TMIF00 ; clear INTTM00 interrupt flag
SET1TMMK01 ; disable INTTM01 interrupt
CLR1TMIF01 ; clear INTTM01 interrupt flag
SET1TMMK01H ; disable INTTM01H interrupt
CLR1TMIF01H ; clear INTTM01H interrupt flag
SET1TMMK02 ; disable INTTM02 interrupt
CLR1TMIF02 ; clear INTTM02 interrupt flag
SET1TMMK03 ; disable INTTM03 interrupt
CLR1TMIF03 ; clear INTTM03 interrupt flag
SET1TMMK03H ; disable INTTM03H interrupt
CLR1TMIF03H ; clear INTTM03H interrupt flag
SET1TMMK04 ; disable INTTM04 interrupt
CLR1TMIF04 ; clear INTTM04 interrupt flag
SET1TMMK05 ; disable INTTM05 interrupt
CLR1TMIF05 ; clear INTTM05 interrupt flag
SET1TMMK06 ; disable INTTM06 interrupt
CLR1TMIF06 ; clear INTTM06 interrupt flag
SET1TMMK07 ; disable INTTM07 interrupt
CLR1TMIF07 ; clear INTTM07 interrupt flag
SET1TMPR106 ; Set INTTM06 low priority
SET1TMPR006
SET1TMPR107 ; Set INTTM07 low priority
SET1TMPR007
ONEWAX
MOVW!TMR00,AX ; 使用CK0=20MHz
MOVWTDR00,#0x00C7 ; PWM周期=10uS(100KHz)
MOVWAX,!TO0
XCHA,X
ANDA,#0xFE
XCHA,X
MOVW!TO0,AX
MOVWAX,!TOE0
XCHA,X
ANDA,#0xFE
XCHA,X
MOVW!TOE0,AX
MOVWAX,#0x0409
MOVW!TMR02,AX ; 使用CK0=20MHz
MOVWTDR02,#0x001
MOVWAX,!TOM0
XCHA,X
OR A,#0x04
XCHA,X
MOVW!TOM0,AX
MOVWAX,!TOL0
XCHA,X
ANDA,#0xFB
XCHA,X
MOVW!TOL0,AX
MOVWAX,!TO0
XCHA,X
ANDA,#0xFB
XCHA,X
MOVW!TO0,AX
MOVWAX,!TOE0
XCHA,X
OR A,#0x04
XCHA,X
MOVW!TOE0,AX
MOVWAX,#0x8000
MOVW!TMR06,AX ; 使用CK1=39.1kHz
MOVWTDR06,#0x98BB ; 999.6毫秒
MOVWAX,!TOM0
XCHA,X
ANDA,#0xBF
XCHA,X
MOVW!TOM0,AX
MOVWAX,!TOL0
XCHA,X
ANDA,#0xBF
XCHA,X
MOVW!TOL0,AX
MOVWAX,!TO0
XCHA,X
ANDA,#0xBF
XCHA,X
MOVW!TO0,AX
MOVWAX,!TOE0
XCHA,X
ANDA,#0xBF
XCHA,X
MOVW!TOE0,AX
MOVWAX,#0X8000
MOVW!TMR07,AX ; 使用CK1=39.1kHz
MOVWTDR07,#0x0187 ; 10毫秒
MOVWAX,!TOM0
ANDA,#0x7F
OR A,#0x04
XCHA,X
MOVW!TOM0,AX
MOVWAX,!TOL0
XCHA,X
ANDA,#0x7F
XCHA,X
MOVW!TOL0,AX
MOVWAX,!TO0
XCHA,X
ANDA,#0x7F
XCHA,X
MOVW!TO0,AX
MOVWAX,!TOE0
XCHA,X
ANDA,#0x7F
XCHA,X
MOVW!TOE0,AX
CLR1P1.7
CLR1PM1.7
;--------------------------------------------------------
;initializes the ADC moduleA/D转换初始化
;--------------------------------------------------------
SET1!ADCEN
MOVADM0,#0x00
SET1ADMK
CLR1ADIF
MOVADM1,#0x20 ; ADSCM=1单次转换模式
MOV!ADM2,#0x00
MOV!ADUL,#0xFF
MOV!ADLL,#0x00
MOVADS,#0
;--------------------------------------------------------
;initializes the watchdogtimer
;--------------------------------------------------------
SET1WDTIMK
CLR1WDTIIF
MOVWDTE,#0xAC
RET
下面是几个不同波特率的设定值
;波特率=2400 ; 0X0960
;MOVWAX,#0x0061
;MOVW!SPS0,AX ;时钟CK01:20MHz/64=0.3125MHz,CK00:20MHz/2=10MHz
;波特率=4800 ; 0X12C0
;MOVWAX,#0x0051
;MOVW!SPS0,AX ;时钟CK01:20MHz/32=0.625MHz,CK00:20MHz/2=10MHz
;波特率=9600 ; 0X2580
;MOVWAX,#0x0041
;MOVW!SPS0,AX ;时钟CK01:20MHz/16=1.25MHz,CK00:20MHz/2=10MHz
;波特率=19200 ;0X4B00
;MOVWAX,#0x0031
;MOVW!SPS0,AX ;时钟CK01:20MHz/8=2.5MHz,CK00:20MHz/2=10MHz
;波特率=38400 ;0X9600
;MOVWAX,#0x0021
;MOVW!SPS0,AX ;时钟CK01:20MHz/4=5MHz,CK00:20MHz/2=10MHz
;波特率=76800 ;0X12C00
;MOVWAX,#0x0011
;MOVW!SPS0,AX ;时钟CK01:20MHz/2=10MHz,CK00:20MHz/2=10MHz