Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 09.02.2006, 15:00  
maxNTF
Гость
 
Сообщений: n/a
По умолчанию

Ну принцип вроде понял.
Вот этот код на асме должен вывести с 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  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию

Создай массив во флэше с необходимыми командами - а потом просто пихай их в уарт
Gnider вне форума  
Непрочитано 09.02.2006, 18:20  
maxNTF
Гость
 
Сообщений: n/a
По умолчанию

Я понимаю что нужно создать массив с нужными мне командами, но как я запишу такую вот строчку "AT^SKPD=12,20" в PIC на ассемблере, он ее даже не поймет. Мне нужно знать как выглядит эта команда в двоичном виде, или шестнадцатеричном. Ну к примеру эта команда будет выглядеть так 66b 22c ну и так далее. Так вот как их переводить в такой вид, я ведь не могу записать в регистр контроллера типа
Код:
MOVLW   AT^SKPD=12,20
 
Непрочитано 09.02.2006, 20:19  
maxNTF
Гость
 
Сообщений: n/a
По умолчанию

Ага, принцип я понял, можно команду AT^SKPD=12,20 записать к примеру так
Код:
DATA "AT^SKPD=12,20"
Только тут возникла другая трудность, как теперь эти данные вывести?
Покажите плиз маленький примерчик как их вывести через 0 регистр порта
 
Непрочитано 10.02.2006, 11:25  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию

Есть сайт. microchip.com - там есть куча примеров на все случаи жизни.
Gnider вне форума  
Непрочитано 18.02.2006, 22:25  
Гость
 
Сообщений: n/a
По умолчанию

Сообщение от maxNTF
Ага, принцип я понял, можно команду AT^SKPD=12,20 записать к примеру так
Код:
DATA "AT^SKPD=12,20"
Только тут возникла другая трудность, как теперь эти данные вывести?
Покажите плиз маленький примерчик как их вывести через 0 регистр порта
вышеприведенная команда в таком виде отображается только на мониторе или записывается на бумаге. как на самом деле эта команда выглядит, знает только разработчик протокола обмена между телефоном и компом. Даже если это и стандартная команда для всех модемов в мире, в любом случае ее побитное представление ни каким образом не похожа на буквенно цифоровое отображение.
 
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot