Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.02.2006, 15:00
|
|
maxNTF
Гость
|
Ну принцип вроде понял.
Вот этот код на асме должен вывести с 0 регистра порта А следующий байт 10101010.
Я использую PIC16F84A c тактовой частотой 4МГц. Время выполнения одной команды 1мкс (некоторых команд 2мкс). Может что, то не совсем верно, поправьте если не лень.
Код:
|
; Секция заголовка
PORTA EQU 05h
PORTB EQU 06h
STATUS EQU 03h
; ячейки ОЗУ
DATA1 EQU 20h
TIMER1 EQU 21h
TEMP EQU 22h
; биты pегистpа STATUS
RP EQU 5h
; упpавляющие pегистpы
TRISA EQU 85h
TRISB EQU 86h
; слова инициализации для поpтов ввода/вывода
INITA EQU B'00000001'
INITB EQU B'00000000'
; слова инициализации для передаваемых данных
INITD1 EQU B'10101010'
; Рабочая секция
; начало исполняемого кода
ORG 0
GOTO BEGIN
ORG 100h
BEGIN
;Инициализация порта А
BCF STATUS,RP ;Выбор банка 0
CLRF PORTA ;Очистить регистр PORTA
MOVLW INITA ;Загpузить B'00000001' в pегистp W
BSF STATUS,RP ;Выбор банка 1
MOVWF TRISA ;Все разряды порта А установить как выходы
;Инициализация порта В
BCF STATUS,RP ;Выбор банка 0
CLRF PORTB ;Очистить регистр PORTB
MOVLW INITB ;Загpузить B'00000000' в pегистp W
BSF STATUS,RP ;Выбор банка 1
MOVWF TRISB ;Все разряды порта В установить как выходы
;
BCF STATUS,RP ;Выбор банка 0
START
;
MOVLW INITD1 ;Загpузить B'10101010' в pегистp W
MOVWF DATA1 ;Загpузить pегистp W DATA1
;
BSF PORTB,0 ;уст. 1 в регистор 0
CALL PPROG ;вызов тестовой подпрограммы
;запуск стартового бита
MOVLW 0h ;Загpузить 0h в pегистp W
MOVWF PORTB ;Загpузить pегистp W PORTA
MOVLW 0Bh ;Загрузить 0Bh в регистр W (52mkc)
MOVWF TIMER1 ;Загрузить регистр W в TIMER1
CALL TIMER ;вызов подпрог. таймера на 52мкс
;передача 0 бита
MOVLW INITD1 ;Загpузить B'10101010' в pегистp W
MOVWF PORTB ;Загpузить pегистp W PORTA
MOVLW 0Ah ;Загрузить 0Ah в регистр W (52mkc)
MOVWF TIMER1 ;Загрузить регистр W в TIMER1
CALL TIMER ;вызов подпрог. таймера на 52мкс
;передача остальных битов
MOVLW 7h ;Загpузить 7h в pегистp W
MOVWF TEMP ;Загpузить pегистp W TEMP
LDATA
BCF STATUS,0 ;очистить бит 0 в регистре STATUS
RRF PORTB,1 ;сдвиг в лево регистра порта
MOVLW 0Ah ;Загрузить 0Ah в регистр W (52mkc)
MOVWF TIMER1 ;Загрузить регистр W в TIMER1
CALL TIMER ;вызов подпрог. таймера на 52мкс
DECFSZ TEMP,1 ;уменьшаем TEMP на 1
GOTO LDATA
; MOVLW 0Ch ;Загрузить 0Ch в регистр W (52mkc)
; MOVWF TIMER1 ;Загрузить регистр W в TIMER1
; CALL TIMER ;вызов подпрог. таймера на 52мкс
;запуск стоп бита
MOVLW 0h ;Загpузить 0h в pегистp W
MOVWF PORTB ;Загpузить pегистp W PORTA
MOVLW 0Bh ;Загрузить 0Bh в регистр W (52mkc)
MOVWF TIMER1 ;Загрузить регистр W в TIMER1
CALL TIMER ;вызов подпрог. таймера на 52мкс
GOTO START
PPROG
;подпрограмма сигнализирующая о начале передачи данных при возникновении
;какого либо события.
LABEL1
BTFSS PORTA,0 ;проверяем состояние 0 регистра порта В
GOTO LABEL1
RETURN
TIMER
DECFSZ TIMER1,1 ;Уменьшить TIMER1 на 1
GOTO TIMER ;и переходить обратно, пока не станет =0
RETURN
END |
Теперь, если этот программный UART я построил правильно, подскажите плиз как мне вместо 10101010 передать ну к примеру AT^SKPD=12,20
То есть, как перевести AT команду в двоичный код?
Если можно покажите пример как будет выглядеть данная команда или какая ни будь другая.
|
|
|
|
09.02.2006, 16:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Создай массив во флэше с необходимыми командами - а потом просто пихай их в уарт
|
|
|
|
09.02.2006, 18:20
|
|
maxNTF
Гость
|
Я понимаю что нужно создать массив с нужными мне командами, но как я запишу такую вот строчку "AT^SKPD=12,20" в PIC на ассемблере, он ее даже не поймет. Мне нужно знать как выглядит эта команда в двоичном виде, или шестнадцатеричном. Ну к примеру эта команда будет выглядеть так 66b 22c ну и так далее. Так вот как их переводить в такой вид, я ведь не могу записать в регистр контроллера типа
|
|
|
|
09.02.2006, 20:19
|
|
maxNTF
Гость
|
Ага, принцип я понял, можно команду AT^SKPD=12,20 записать к примеру так
Код:
|
DATA "AT^SKPD=12,20" |
Только тут возникла другая трудность, как теперь эти данные вывести?
Покажите плиз маленький примерчик как их вывести через 0 регистр порта
|
|
|
|
10.02.2006, 11:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Есть сайт. microchip.com - там есть куча примеров на все случаи жизни.
|
|
|
|
18.02.2006, 22:25
|
|
Гость
|
Сообщение от maxNTF
|
Ага, принцип я понял, можно команду AT^SKPD=12,20 записать к примеру так
Код:
|
DATA "AT^SKPD=12,20" |
Только тут возникла другая трудность, как теперь эти данные вывести?
Покажите плиз маленький примерчик как их вывести через 0 регистр порта
|
вышеприведенная команда в таком виде отображается только на мониторе или записывается на бумаге. как на самом деле эта команда выглядит, знает только разработчик протокола обмена между телефоном и компом. Даже если это и стандартная команда для всех модемов в мире, в любом случае ее побитное представление ни каким образом не похожа на буквенно цифоровое отображение.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
ICD2+PIC16F84
|
otest |
Микроконтроллеры, АЦП, память и т.д |
3 |
05.06.2008 19:09 |
Таймер на PIC16F84
|
488 |
Микроконтроллеры, АЦП, память и т.д |
8 |
25.06.2007 12:27 |
PIC16F84 и PIC16F84A
|
Гость |
Микроконтроллеры, АЦП, память и т.д |
6 |
21.11.2005 05:19 |
pic16f84
|
alexd1 |
Микроконтроллеры, АЦП, память и т.д |
4 |
07.10.2005 01:09 |
Замена PIC16F84
|
DR.ZLO |
Микроконтроллеры, АЦП, память и т.д |
3 |
29.05.2003 23:17 |
Часовой пояс GMT +4, время: 15:21.
|
|