| Преобразование состояния входа в число | 
| 
				
			 | 
| 
| marss70 | Дата: Вторник, 15.01.2013, 22:31 | Сообщение # 1 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | Помогите, пожалуйста, с кодом, который преобразует состояние на ножках порта в число. Например, на ножках порта "В" состояние 10010010, а в недрах МК 146... Наборот делается в одно мгновение- PortB = 146 и на ножках порта B выставится двоичный код, а вот наоборот, что-то никак недотумкаю. 
 
 |  
 |  |  |  | 
| 
| AlekS | Дата: Вторник, 15.01.2013, 22:44 | Сообщение # 2 |  | Группа: Проверенные Сообщений: 247 
 Статус: Offline | Для вывода на LCD индикатор: 
 Lcd "D=" ; Bin(portf) 'смотрим входы датчиков на порту "F" - 00000000
 
 Bin(portf)- выводит в бинарнике.
 
 
 |  
 |  |  |  | 
| 
| marss70 | Дата: Вторник, 15.01.2013, 22:59 | Сообщение # 3 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | Спасибо, сейчас попробую. 
 
 |  
 |  |  |  | 
| 
| Aleks8383 | Дата: Вторник, 15.01.2013, 23:05 | Сообщение # 4 |  | Группа: Проверенные Сообщений: 102 
 Статус: Offline | Посмотрите здесь,очень толковый перевод обучалки по Барсику,сразу много вопросов отпадёт.Цитата (marss70) Помогите, пожалуйста, с кодом
 
 
 
 Сообщение отредактировал Aleks8383 - Вторник, 15.01.2013, 23:06 |  
 |  |  |  | 
| 
| marss70 | Дата: Вторник, 15.01.2013, 23:07 | Сообщение # 5 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | Что-то не работает. Привожу мой код, что не так? 
 $regfile = "m8def.dat"
 $crystal = 20000000
 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
 Cls
 Cursor Off
 Lcd "D=" ; Bin(portd)                                      'выводим результат преобразования на ЖК
 Waitms 100                                                ' зедержка 0,1 секунды
 End
 
 
 |  
 |  |  |  | 
| 
| marss70 | Дата: Вторник, 15.01.2013, 23:10 | Сообщение # 6 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | Я оттуда и брал инфу. 
 
 |  
 |  |  |  | 
| 
| marss70 | Дата: Вторник, 15.01.2013, 23:31 | Сообщение # 7 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | И так что-то не работает... 
 $regfile = "m8def.dat"
 $crystal = 20000000
 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
 Dim B As String * 8
 Do
 B = Bin(portd)
 Cls
 Cursor Off
 Lcd B
 Waitms 100
 Loop
 End
 
 
 
 
 Сообщение отредактировал marss70 - Вторник, 15.01.2013, 23:42 |  
 |  |  |  | 
| 
| kip96 | Дата: Среда, 16.01.2013, 23:20 | Сообщение # 8 |  | Группа: Свой человек Сообщений: 170 
 Статус: Offline | А так? $regfile = "m8def.dat"
 $crystal = 20000000
 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
 Dim B As String * 8
 Do
 B = Bin(pind)
 Cls
 Cursor Off
 Lcd B
 Waitms 100
 Loop
 End
 
 
 |  
 |  |  |  | 
| 
| pchela5 | Дата: Четверг, 17.01.2013, 13:15 | Сообщение # 9 |  | Группа: Свой человек Сообщений: 84 
 Статус: Offline | 1. Официально Мега8 работает до 16 мегагерц. 2. Порт d надо настроить на вход командой DDRD = &B00000000
 3. Ну и не мешало бы вставить несколько строчек такого рода:
 $hwstack = 8
 $swstack = 16
 $framesize = 16
 
 
 |  
 |  |  |  | 
| 
| kip96 | Дата: Четверг, 17.01.2013, 13:50 | Сообщение # 10 |  | Группа: Свой человек Сообщений: 170 
 Статус: Offline | Если внимательно посмотрите код, то они отличаются всего лишь одной строчкой B = Bin(pind)
 вместо
 B = Bin(portd)
 которая и решает всю проблему. Типичная ошибка. Куча обучалок, а всё те-же грабли
 Остальное всё, конечно, справедливо, но по умолчанию, порты в АВР настроены на вход.
 
 
 |  
 |  |  |  | 
| 
| marss70 | Дата: Четверг, 17.01.2013, 21:28 | Сообщение # 11 |  | Группа: Проверенные Сообщений: 80 
 Статус: Offline | Спасибо kip96! Всё работает. Грабли на самом деле одни и те же! Я ж про это знал. Хотя на дисплее не совсем то, что хотелось бы, а именно набор нулей и единиц. Остальное дотумкаем. Про 16 мгц тоже факт, но и 20 мгц по зубам. У меня частотомер на таком кристалле работает. 
 
 
 
 Сообщение отредактировал marss70 - Четверг, 17.01.2013, 21:46 |  
 |  |  |  | 
| 
| pchela5 | Дата: Четверг, 17.01.2013, 23:49 | Сообщение # 12 |  | Группа: Свой человек Сообщений: 84 
 Статус: Offline | Three I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins
 I/O location is read only, while the Data Register and the Data Direction Register are read/write.
 In addition, the Pull-up Disable – PUD bit in SFIOR disables the pull-up function for all pins in all
 ports when set.
 Это из даташита. Читать надо из pin
 
 
 |  
 |  |  |  |