Genererar 50Hz PWM med PIC16F877A (2 / 4 steg)
Steg 2: Använda Timer1 för att generera 50 Hz-signaler
Vi kommer använda timer1 tillsammans med KKP modul fungerade som "Jämför, trigger special event". Allt detta kommer att ske inne i koden.
Så tanken är att göra detta för evigt:
1-load timer1 med värden som krävs att generera den längsta perioden kunde det (104.9 ms).
2-load "i tid" värdet inuti KKP modulens register, sätta "1" på utgångsstiftet (RC2), och starta timer1.
3 - timer1 kommer att börja räkna tills den når värdet inuti KKP register (matcher på-tid). KKP ställer flagg avbrott.
4-inuti avbrottstjänstens rutin, återställa KKP avbrott flagga, ladda KKP register med värdet "off-tid" och "0" på utgångsstiftet.
Längs alla beräknas att vi måste använda en variabel som innehåller antalet fästingar som motsvarar 20 ms full period... det enligt följande:
Lägsta timer1 frekvens (som beräknas före) = 9.53 Hz.
Högsta timer1 period = 104.9 ms.
så 104.9 ms matcher sista fästingen som är 65535 (eftersom den har 16-bitars upplösning)... så för 20 ms, vad är antalet fästingar krävs?
N_20ms = (0,02 * 20000000) / (4 * 8) = 12500.
så när timer1 når kryssa nummer 12500, det är 20 ms! Detta är referensvärdet vi kommer att använda vår programvara... så när vi vill olika driftcykler, vad ska vi göra?
för 50% duty antalet räknas = 0,5 * 12500 och 20% = 0,2 * 12500 och så vidare! följande rad är för förtydligande:
antal av fästingar: 0___12500___65536
motsvarande period: 0___20ms___ 104.9ms
Vi är redo att gå! allt som återstår är själva koden!