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