Примеры ШИМ, проверено на двух МК, всех из выходах и режимах.
Особенность: период - один регистр, заполнение - второй. Заполнение задается не в процентах, а в виде значения от первого регистра.
Т.е: Вы задали в регистре периода 40000, чтобы получить заполнение равное 50% во второй регистр пишите 20000.
PWM1p, на примере STC8H1K08
Код:
$regfile = "8H1K08.DAT" ' STC registers list $crystal = 5529600 ' CPU clock frequence '11059200/2= 5529600 $large ' Dim Temp As Byte , Temp2 As Byte Dim Temp_w As Word , Adc_dat As Word '--------------------------------------------------------------------------------------- ' Выходы P1 P1ie = 255 ' 1: Enable digital pins P1pu = 0 ' 0= Disable pull-up resistor P1m0 = 0 : P1m1 = 0 ' pins mode ' Выходы P3 P3ie = 255 ' 1: Enable digital pins P3pu = 0 ' 0= Disable pull-up resistor P3m0 = 0 : P3m1 = 0 ' pins mode P_sw2 = &H80 ' EAXFR:Extended RAM SpecialFunctionRegister (XFR) access Pwma_ccer1 = 0 : Pwma_ccer2 = 0 ' FECC Ccerx Must Be Cleared Before Writing To Ccmrx Pwma_ccmr1 = &H60 ' FEC8 Set Cc1 To Pwma Output Mode1 Pwma_ccer1 = 1 ' FECC Enable Cc1 Channel Pwma_arrh = &H6 : Pwma_arrl = &HFF ' FED2 FED3 Set Period Time Pwma_ccr1h = &H3 : Pwma_ccr1l = &HFF ' FED5 FED6 Set Duty Cycle Time Pwma_eno = 0 ' FEB1 Pwma_eno = &B_0000_0011 ' FEB1 Enable Pwm1p Port Output Pwma_ps = 0 ' FEB2 Pwma_bkr = &H80 ' FEDD Enable Main Output Pwma_cr1 = 1 ' FEC0 Start Timing P_sw2.7 = 0 Do P3.2 = Not P3.2 Waitms 150 Loop
PWM8, на примере STC8H1K28
Код:
$regfile = "8H1K28.DAT" ' STC registers list $crystal = 5529600 ' CPU clock frequence '11059200/2= 5529600 $large ' Dim Temp As Byte , Temp2 As Byte Dim Temp_w As Word , Adc_dat As Word '--------------------------------------------------------------------------------------- ' Выходы P0 P0ie = 255 ' 1: Enable digital pins P0pu = 0 ' 0= Disable pull-up resistor P0m0 = 0 : P0m1 = 0 ' pins mode ' Выходы P1 P1ie = 255 ' 1: Enable digital pins P1pu = 0 ' 0= Disable pull-up resistor P1m0 = 0 : P1m1 = 0 ' pins mode ' Выходы P2 P2ie = 255 ' 1: Enable digital pins P2pu = 0 ' 0= Disable pull-up resistor P2m0 = 0 : P2m1 = 0 ' pins mode ' Выходы P3 P3ie = 255 ' 1: Enable digital pins P3pu = 0 ' 0= Disable pull-up resistor P3m0 = 0 : P3m1 = 0 ' pins mode P_sw2 = &H80 ' EAXFR:Extended RAM SpecialFunctionRegister (XFR) access Pwmb_ccer1 = 0 : Pwmb_ccer2 = 0 ' Ccerx Must Be Cleared Before Writing To Ccmrx Pwmb_ccmr4 = &B_0110_0000 ' Set Cc8 To Mode "Pwm1" Pwmb_ccer2 = &B_0001_0000 ' Enable Cc8 Channel Pwmb_arrh = &H6 : Pwmb_arrl = &HFF ' Set Period Time Pwmb_ccr8h = &H3 : Pwmb_ccr8l = &HFF ' Set Duty Cycle Time Pwmb_eno = &B_0100_0000 ' Enable Pwm8 Port Output Pwmb_ps = 0 ' ' Pwmb_ps = &B_10_00_0000 ' Pwmb_bkr = &H80 ' Enable Main Output Pwmb_cr1 = 1 ' Start Timing P_sw2.7 = 0 Do P3.2 = Not P3.2 Waitms 70 Loop