|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
|
Страница 1 от 1
|
[ 7 мнения ] |
|
| Автор |
Съобщение |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Софтуерен UART
Здравейте!
Търсих из форума и из нета информация за софтуерна емулация на УАРТ,попрочетох и седнах да пиша код. Понеже не съм много сигурен дали съм пресметал времената правилно, реших да напиша програмата така, че самостоятелно да си сменя настройките, определящи времето м/у импулсите. Идеята ми беше да включа контролера към компютъра, да дам едни настройки на терминала и той да чака данните, който съобщават брой на циклите на таймер0.
Да, ама не стана.
Някой може ли да даде акъл по въпроса?
 |  |  |  | Код: PROCESSOR 12F629 LIST p=12F629 #include <p12f629.inc> __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_ON & _HS_OSC #define B0 bcf STATUS,RP0;izbor na banka 0 #define B1 bsf STATUS,RP0;izbor na banka 1 W EQU 0 F EQU 1 SPEED EQU 25H TSPEED EQU 26H ;KOPIE NA SPEED ZA IZPRA6TANE KYM TERMINALA NoBIT EQU 27H COUNTER EQU 28H
ORG H'00' GOTO START ;====================================================================== START B1 MOVLW B'10001000' ;PULL-UPS ENABLED,PRESCALER ASSIGNED TO WDT MOVWF OPTION_REG BCF TRISIO,1 ;GP1 IZHOD B0 GOTO MAIN ;======================================================================= SEND MOVLW D'1' MOVWF SPEED MOVWF TSPEED MOVWF COUNTER S1 CALL TRANSFER INCFSZ SPEED MOVFW SPEED MOVWF TSPEED MOVWF COUNTER GOTO S1 ;======================================================================== TRANSFER MOVLW D'8' MOVWF NoBIT BSF GPIO,1 ;GENERIRANE NA START BIT I VISOKO NIVO PREDI NEGO CALL TIME BCF GPIO,1 TRAN CALL TIME RLF TSPEED BTFSC STATUS,C BSF GPIO,1 BTFSS STATUS,C BCF GPIO,1 DECFSZ NoBIT GOTO TRAN ;IZPRA6TANE NA 1 STOP BIT CALL TIME BCF GPIO,1 CALL TIME BSF GPIO,1 RETURN ;======================================================================== TIME CLRF TMR0 AGAIN BCF INTCON,T0IF LOOP BTFSS INTCON,T0IF GOTO LOOP DECFSZ COUNTER,F GOTO AGAIN RETURN ;======================================================================== MAIN CALL SEND END
|  |  |  |  |
|
| Пет Сеп 28, 2007 11:57 am |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
 Re: Софтуерен UART
Не можеш да очакваш всичко да става от първия път.
Необходим ти е цифров или аналогов запомнящ осцилоскоп и проблемчето ще го регистрираш лесно. Може и с обикновен осцилоскоп да пробваш, като софтуерно пуснеш непрекъснат поток от данни по интерфейса.
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Пет Сеп 28, 2007 12:56 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Пусни си една симулация и ще видиш че въпросния ПИН 1 изобщо не реагира - стои си в 0.
Пробвай това :
START B1
bcf STATUS,RP0 ;Bank 0
clrf GPIO ;Init GPIO
movlw 07h ;Set GP<2:0> to
movwf CMCON ;digital IO
bsf STATUS,RP0 ;Bank 1
MOVLW B'10001000' ;PULL-UPS ENABLED,PRESCALER ASSIGNED TO WDT
MOVWF OPTION_REG
movlw 0x2D ;0B00111101
banksel TRISIO
andwf TRISIO,1
B0
GOTO MAIN
|
| Пет Сеп 28, 2007 2:17 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
това е от версията на симулатора(преполагам използваш mplab7.6?). реагира си пинчето.
Реших да пусна просто един диод да мига и забелязах нещо много странно:
каквато и стойност да запиша в OPTION_REG за делителя, диода не променя честотата си на мигане. На какво може да се дължи това? Изтествах с крайни стойности: и после с
|
| Пет Окт 05, 2007 10:08 am |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 Мда
А прочете ли в документацията за какво се ползва бит 3 в option_reg ?
PSA: Prescaler Assignment bit
1 = Prescaler assigned to the WDT
0 = Prescaler assigned to Timer0
Ползваш ли WDT, гледам че си го изключил , ами превключи ли делителя към TMR0
MOVLW B'10000111'
MOVWF OPTION_REG
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Пет Окт 05, 2007 10:55 am |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
мерси за корекцията. Оправих го, обаче сега без делител мига по-бавно, отколкото с делител?!?!?!
въобще не знам дали мисля правилно:
честота на кварца-4MHz => входна честота на "таймер-блока"-1MHz => при PS2-PS0=000 (делител на 2), честотата на входа на брояча трябва да е 0.5MHz(период 2us)=> времето за препълване от 00 през FF до 00 трябва да е 257цикъла х 2us = 564us .т.е. би трябвало диода да мига с честота около 1kHz,а в момента е някъде около 4-5Hz. Верни ли са ми сметките по-горе?
|
| Пет Окт 05, 2007 2:39 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
не знам какво направих, но то тръгна  (мигалката де  ) мерси за помощта!
|
| Пет Окт 05, 2007 3:17 pm |
|
|
|
Страница 1 от 1
|
[ 7 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|