не-е, ты вполне вменяемый. мои слова понимаешь с первого раза. просто тебе знаний не хватает. и поэтому ты намудрил нерациональный избыточный код. а вот чтобы не крутиться непрерывно в цикле и с "бешеной" скоростью повторять опрос датчиков, тебе нужно задействовать таймер. и с помощью таймера отмерять, например, 1-секундные интервалы, и раз в секунду опрашивать датчики и выводить результаты на экран.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Если есть самокритика - значит уже вменяемый. Но всё относительно. Код я бы советовал оформлять в соответствующие теги. Но, если на это модераторы не обращают внимания, значит они неприхотливые, значит они это хавают.( При этом ещё рассуждают о быдло коде.(
Я немного запутался в инструкции, и прицепился к аппаратному TWI, вместо того, чтобы оставить в покое эти статусные коды и прописать всё в цикле. И с этим вопросом и вас запутал. Вы подумали, что мне непонятно как адресуется микросхема. А я имел ввиду, что пытаясь обращаться в обработчике к двум и более слейвам, меня постоянно выкидывает только на первый. Теперь понятно, что это всё таки можно сделать, но не так дебильно как я пытался.
я проверяю только один статусный код - SLA_W_OK, это то, что адрес для записи прошел правильно, то есть, микра восприняла адрес и дала правильный ответ. мне этого хватает, мне это гарантирует, чо все следующие статусы будут правильные. как я уже говорил, можно сделать и в прерывании по счетчику, который указывает к какому датчику обращаться. но грамотное написание программы означает, что обработчик должен быть как можно короче, чтобы на прерывание тратить как можно меньше времени. и если в программе имеется несколько прерываний, то "длинный" обработчик может задержать какое-либо прерывание на недопустимо большое время. а у тебя в твоем исходном коде всё делается в прерывании, и поэтому прерывание длится слишком долго. а если ты еще вздумал бы в этом же прерывании делать вывод результатов на экран, то это был бы истинно быдлокод.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вот именно этим быдло кодом я заняться и вознамерился)) Странно конечно, но вывод на прерываниях на дисплей получился, в протеусе, хотя был уверен что именно это и не выйдет. Теперь доделаю эту стряпню как есть, а потом переделаю по вашим замечаниям. Инструкция в даташитах по i2c всё ж какая-то половинчатая , как бы не полностью разъясняет.
TWI, USART в режиме I²C есть не во всех камнях AVR(mega8515, usb82/162). Жесткая привязка лап контроллера к SDA и SCL, на практике, не всегда удобна. Как вариант использовать "ногодрыг". Преимущества - можно назначать любые лапы как SDA и SCL - за счет перевода лап, назначенных SDA, SCL на вывод ускоряется запись - при чтении лапа SDA назначается входом с встроенной подтяжкой и понижается скорость SCL - код на ассемблере меньше, чем код обслуживания модуля TWI.
Ногодрыгами занимался по 1-Wire, даже вполне так себе сносно, по I2C пока не добрался. На первый взгляд показалось, что по 1-wire эта тема даже по-сложнее.
Добавлено after 8 hours 31 minute 43 seconds: Код получился длинный и нубовский. Вывод на дисплей на аппаратном TWI, опрос датчика уже с учётом замечаний. Для бивней эта писанина наверное может быть полезна как чисто физически всё работает. Спасибо большое за помощь. В принципе, первую часть перевести в основной цикл и это говно наверное можно даже использовать в железе. Спойлер
TWSI: cli ldi temp,0b01111110 out TWDR,temp ldi temp,0b10000100 out TWCR,temp
Wait1: in r16,TWCR sbrs temp,TWINT rjmp Wait1
in temp,TWSR andi temp,0xF8 cpi temp,0x18 brne error
rcall Del_15ms rcall Init_1 ///////// 1-я команда инициализации
rcall Del_5ms ///////// 2-я команда инициализации rcall Init_1
rcall Del_100mks ///////// 3-я команда инициализации rcall Init_1
rcall Del_100mks rcall Init_4 ///////// 4-я команда инициализации
rcall Del_100mks rcall Init_5 ///////// 5-я команда инициализации (Переход на 4-битный режим)
rcall Del_100mks ///////// 6-я команда инициализации rcall Init_6
rcall Del_100mks ///////// 7-я команда инициализации rcall Init_7
rcall Del_100mks ///////// 8-я команда инициализации (Последняя команда инициализации) rcall Init_8
////////////////////////////////////////////////// rcall Curs_1 rcall Stop sei reti
Error: ldi zh,high(term+1) ldi zl,low(term+1) ldi temp,0xff st z,temp ret
Init_1: ///////////////////////////////////////// Это 1-полубайт отправка ldi temp,0b00110100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait2: in r16,TWCR sbrs temp,TWINT rjmp Wait2
in temp,TWSR andi temp,0xF8 cpi temp,0x28 brne error //////////////// ldi temp,0b00110000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait3: in r16,TWCR sbrs temp,TWINT rjmp Wait3
in temp,TWSR andi temp,0xF8 cpi temp,0x28 brne error ret ////////// Конец Init_1 Init_4: //////////// Это 4-я команда инициализации ///////////////////////////////////////// Это 1-полубайт отправка
ldi temp,0b00100100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait6: in r16,TWCR sbrs temp,TWINT rjmp Wait6
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00100000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait7: in r16,TWCR sbrs temp,TWINT rjmp Wait7
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ret ////////// Конец Init_4 Init_5: //////////// Это 5-я команда инициализации ///////////////////////////////////////// Это 1-полубайт отправка
ldi temp,0b00100100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a: in r16,TWCR sbrs temp,TWINT rjmp Wait_a
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00100000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b: in r16,TWCR sbrs temp,TWINT rjmp Wait_b
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт отправка
ldi temp,0b10000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c: in r16,TWCR sbrs temp,TWINT rjmp Wait_c
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b10000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d: in r16,TWCR sbrs temp,TWINT rjmp Wait_d
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ret ////////// Конец Init_5
Init_6: //////////// Это 6-я команда инициализации ///////////////////////////////////////// Это 1-полубайт отправка
ldi temp,0b00000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a1: in r16,TWCR sbrs temp,TWINT rjmp Wait_a1
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b1: in r16,TWCR sbrs temp,TWINT rjmp Wait_b1
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт отправка
ldi temp,0b11100100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c1: in r16,TWCR sbrs temp,TWINT rjmp Wait_c1
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b11100000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d1: in r16,TWCR sbrs temp,TWINT rjmp Wait_d1
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ret ////////// Конец Init_6
Init_7: //////////// Это 7-я команда инициализации ///////////////////////////////////////// Это 1-полубайт отправка
ldi temp,0b00000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a2: in r16,TWCR sbrs temp,TWINT rjmp Wait_a2
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b2: in r16,TWCR sbrs temp,TWINT rjmp Wait_b2
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт отправка
ldi temp,0b00010100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c2: in r16,TWCR sbrs temp,TWINT rjmp Wait_c2
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00010000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d2: in r16,TWCR sbrs temp,TWINT rjmp Wait_d2
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ret ////////// Конец Init_7
Init_8: //////////// Это 8-я команда инициализации ///////////////////////////////////////// Это 1-полубайт отправка
ldi temp,0b00000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a3: in r16,TWCR sbrs temp,TWINT rjmp Wait_a3
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b3: in r16,TWCR sbrs temp,TWINT rjmp Wait_b3
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт отправка
ldi temp,0b01100100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c3: in r16,TWCR sbrs temp,TWINT rjmp Wait_c3
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01100000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d3: in r16,TWCR sbrs temp,TWINT rjmp Wait_d3
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ret ////////// Конец Init_8
Curs_1: //////////// Первая буква rcall Del_5ms
///////////////////////////////////////// Это 1-полубайт знакоместа
ldi temp,0b10000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a4: in r16,TWCR sbrs temp,TWINT rjmp Wait_a4
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b10000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b4: in r16,TWCR sbrs temp,TWINT rjmp Wait_b4
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт знакоместа
ldi temp,0b00110100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c4: in r16,TWCR sbrs temp,TWINT rjmp Wait_c4
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00110000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d4: in r16,TWCR sbrs temp,TWINT rjmp Wait_d4
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец установки знакоместа буквы
///////////////////////////////////////// Это 1-полубайт записи первой буквы
ldi temp,0b01010101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a5: in r16,TWCR sbrs temp,TWINT rjmp Wait_a5
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01010001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b5: in r16,TWCR sbrs temp,TWINT rjmp Wait_b5
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт записи первой буквы
ldi temp,0b01000101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c5: in r16,TWCR sbrs temp,TWINT rjmp Wait_c5
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01000001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d5: in r16,TWCR sbrs temp,TWINT rjmp Wait_d5
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 1-й буквы ////////// Запись 2-й буквы
///////////////////////////////////////// Это 2-полубайт записи первой буквы ///////////////////////////////////////// Это 1-полубайт записи второй буквы
ldi temp,0b01100101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a6: in r16,TWCR sbrs temp,TWINT rjmp Wait_a6
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01100001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b6: in r16,TWCR sbrs temp,TWINT rjmp Wait_b6
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт записи второй буквы
ldi temp,0b01010101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c6: in r16,TWCR sbrs temp,TWINT rjmp Wait_c6
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01010001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d6: in r16,TWCR sbrs temp,TWINT rjmp Wait_d6
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 2-й буквы
///////////////////////////////////////// Это 1-полубайт записи третьей буквы
ldi temp,0b01100101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a7: in r16,TWCR sbrs temp,TWINT rjmp Wait_a7
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01100001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b7: in r16,TWCR sbrs temp,TWINT rjmp Wait_b7
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт записи третьей буквы
ldi temp,0b11010101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c7: in r16,TWCR sbrs temp,TWINT rjmp Wait_c7
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b11010001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d7: in r16,TWCR sbrs temp,TWINT rjmp Wait_d7
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 4-й буквы
///////////////////////////////////////// Это 1-полубайт записи четвертой буквы
ldi temp,0b01110101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a8: in r16,TWCR sbrs temp,TWINT rjmp Wait_a8
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01110001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b8: in r16,TWCR sbrs temp,TWINT rjmp Wait_b8
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт записи четвертой буквы
ldi temp,0b00000101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c8: in r16,TWCR sbrs temp,TWINT rjmp Wait_c8
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00000001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d8: in r16,TWCR sbrs temp,TWINT rjmp Wait_d8
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 4-й буквы
///////////////////////////////////////// Это 1-полубайт записи двоеточия 1-й строки
ldi temp,0b00110101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a9: in r16,TWCR sbrs temp,TWINT rjmp Wait_a9
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00110001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b9: in r16,TWCR sbrs temp,TWINT rjmp Wait_b9
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт записи двоеточия 1-й строки
ldi temp,0b10100101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c9: in r16,TWCR sbrs temp,TWINT rjmp Wait_c9
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b10100001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d9: in r16,TWCR sbrs temp,TWINT rjmp Wait_d9
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи двоеточия 1-й строки
///////////////////////////////////////// Это 1-полубайт знакоместа второй строки
ldi temp,0b11000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a41: in r16,TWCR sbrs temp,TWINT rjmp Wait_a41
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b11000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b41: in r16,TWCR sbrs temp,TWINT rjmp Wait_b41
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт знакоместа 2-й строки
ldi temp,0b00110100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c41: in r16,TWCR sbrs temp,TWINT rjmp Wait_c41
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b00110000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d41: in r16,TWCR sbrs temp,TWINT rjmp Wait_d41
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец установки знакоместа буквы 2-й строки
///////////////////////////////////////// Это 1-й полубайт 1-й буквы 2-й строки
ldi temp,0b01010101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a91: in r16,TWCR sbrs temp,TWINT rjmp Wait_a91
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01010001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b91: in r16,TWCR sbrs temp,TWINT rjmp Wait_b91
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт 1-й буквы 2-й строки
ldi temp,0b01100101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c91: in r16,TWCR sbrs temp,TWINT rjmp Wait_c91
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01100001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d91: in r16,TWCR sbrs temp,TWINT rjmp Wait_d91
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 1-й буквы 2-й строки
///////////////////////////////////////// Это 1-полубайт 2-й буквы 2-й строки
ldi temp,0b01100101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a92: in r16,TWCR sbrs temp,TWINT rjmp Wait_a92
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b01100001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_b92: in r16,TWCR sbrs temp,TWINT rjmp Wait_b92
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error ////////////////////////////////// ///////////////////////////////////////// Это 2-й полубайт 2-й буквы 2-й строки
ldi temp,0b11000101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_c92: in r16,TWCR sbrs temp,TWINT rjmp Wait_c92
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b11000001 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_d92: in r16,TWCR sbrs temp,TWINT rjmp Wait_d92
in temp,TWSR andi temp,0xF8 cpi temp,0x28
breq PC+2 ; rjmp error ////////// Конец записи 2-й буквы 2-й строки
///////////////////////////////////////////////
ldi temp,0b11000100 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_94: in r16,TWCR sbrs temp,TWINT rjmp Wait_94
in temp,TWSR andi temp,0xF8 cpi temp,0x28 breq PC+2 ; rjmp error //////////////// ldi temp,0b11000000 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
ret ////////// HEX >>> BCD температуры /////////// Send_dat_temp1: clr r20 clr r21 rcall Vyv_temp rcall bin16BCD5 mov data,tBCD0 lsl data lsl data lsl data lsl data ori data,0b00000011 rcall Send_data RET
Send_dat_temp2: clr r20 clr r21 rcall Vyv_temp rcall bin16BCD5 mov data,tBCD0 lsr data lsr data lsr data lsr data swap data ori data,0b00000011 rcall Send_data RET
Send_dat_temp3: clr r20 clr r21 rcall Vyv_temp rcall bin16BCD5 mov data,tBCD1 lsl data lsl data lsl data lsl data ori data,0b00000011 rcall Send_data RET
/////// Вывод значчения температуры ///////// Send_data: ///////// 1-й полубайт ////////// mov temp,data lsl temp lsl temp lsl temp lsl temp
ori temp,0b00000101 out TWDR,temp ldi temp,0b10000101 out TWCR,temp
Wait_a95: in r16,TWCR sbrs temp,TWINT rjmp Wait_a95
во-первых, код следует помещать в тег "Code", чтобы не нарушалось форматирование кода. во-вторых, такую длинную "портянку" следует прятать в тег спойлер ("spoiler"). про длинные тексты и спойлер есть правило форума 2.5. не надо людей заставлять долго прокручивать экран. кто захочет почитать, откроет спойлер.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Задержки для дисплея проверял в отладчике, они примерно верные. А эта последняя скорей всего вообще не нужна, там что-то налепил, потом поправлю, спасибо. Этот код, как было выше замечено, нужно приводить в правильный вид. В обработчике, наверное, нельзя делать такой кирпич, тем более пытаться в нëм делать опрос нескольких слейвов. Это просто для сведения начинающих, кто как и я попал в просак с неправильным пониманием даташита.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения