Возникла проблема.В программе на bascom организация задержки в 1 секунду дает отставание от реального времени.Использовался оператор wait и waitms. Может какая-то вставка на asm поможет или настройка таймера? Как сделать?
Выяснить почему отстает и исправить. Возможно коэффициентом а более точно операторами NOP. Если отсавание в разы или очень значительно, то наверно с частотой такта путаница.
$regfile = "m16def.dat" $crystal = 8000000 $lib "lcd4.lib" '$lib "mcsbyte.lbx" 'Config Rc5 = Pind.2 'Enable Interrupts Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.2 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 Config Lcd = 16 * 2 Dim H1 As Integer Dim H2 As Integer Dim M1 As Integer Dim M2 As Integer Dim S1 As Integer Dim S2 As Integer Dim B As Integer Dim Ndat As Byte Clockzero: Let S1 = 0 Let S2 = 0 Let H1 = 0 Let H2 = 0 Let M1 = 0 Let M2 = 0 Let M1 = 0 Let M2 = 0
Cls Locate 2 , 1 Lcd "Hour:" Locate 2 , 8 Lcd "Min:" Locate 2 , 13 Lcd "Sec:" Do Seconds: If S1 = 6 Then M2 = M2 + 1 If S1 = 6 Then S1 = 0 Locate 1 , 13 Lcd S1 If S2 = 10 Then S2 = 0 Locate 1 , 14 Lcd S2 Minutes: Locate 1 , 8 Lcd M1 If M2 = 10 Then M1 = M1 + 1 If M2 = 10 Then M2 = 0 If M1 = 6 Then H2 = H2 + 1 If M1 = 6 Then M1 = 0 Locate 1 , 9 Lcd M2 Houres: If H1 = 6 Then Goto Clockzero Locate 1 , 1 Lcd H1 If H2 = 10 Then H1 = H1 + 1 If H2 = 10 Then H2 = 0 Locate 1 , 2 Lcd H2 S2 = S2 + 1 If S2 = 10 Then S1 = S1 + 1 Waitms 1000 Loop
в тексте указан внутренний кварц, но на самом деле уже сделал внешний 8.000 мгц. как указывать внешний я не знаю.
Последний раз редактировалось Vooon 30 сен 2009, 19:21, всего редактировалось 2 раз(а).
Причина:CODE!!!
Чтобы не заблуждаться про внутренние кварцы советую почитать - Устройство микроконтроллера AVR - http://avr123.nm.ru/02.htm - возможно вы станете более осознано подходить к программированию AVR зная больше о его устройстве.
И вообще - делать часы на задержках - гнилая затея, точно идти не будут. Часы надо делать на таймере. Не обязательно на часовом кварце, можно на основном - но на таймере. Даже можно без прерываний, если не хочется.