SyncMOS Technologies Inc. SyncMOS PWM Application Note Jan 2009 For SM89S16R1、SM5964A、SM79108、SM79164 Pulse Width Modulation(PWM) Function Application Notes 適用產品: 1. SM89S16R1(P1.4~P1.5) 2. SM5964A(P1.2~P1.3) 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 PWME4 PWME3 PWME2 PWME1 PWME0 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 PWM[7:0]E:初始值為 0,當位元設定為 1 時,對應 Port1 的腳位即設為 PWM 的功能,當設定為 0 時 SPWM 的腳位即為一般的 I/O Pin。 2、PWMC 共有 8 組($DE~$DB,$D6~$D3): Unused Unused Unused Unused Unused PBS PFS1 PFS0 Specifications subject to change without notice, contact your sales representatives for the most recent information. 1 IRFWX-A114 PWM APN_VerA_20090119 SyncMOS Technologies Inc. Jan 2009 Read /Write Reset Value * SyncMOS PWM Application Note For SM89S16R1、SM5964A、SM79108、SM79164 * * * * R/W 0 R/W 0 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. 2 IRFWX-A114 PWM APN_VerA_20090119 SyncMOS Technologies Inc. Jan 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 ;設定目前程式的起始位址 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 Specifications subject to change without notice, contact your sales representatives for the most recent information. 3 IRFWX-A114 PWM APN_VerA_20090119 SyncMOS Technologies Inc. SyncMOS PWM Application Note Jan 2009 For SM89S16R1、SM5964A、SM79108、SM79164 ;********************* 呼叫 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 PWMD2 = 0x0B5; sfr PWMD3 = 0x0B6; sfr PWMD4 = 0x0BB; sfr PWMD5 = 0x0BC; sfr PWMD6 = 0x0BD; sfr PWMD7 = 0x0BE; void DelayX10ms(int); unsigned char times; //設定 SFR 內 P1CON 的位址 //設定 SFR 內 PWMC0 的位址 //設定 SFR 內 PWMC1 的位址 //設定 SFR 內 PWMC2 的位址 //設定 SFR 內 PWMC3 的位址 //設定 SFR 內 PWMC4 的位址 //設定 SFR 內 PWMC5 的位址 //設定 SFR 內 PWMC6 的位址 //設定 SFR 內 PWMC7 的位址 //設定 SFR 內 PWMD0 的位址 //設定 SFR 內 PWMD1 的位址 //設定 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 Specifications subject to change without notice, contact your sales representatives for the most recent information. 4 IRFWX-A114 PWM APN_VerA_20090119 SyncMOS Technologies Inc. Jan 2009 //P1CON=0x10; //P1CON=0x20; //P1CON=0x40; //P1CON=0x80; SyncMOS PWM Application Note For SM89S16R1、SM5964A、SM79108、SM79164 //set p1.4 out for 79164 //set p1.5 out for 79164,79108, //set p1.6 out for 79164 //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; for(i=0;i<count;i++) for(j=0;j<1500;j++); } Specifications subject to change without notice, contact your sales representatives for the most recent information. 5 IRFWX-A114 PWM APN_VerA_20090119