SyncMOS Technologies Inc.

SyncMOS Technologies Inc.
SyncMOS PWM Application Note
Feb 2009
For SM89S16R1、SM5964A、SM79108、SM79164
Pulse Width Modulation(PWM) Function Application Notes
适用产品:
1.
SM89S16R1(P1.4~P1.5)
2.
3.
SM5964A(P1.2~P1.3)
SM79108(P1.5)
4. SM79164(P1.0~P1.7)
功能说明:
每个 PWM channel 所输出的波型是直接将资料写入一个 8bit 寄存器 PWMD[7..0] ($BE~$BB, $B6~$B3)所决
定的,它可以选择为 5 bit resolution 的 PWM 或 8 bit resolution 的 PWM。在 5bit PWM 部份,只有 bit0~bit4
为有效值。而当 PWM 为 Enable 时,它将会连续性的输出 PWM 波型,而不会因为任何中断发生而让 PWM
波型中断。
应用范围:1、背光板亮度控制。2、CCD Clock 输出。3、电压变化控制。
特殊寄存器说明:P1CON, PWMC[7:0], PWMD[7:0]
1、 P1CON(0x9B):
SM89S16R1(P1.4~P1.5)
Unused
Read /Write
Reset Value
*
SM5964A(P1.2~P1.3)
SDAE
Read /Write
Reset Value
Unused
*
Unused
*
Unused
*
PWM1E PWM0E
R/W
R/W
0
0
Unused
*
Unused
*
SCLE
Unused
*
Unused
*
PWM1E PWM0E
R/W
R/W
0
0
Unused
*
Unused
*
Unused
*
PWME0
R/W
0
Unused
*
Unused SPWME0 Unused
*
*
Unused
*
SM79108(P1.5)
Read /Write
Reset Value
Unused
*
SM79164(P1.0~P1.7)
PWME7 PWME6 PWME5
Read /Write
R/W
R/W
R/W
Reset Value
0
0
0
PWME4 PWME3
R/W
R/W
0
0
PWME2
R/W
0
PWME1
R/W
0
PWME0
R/W
0
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
1
SyncMOS Technologies Inc.
SyncMOS PWM Application Note
Feb 2009
For SM89S16R1、SM5964A、SM79108、SM79164
PWM[7:0]E:初始值为 0,当位设置为 1 时,对应 Port1 的脚位即设为 PWM 的功能,当设置为 0 时 SPWM
的脚位即为一般的 I/O Pin。
2、PWMC 共有 8 组($DE~$DB,$D6~$D3):
Read /Write
Reset Value
Unused
*
Unused
*
Unused
*
Unused
*
Unused
*
PBS
R/W
0
PFS1
R/W
0
PFS0
R/W
0
PFS [1:0] :是设置外部频率的被除数以决定 PWM 频率。
PFS1 PFS0
Divider
PWM clock(Fosc=12MHz) PWM clock(Fosc=24MHz)
0
0
24 MHz
48 MHz
0.5 (Xtal<24MHz 才可使用))
0
1
1
12 MHz
24 MHz
1
0
2
6 MHz
12 MHz
1
1
4
3 MHz
6 MHz
PWM clock=1/T = Fosc/Divider
PWM 的输出频率 = PWM clock/32 or PWM clock/256
= [Fosc/ Divider]/32 or [Fosc/Divider]/256。
备注: 设 5bit 时 除数为 32,设 8bit 时 除数为 256
PBS:设置为 5 bit 或 8 bit resolution 的 PWM 波型。
预设为 8 bit resolution,设为 1 为 5 bit resolution
3、PWMD[7:0]( $BE~$BB,$B6~$B3):
PWMD7 PWMD6 PWMD5 PWMD4 PWMD3 PWMD2 PWMD1 PWMD0
Read /Write
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Reset Value
0
0
0
0
0
0
0
0
PWMD[7:0]: 为 PWM 资料寄存器,它决定 PWM 输出波形的周期
如果选择为 5 bit resolution 的 PWM 时,有效位为 PWMD4~PWMD0。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
2
SyncMOS Technologies Inc.
Feb 2009
SyncMOS PWM Application Note
For SM89S16R1、SM5964A、SM79108、SM79164
范例:一组 PWM 输出周期频率的计算方式 :
设 Fosc = 36MHz , PWMC 的 PFS[1:0] = 01 (Divider=1),PBS=1(5 bit resolution);
PWM clock =36MHz / 1 = 36MHz
PWM output cycle frame frequency = 36MHz / 32 = 1.125MHz
PWM 程序范例:
汇编语言:
以 SM79164 为例 X’tal = 36MHz
;******* SET DATA ****************************************
P1CON
EQU
09BH
;设置 SFR 内 P1CON 的地址
PWMC0
EQU
0D3H
;设置 SFR 内 SPWMC 的地址
PWMD0
EQU
0B3H
;设置 SFR 内 SPWMD0 的地址
;******************* 定义程序的起始地址 ********************
ORG
0000H
;设置目前程序的起始地址
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
3
SyncMOS Technologies Inc.
SyncMOS PWM Application Note
Feb 2009
For SM89S16R1、SM5964A、SM79108、SM79164
JMP
Start
;跳至 reset
ORG
100H
Start:
MOV
P1CON,#01H
;设置 P1.0 为 PWM 输出
MOV
PWMC0,#05H
;设置 PWM 频率 (Divider=1 , 5 bit resolution)
MOV
PWMD0,#010H ;设置输出波形为 50/50
;************* 设置 LED 在 PWMD0(即 P1.0 输出)的闪烁方式 ***************
;此段程序的 LED 显示是由暗至亮的表示方法
MOV
A,#0ffH
;此段为由 FF 至 00 的波形变化
LOOP1:
MOV
PWMD0,A
MOV
R0,A
CALL Delay
DJNZ
R0,LOOP1
;********************* 呼叫 Delay **************************************
Delay:
MOV
20H,#02H
b3: MOV
21H,#0FFH
b2: MOV
22H,#0FFH
b1: DJNZ
22H,b1
DJNZ
21H,b2
DJNZ
20H,b3
RET
END
设 Fosc = 36MHz , PWMC 的 PFS[1:0] = 02 (Divider = 2),PBS=0(8 bit resolution);
PWM clock =36MHz / 2 = 18MHz
PWM output cycle frame frequency = 18MHz / 256 = 70.3KHz
C 语言:
sfr P1CON = 0x9B;
sfr PWMC0
= 0x0D3;
sfr PWMC1
= 0x0D4;
sfr PWMC2
= 0x0D5;
sfr PWMC3
= 0x0D6;
sfr PWMC4
= 0x0DB;
sfr PWMC5
= 0x0DC;
sfr PWMC6
= 0x0DD;
sfr PWMC7
= 0x0DE;
sfr PWMD0 = 0x0B3;
sfr PWMD1 = 0x0B4;
//设置 SFR 内 P1CON 的地址
//设置 SFR 内 PWMC0 的地址
//设置 SFR 内 PWMC1 的地址
//设置 SFR 内 PWMC2 的地址
//设置 SFR 内 PWMC3 的地址
//设置 SFR 内 PWMC4 的地址
//设置 SFR 内 PWMC5 的地址
//设置 SFR 内 PWMC6 的地址
//设置 SFR 内 PWMC7 的地址
//设置 SFR 内 PWMD0 的地址
//设置 SFR 内 PWMD1 的地址
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
4
SyncMOS Technologies Inc.
Feb 2009
sfr PWMD2 = 0x0B5;
sfr PWMD3 = 0x0B6;
sfr PWMD4 = 0x0BB;
sfr PWMD5 = 0x0BC;
sfr PWMD6 = 0x0BD;
sfr PWMD7 = 0x0BE;
void DelayX10ms(int);
unsigned char times;
SyncMOS PWM Application Note
For SM89S16R1、SM5964A、SM79108、SM79164
//设置 SFR 内 PWMD2 的地址
//设置 SFR 内 PWMD3 的地址
//设置 SFR 内 PWMD4 的地址
//设置 SFR 内 PWMD5 的地址
//设置 SFR 内 PWMD6 的地址
//设置 SFR 内 PWMD7 的地址
void main(void)
{
//设置 PWM 输出脚位//
//P1CON=0x01;
//set p1.0 out for 79164
//P1CON=0x02;
//set p1.1 out for 79164
//P1CON=0x04;
//set p1.2 out for 79164,5964A
//set p1.4 out for 89S16R1
P1CON=0x08; //set p1.3 out for 79164,5964A
//set p1.5 out for 89S16R1
//P1CON=0x10;
//set p1.4 out for 79164
//P1CON=0x20;
//set p1.5 out for 79164,79108,
//P1CON=0x40;
//set p1.6 out for 79164
//P1CON=0x80;
//set p1.7 out for 79164
//设置外部频率的被除数以决定 PWM 时脉//
//外部频率:36MHz 设 Divider=2 PBS=0(8 bit resolution) 其 PWM 时脉为 70.3kHz
//PWMC0=0x00; //set PWM frequency (Divider=0.5)
//PWMC0=0x01;
//set PWM frequency (Divider=1)
PWMC0=0x02;
//set PWM frequency (Divider=2)
//PWMC0=0x03; //set PWM frequency (Divider=4)
//设置输出波形的比例//
PWMD0=0x80; //set output waveform to 50/50
//PWMD0=0xC0; //set output waveform to 75/25
for(times=0xff;times<=0xff;times--)
{
PWMD0 = times;
DelayX10ms(50);
}
}
void DelayX10ms(int count)
{
int i,j;
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
5
SyncMOS Technologies Inc.
Feb 2009
for(i=0;i<count;i++)
for(j=0;j<1500;j++);
SyncMOS PWM Application Note
For SM89S16R1、SM5964A、SM79108、SM79164
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
PWMAPN_VerA_20090209
6