rr: Reset Buf_cntr: Reset Buf_err_entr: Reset Buf2_full: Reset Buf_cntr
очистка змінних=Second2: Minute=Minute2: Hour=Hour2: Dat=Dat2: Dat_weak=Dat_weak2: Month=Month2: Year=Year2: Leap=Leap2:
- завантаження значення часу з незалежної пам'яті.
Dat_inc=Dat_inc2: Hour_inc=Hour_inc2: _dec=Dat_dec2: Hour_dec=Hour_dec2=Year Or 2000: Month=Month Or 1:=Dat Or 1: Dat=Dat Or 1: Leap=Leap And 1Year gt; 2 099 Then: Set Rs_time_err: Year=2000: End If: Month gt; 12 Then: Set Rs_time_err: Month=0: End IfDat gt; 32 Then: Set Rs_time_err: Dat=0: End If: Hour gt; 23 Then: Set Rs_time_err: Hour=23: End IfMinute gt; 59 Then: Set Rs_time_err: Minute=59: If: If Dat_weak gt; 7 Then: Dat_weak=0: Set Rs_time_err: End If_num=Osc_num2: P_num=P_num2: Fl_err_cntr=Fl_err_cntr2
- перевірка значення часу незалежній пам'яті і установка оптимального значення у разі помилки.
Lcd_size=Lcd_size2
завантаження розміру РКІ з незалежної пам'яті
Config Timer0=Timer, Async=On, Prescale=32
- ініціалізація таймера-лічильника 0 в режимі Тамера, асинхронний режим, коефіцієнт Поділу=32.
Config Com1=115200, Synchrone=0, Parity=Even, Stopbits=1, Databits=8, Clockpol=0
- ініціалізація УСАПП на швидкість 115200 біт сек, з бітом контролю парності передачі даних.
Config Lcdpin=Pin, Db4=Porta.2, Db5=Porta.3, Db6=Porta.4, Db7=Porta.5, E=Porta.1, Rs=Porta.0
ініціалізація шини РКІ діплея.Minute; ; Hour; ; Dat; ; Month; ; Year; ; Rs_time_err
- друк значення годин і біта контролю помилки.
Config Pind.0=Input: Set Portd.0 -настройка виводу порту.
On Int0 Int0_int: Enable Int0 - включення зовнішнього переривання
Enable Interrupts: - глобальне дозвіл переривань
Config Watchdog=512: Start Watchdog: -ініціалізація сторожового таймера
On Urxc Rec_isr: Enable Urxc- включення зовнішнього переривання УСАПП.
Select Case Lcd_size1: Config Lcd=8 * 22: Config Lcd=12 * 13: Config Lcd=12 * 24: Config Lcd=16 * 15: Config Lcd=16 * 26: Config Lcd=16 * 47: Config Lcd=20 * 28: Config Lcd=20 * 49: Config Lcd=24 * 210: 'Config Lcd=24 * 411: Config Lcd=40 * 212: Config Lcd=40 * 4Else: Config Lcd=16 * 2 Select:
Ініціалізазація розміру РКІ.
Do -початок основного (головного) циклу програми
If Wdr_ovr=1 Then: Set Cycle_err: Print Ip; ; 128; ; 5; Cycle_err If: Set Wdr_ovr- відправлення звіту по УСАПП про помилку виконання програми
If Buf2_full=1 ThenCase Rs_buf01: Goto Set_time2: Goto Read_time10: Goto Config_lcd14: Goto Osc_commElse: Ip; ; Chr (139); ; 3; Comnd_not_supp -отчёт про непідтримуваної программеSelect:
- Цикл розгалуження виконання підпрограм залежно від номера.
:
Reset Buf2_full- якщо команда виконана, то скинути біт.
End ifNew_sec=1 Then: If New_min=1 Then: Print Minute; Raquo; ; Hour; Raquo; ; Dat; " ; Dat_weak; ; Month; "; Year -ежемінутная друк дати і времені.New_sec: Reset New_min: End If: End If_out=Pwm_out + 1: If Pwm_out gt; 230 Then: Pwm_out=10: End If Compare1a=A Compare1b=A Pwm1a=A Pwm1b=A: - регулювання шпаруватості ШІМ по Пилкоподібні закону_intr=Tifr: Tim2_intr=Tim2_intr And 1 - перевірка прапорів переполненіяTim2_intr=0 Then: Goto 2: Else: Tifr=Tifr Or 1: End IfTactTact gt; 3 Then=0: Incr Second: Second2=Second: Set New_secSecond lt; 60 Then: Goto 2: Else=0: Incr Minute: Minute2=Minute: Set New_minMinute gt; 59 Then=0: Incr Hour: Hour2=HourMonth_inc=Month ThenDat=Dat_inc ThenHour=Hour_inc ThenHourIfIfIfMonth_dec=Month ThenDat=Dat_dec ThenHour=Hour_dec ThenHourIfIfIfHour gt; 23 Then=0: Incr Dat: Dat2=Dat: Incr Dat_weak: If Dat_weak gt; 7 ThenDat_weak: Dat_weak2=Dat_weakMonth=2 Then_d=Year Mod 4IfYear_d=0 Then: Leap=1: Leap2=Leap: Maxdat=Lookup (month, Dta1) IfDat lt; 27 Then: Goto 2If: Maxdat_l=Maxdat + LeapDat gt; Maxdat_l Then: Dat=1: Incr Month: Month2=MonthIfMonth gt; 12 Then: Month=1: Incr Year: IfIfIfIfIfIf
цикл годинника реального часу
: Wdr_ovr: Reset Watchdog: Waitms 1 -сброс сторожового таймера.-кінець основного (головного) циклу програми
Rec_isr: -мітки вектора переривання від УСАПП
Select Case Buf_cntr0: Rs_pack_b0=Udr1: Rs_pack_b1=Udr2: Rs_pack_b2=Udr3: Rs_pack_b3=Udr4: Rs_pack_b4=Udr5: Rs_pack_b5=Udr6: Rs_pack_b6=Udr7: Rs_pack_b7=...