Электроприводы, КИПиА, станции водоподготовки бассейнов, электроника

PNP-LinE

Объявление

Добрый день, Уважаемые поситители форума компании Пи Эн Пи - Лайн!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PNP-LinE » Контроллеры и Компьютеры. » Эксперементы Программирования На С


Эксперементы Программирования На С

Сообщений 21 страница 37 из 37

21

Так - разбираемся   ----->>>>

while(){}; условный цикл - используйте если вам
нужно выполнять какой то код программы пока выполняется (существует,
справедливо, не ноль) некоторое условие

char i; /* объявление переменной для for

это обычная переменная и значит может иметь любое  допустимое имя по вашему желанию */

22

РЕАЛИЗОВАЛ ПОПЕРЕМЕННОЕ МИГАНИЕ -
ДЕСЯТИЧНЫЕ ЧИСЛА 6 И 9
Бинарные соответственно 1001 и 0110  то что мне и нужно!

Так же числа 5 и 10             1010   и 0101   создают иллюзию "бегущих огней"

КОД

void main() {
  PORTA = 0;
  TRISA = 0;

while(1) {
    PORTA =  6;
    Delay_ms(50);
   
    PORTA =  9;
    Delay_ms(50);
  }
}

23

ВАУ!!!! нет - учу Си.....  та же самая прога на Ассме!!!! Сколько надо писать!!!!! :O

; ADDRESS OPCODE ASM
; ----------------------------------------------
$0000 $2804    GOTO _main
$0004 $ _main:
;tEST.c,1 ::     void main() {
;tEST.c,2 ::     PORTA = 0;
$0004 $1303    BCF STATUS, RP1
$0005 $1283    BCF STATUS, RP0
$0006 $0185    CLRF PORTA, 1
;tEST.c,3 ::     TRISA = 0;
$0007 $1683    BSF STATUS, RP0
$0008 $0185    CLRF TRISA, 1
;tEST.c,4 ::     while(1) {
$0009 $ L_main_0:
;tEST.c,5 ::     PORTA =  10;
$0009 $300A    MOVLW 10
$000A $1283    BCF STATUS, RP0
$000B $0085    MOVWF PORTA
;tEST.c,6 ::     Delay_ms(50);
$000C $30A2    MOVLW 162
$000D $00CB    MOVWF STACK_11
$000E $30FF    MOVLW 255
$000F $00CA    MOVWF STACK_10
$0010 $0BCB    DECFSZ STACK_11, F
$0011 $2813    GOTO $+2
$0012 $2816    GOTO $+4
$0013 $0BCA    DECFSZ STACK_10, F
$0014 $2813    GOTO $-1
$0015 $2810    GOTO $-5
$0016 $30E9    MOVLW 233
$0017 $00CA    MOVWF STACK_10
$0018 $0BCA    DECFSZ STACK_10, F
$0019 $2818    GOTO $-1
$001A $0000    NOP
$001B $0000    NOP
$001C $0000    NOP
;tEST.c,7 ::     PORTA =  5;
$001D $3005    MOVLW 5
$001E $0085    MOVWF PORTA
;tEST.c,8 ::     Delay_ms(50);
$001F $30A2    MOVLW 162
$0020 $00CB    MOVWF STACK_11
$0021 $30FF    MOVLW 255
$0022 $00CA    MOVWF STACK_10
$0023 $0BCB    DECFSZ STACK_11, F
$0024 $2826    GOTO $+2
$0025 $2829    GOTO $+4
$0026 $0BCA    DECFSZ STACK_10, F
$0027 $2826    GOTO $-1
$0028 $2823    GOTO $-5
$0029 $30E9    MOVLW 233
$002A $00CA    MOVWF STACK_10
$002B $0BCA    DECFSZ STACK_10, F
$002C $282B    GOTO $-1
$002D $0000    NOP
$002E $0000    NOP
$002F $0000    NOP
;tEST.c,9 ::     }
$0030 $2809    GOTO L_main_0
;tEST.c,10 ::     }
$0031 $2831    GOTO $

24

Как на RB0/int выставить другой уровень? Этой программой остальные RBx управляются.... а RB0 нет....

КОД

void main() {
PORTA = 0;
TRISA = 0;
PORTB = 1;
TRISB = 1;
while(1) {
PORTA =  10;
Delay_ms(50);
PORTA =  5;
Delay_ms(50);
  }
}

25

А почему TRISB = 1? ( RBO на вход.)

Кстати i++ и ++i не одно и тоже.

26

Deimos написал(а):

А почему TRISB = 1? ( RBO на вход.)

По неопытности думаю... :D

i++  ;   прибавить к i   1
a=++i ;  втречал пока только в таком выражении....   прибавить к i единицу и приравнять все это к а...

27

1. i=6;
   a=i++.  //a=6

2. i=6;
    a=++i;  //a=7(сначала прибавил потом приравнял)

28

Теперб что нибудь бы тоже простенькое но теперь и с входаи и с выходами... :(

29

В чем проблема.

Читаешь порт (temp = PORTB), используешь IF(if (temp == 0x01){} else{})) и все.

30

Попробую... :)

31

Посмотри пример Button_Test.
Но я считаю что лучше использовать прерывание.

32

Я теперь понял что такое программное прерывание, но непонял как они могут работать аппаратно?

33

Всякий раз когда происходит определенное событие(переполнение TMR0, изменение уровня на INT0, окончание записи в EEPROM)   взводится определнный флаг(бит). Если при этом разрешено прерывание(другой бит) происходит переход на вектор прерывания и затем обрабатывается программа прерывания.

Программу обработки прерывания ты пишешь сам, в ее конце нужно обязательно скинуть флаг прерывания.(Смотри пример с TMR0)

34

Скачал по рекомендации DEIMOS-а  "Язык программирования Си"  Б. Керниган, Д. Ритчи.
Сначала ужаснулся.... Посчитал, что я еще не готов, затем побежал беглым взглядом ниже и увидел знакомые команды....  Есть за что уцепиться и это радует! Буду познавать! Хоть в день и по чайной ложке, но тем не менее...  :)  :stroy:

35

А в чем разница между Си и Си++

36

Разница в основном изза инкремента "++" тем и отличается)) Тоесть в Си нету "++". Это грубо правда сказано, но так есть) А вообщем лучше всего писать проги в CodeVision для АВРок, самое простое и удобное.

37

уф... с во3вращением - перечитал снова уже все более понятно.. скоро начну снова приставать с рассспросами


Вы здесь » PNP-LinE » Контроллеры и Компьютеры. » Эксперементы Программирования На С