Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Правилен ли ми е кода
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=10277
Страница 1 от 1

Автор:  kostov [ Пон Юли 02, 2012 8:42 pm ]
Заглавие:  Правилен ли ми е кода

Правилен ли е този код:
Код:
list      p=16F84A
include      <p16F84A.inc>
__CONFIG   _CP_OFF & _WDT_OFF & PWRTE_ON & _XT_OSC
w         EQU      0
f         EQU      1
Counter    EQU      H'0C'
         ORG      H'0000'      ;Вектор на НУ
         goto      start      ;Преход към началото на програмата
start         bsf      STATUS, RP0
         movlw      B'11010111'
         movwf      OPTION_REG
         bcf      STATUS, RP0
         clrf      PORTB
         bsf      STATUS, RP0
         movlw      B'11111000'
         movwf      TRISB      ;RB7 - RB3 входове, RB2, RB1, RB0 изходи
         bcf      STATUS, RP0
         goto      main
main         bcf      PORTB, 0      ;RB0=0   
         call      Gpauza      ;голяма пауза
         bsf      PORTB, 0      ;RB0=1   
         call      Mpauza      ;малка пауза
         bcf      PORTB, 1      ;RB1=0   
         call      Mpauza      ;малка пауза
         bsf      PORTB, 1      ;RB1=1   
         call      Mpauza      ;малка пауза
         bsf      PORTB, 2      ;RB2=1   
         call      Mpauza      ;малка пауза
         bcf      PORTB, 2      ;RB2=0   
         call      Mpauza      ;малка пауза
         goto      main      ;повтаряне на цикъла
Gpauza    movlw      D'10'      ;пауза около 650 mS (10*65)
         movwf      Counter
         clrf      TMR0
again         bcf      INTCON, T0IF
loop         btfss      INTCON, T0IF
         goto      loop
         decfsz      Counter, f
         goto      again
         return
Mpauza    movlw      D'1'              ;пауза около 65 mS (1*65)
         movwf      Counter
         clrf      TMR0
again         bcf      INTCON, T0IF
loop         btfss      INTCON, T0IF
         goto      loop
         decfsz      Counter, f
         goto      again
         return   
   END

Трябва да се получи това:
Изображение
Не разбирам много от програмиране, кода е готов примерен код за мигане на светодиод на RB0 преправен от мен.

Автор:  CarBeta [ Пон Юли 02, 2012 10:28 pm ]
Заглавие:  Re: Правилен ли ми е кода

Ще се получи това, което искаш, ако оправиш две грешки:
- вместо PWRTE_ON сложи _PWRTE_ON
- имаш етикети с еднакви имена again и loop, може вторите да са again1 и loop1

Автор:  Пушека [ Вто Юли 03, 2012 7:46 am ]
Заглавие:  Re: Правилен ли ми е кода

Може би картинката на изходите няма да е баш тая дето ти се иска.
Във всеки един момент променяш само един изход, станалите чакат в състоянието, в което са оставени до като не им дойде реда.
При един таймер, трябва след поредното време, трябва да направиш промени и в трите ихода и след това да пуснеш следващото време.
Изиграй го на симулатора.

Автор:  CarBeta [ Вто Юли 03, 2012 12:17 pm ]
Заглавие:  Re: Правилен ли ми е кода

Картинката на изходите ще е баш тая, която иска! От какъв зор да ги променя заедно? Нали идеята е изходите да се променят, когато им дойде времето, не да се дублират.

Автор:  Пушека [ Вто Юли 03, 2012 1:00 pm ]
Заглавие:  Re: Правилен ли ми е кода

Всъщност си прав. Това е картинката. Признавам си без бой.
:oops:

Автор:  kostov [ Вто Юли 03, 2012 9:23 pm ]
Заглавие:  Re: Правилен ли ми е кода

Благодаря за мненията. Имам още един въпрос: времетраенето на голямата пауза всъщност трябва да е не 650 mS, а 640 mS. Какво трябва да се промени (добави) в кода за да стане това, в случай че не може да се постигне с донастройване на честотата на кварца?

Автор:  Пушека [ Сря Юли 04, 2012 7:59 am ]
Заглавие:  Re: Правилен ли ми е кода

Може да подкарваш таймера не от 0 а от 4 примерно.
Ако приемем че 255 такта = 65мс - 1 такт = 255мкс. Сиреч ти трябват 4 такта по-малко за 64мс. Задавай му начална стойност 4 при всяко ново броене. Горе доле ще е към 64мс х10=640мс

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/