Понятно, про удлинение и дополнительный контроллер. Нет у вас желания усложнить свою "программную" жизнь,
но облегчить "железную"? Например, использовать в качестве микросхемы для опроса кнопок микросхему от
импортного кнопочного телефонного аппарата, а ее соединять всего парой проводов с МК.
Но придется программно декодировать DTMF посылки
Что такое "макрос IRPC" не очень знаю, могу только озвучить догадки, почему так получается, если надо, конечно?
По поводу отправки строки в UART.
Я бы сделал на основании вашей программы примерно так:
Спойлер
Код: Выделить всё
; Где-то внутри главного цикла
mov DPTR,#AT_CMGS ; Загружаем адрес 1 символа команды
call Send_comm
;=======
Send_comm: ; Подпрограмма отправки
clr A ; Очистим АСС
movc A, @A+DPTR ; Поместим очередной символ команды в АСС
mov SBUF, A ; Скопируем его в буфер передатчика
jnb TI,$ ; Нет флага ТІ (окончания посылки) - топчемся на месте
clr TI ; Был флаг ТІ, байт ушел, сбросим флаг ТІ
inc DPTR ; Возьмем следующий символ
jnz Send_comm ; Если конец команды, выходим
ret
;=======
Serial_int: ; Обработчик прерываний посл. порта
clr EA ; Запретим все прерывания
jb RI, Receive ; Если есть флаг RI, значит это прием
jmp Serial_end
Receive: ; Это прием
mov A, SBUF ; Это прием, примем байт
clr RI ; Сбросим флаг RI
Serial_end:
setb EA ; Разрешим все прерывания
reti


Достал еще пару штук АТ89С51RD2-IM (крутой контроллер, даже PWM вроде в нем есть, жаль только EEPROM нет), но я не могу найти чем их запрограммировать. Они вроде как имеют неубиваемый UART-загрузчик, но я никак не могу до него достучатся с помощью атмеловской утилиты FLIP, хотя все вроде делаю как надо: EA = 1, PSEN = 0, нажимаю ресет, и ...утилита не видит контроллер. Может кто имеет опыт пользования ею ? Или есть какой-то программатор/софт, который эти контроллеры понимает ?