[an error occurred while processing this directive]
Последовательный вывод данных через пин в Кейл C (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Эсперыч 13 ноября 2002 г. 16:07

Долго пользовался "классическим" кодом для вывод байта, который предлагался самим же Кейлом (в примерах по i2c, типа:

#define SDATA P1_3
char output_data;

SDATA = ((output_data & 0x80) ? 1 : 0); // вывод со старшего бита
SDATA = ((output_data & 0x01) ? 1 : 0); // вывод с младшего бита

Но на это генерируется ЖУТКИЙ код следующего вида:
/*
; SOURCE LINE # 96
0008 EE MOV A,R6
0009 30E703 JNB ACC.7,?C0014
000C D3 SETB C
000D 8001 SJMP ?C0015
000F ?C0014:
000F C3 CLR C
0010 ?C0015:
0010 9293 MOV P1_3,C
*/

====> А вот попробовал вот так - само ИЗЯЩЕСТВО!

P1_3 = (output_data & 0x80); // вывод со старшего бита
/*
001C EE MOV A,R6
001D 33 RLC A
001E 9293 MOV P1_3,C
*/
P1_3 = (output_data & 0x01); // вывод с младшего бита

/*
0020 EE MOV A,R6
0021 13 RRC A
0022 9293 MOV P1_3,C
*/

ЗЫ. Если это общеизвестно - звыняйте, но для меня это открытие :)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru