Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Помогите принять свое эхо на USART

Отправлено Roman_V 26 мая 2008 г. 14:49


align=Top
Уже у вас спрашивал о том как эхо свое убрать, а теперь наоборот надо получить его. Схема по ссылке. Задача сейчас наипростейшая. Но я замучался и не знаю куда копать. Надо поймать то что я послал в линию. Линия однопроводная. У меня предача через эмитерный повторитель шла, а тут я пока его выбросил и закоротил прием и передачу. У моего PI16F628f полный дуплекс, вот я и думаю что передавать буду, а по прерыванию будет ловится то что я передаю. Дальше подразумевается что еще один контроллер подключенный в эту линию будет тоже передавать, но пока просто надо свое эхо поймать. Вот программа. Когда стоят call DelayMS при передаче, то все принимается в буфер (делаю паузу в Proteus и смотрю содержимое памяти контроллера), Но когда я убираю эти задержки, то в буфер сыпется 0x7F и программа не зацикливается на метке TOP1. Даже не знаю куда копать. Помогите плиз.
не знаю куда закачать исходник поэтому привожу тут.


LIST p=16f628a
#include <p16f628a.inc>
__CONFIG 3F09h



CBLOCK 0X20
DTA,tempW,tempS,MYSTAT,ind,i,ind1,w1,w2
TD0,TD1,TD2
aa,bb
RD0,RD1,RD2,RD3,RD4,RD5,RD6,RD7
cc,dd
ENDC

#define BANK0 BCF STATUS, RP0
#define BANK1 BSF STATUS, RP0
#define LED1 PORTB,7
#define LED2 PORTB,6


org 000h
goto main

org 004h

INTERRUPTER:
MOVWF tempW ; сохраняю W
MOVFW STATUS ; сохраняю STATUS
MOVWF tempS

BTFSS PIR1,RCIF
goto ENDINT

MOVFW RCREG ; Принимаем байт
MOVWF DTA
; BCF PIR1,RCIF ; хотя вроде аппаратно сбрысывается...


movlw RD0
movwf FSR
addwf ind,w
movwf FSR
movfw DTA
movwf INDF
incf ind,f

ENDINT:
MOVFW tempS
MOVWF STATUS
MOVFW tempW
RETFIE



send:
BANK1
emp_
btfss TXSTA^80,TRMT
goto emp_
BANK0
return


DelayMs:
movlw .255
movwf w1
dl:
decfsz w1,f
goto dl
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;; П Р О Г Р А М М А ;;;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
BANK1
MOVLW B'00000000'
MOVWF TRISA^80
MOVLW B'00000110'
MOVWF TRISB^80
BANK0


clrf PORTA
clrf PORTB
clrf MYSTAT



MOVLW 0x07
MOVWF CMCON ; УРОДСКИЙ КОМПАРАТОР!!!!!!!!!!

clrf ind


USART
BANK1
movlw .12 ;19200 @4.0Mhz
movwf SPBRG^80
bcf TXSTA^80,SYNC
bsf TXSTA^80,BRGH
bsf TXSTA^80,TXEN
bsf PIE1^80,RCIE
bcf TXSTA^80,TX9
BANK0
bsf RCSTA,CREN
bsf RCSTA,SPEN

clrf PIR1 ; это взял из какого-то примера
call DelayMs ; для устаканивания USART
movfw RCREG ; и для очистки буфера приема
movfw RCREG
movfw RCREG

bsf INTCON,PEIE
bsf INTCON,GIE
;USART


TOP:
movlw 0xE4
movwf TXREG
call send
call DelayMs
movlw 0xE5
movwf TXREG
call send
call DelayMs
movlw 0xE6
movwf TXREG
call send
call DelayMs

TOP1
goto TOP1


END


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 38:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru