Написал програмку для МК ATmega16, которая эмулирует нажатие кнопки '5' на телефоне.
Выставил фюзами внутрений задающий генератор на 8МГц.
Ножку 14(RXD) МК подключил к 5(Tx) контакту телефона, 15(TXD) ножку МК подключил к 6(Rx) контакту тел-на,
а 11(GND) ножку МК подключил к 1(GND) контакту телефона (см. рис.).
Откомпилировал в AVRStudio без ошибок.
Собрал схему и запрограмировал микроконтроллер, но устройство не работае (нету эмуляции нажатия кнопки).
Телефон рабочий, подключал к охранной GSM сигнализации, и все работало нормально. Кабель и микроконтроллер - целые.
Может я гдето допустил ошибку, помогите советом.
Код: Выделить всё
.INCLUDE "m16def.inc"
.MACRO outi
ldi R16,@1
out @0,R16
.ENDMACRO
.MACRO putc
ldi R16,@0
rcall uart_snt ; вызываем подпрограмму передачи данных по UART.
.ENDMACRO
.org 0x0000
rjmp start; прыгаем на метку старт
start:
outi SPL,low(RAMEND) ; инициализация стека.
outi SPH,high(RAMEND)
rcall uart_init ; вызов подпрограммы инициализации UART.
putc 'A' ; AT+CKPD=5,100 Эмулируем нажатие кнопки 5.
putc 'T' ; 100 - задержка на 1 секунду
putc '+'
putc 'C'
putc 'K'
putc 'P'
putc 'D'
putc '='
putc '5'
putc ','
putc '1'
putc '0'
putc '0'
putc 0x0D
putc 0x0A
end:
rjmp end; после нажатия кнопки 3 на телефоне программа будет крутится здесь пока будет питание
uart_init: ; тут идет инициализация УАРТа
.equ XTAL = 8000000; частота процессора
.equ baudrate = 9600; уарт будет работать на 9600 бод.
.equ bauddivider = XTAL/(16*baudrate)-1 ; тут просто вычисляем необходимую задержку для таймера.
outi UBRRL , low(bauddivider) ; и загружаем ее в регистры уарта вначале младший байт
outi UBRRH , high(bauddivider) ; потом старший байт
outi UCSRA , 0 ; выставляем режим асинхронной приемопередачи, с обычной (не двойной) скоростью.
outi UCSRC , 1<<URSEL|3<<UCSZ0 ; настраиваем протокол на стандартный. 8 бит, один старт и стоп биты.
outi UCSRB , 1<<RXEN|1<<TXEN|1<<RXCIE|1<<TXCIE;разрешаем прием и передачу
ret
uart_snt:
sbis UCSRA,UDRE; Ждем пока бит UDRE в регистре UCSRA станет 1, что означет готовность УАРТА к передаче.
rjmp uart_snt
out UDR,R16 ; бросаем число из регистра 16 в регистр приемопередатчика.
ret



