Отговори на тема  [ 7 мнения ] 
Правилен ли ми е кода 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юни 03, 2012 10:28 pm
Мнения: 99
Мнение Правилен ли ми е кода
Правилен ли е този код:
Код:
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 преправен от мен.


Пон Юли 02, 2012 8:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Правилен ли ми е кода
Ще се получи това, което искаш, ако оправиш две грешки:
- вместо PWRTE_ON сложи _PWRTE_ON
- имаш етикети с еднакви имена again и loop, може вторите да са again1 и loop1


Пон Юли 02, 2012 10:28 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Апр 16, 2012 9:05 pm
Мнения: 182
Мнение Re: Правилен ли ми е кода
Може би картинката на изходите няма да е баш тая дето ти се иска.
Във всеки един момент променяш само един изход, станалите чакат в състоянието, в което са оставени до като не им дойде реда.
При един таймер, трябва след поредното време, трябва да направиш промени и в трите ихода и след това да пуснеш следващото време.
Изиграй го на симулатора.


Вто Юли 03, 2012 7:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Правилен ли ми е кода
Картинката на изходите ще е баш тая, която иска! От какъв зор да ги променя заедно? Нали идеята е изходите да се променят, когато им дойде времето, не да се дублират.


Вто Юли 03, 2012 12:17 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Апр 16, 2012 9:05 pm
Мнения: 182
Мнение Re: Правилен ли ми е кода
Всъщност си прав. Това е картинката. Признавам си без бой.
:oops:


Вто Юли 03, 2012 1:00 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юни 03, 2012 10:28 pm
Мнения: 99
Мнение Re: Правилен ли ми е кода
Благодаря за мненията. Имам още един въпрос: времетраенето на голямата пауза всъщност трябва да е не 650 mS, а 640 mS. Какво трябва да се промени (добави) в кода за да стане това, в случай че не може да се постигне с донастройване на честотата на кварца?


Вто Юли 03, 2012 9:23 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Апр 16, 2012 9:05 pm
Мнения: 182
Мнение Re: Правилен ли ми е кода
Може да подкарваш таймера не от 0 а от 4 примерно.
Ако приемем че 255 такта = 65мс - 1 такт = 255мкс. Сиреч ти трябват 4 такта по-малко за 64мс. Задавай му начална стойност 4 при всяко ново броене. Горе доле ще е към 64мс х10=640мс


Сря Юли 04, 2012 7:59 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни