Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.11.2006, 11:26
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Начинаю отупевать...
Тестил прототип одного устройства.
Вкратце часы передающие время по rs232.
Решил повторить на ccs .
Код:
|
#include ‹12F629.h›
#fuses HS,NOMCLR,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bi ts=9)
#define INTS_PER_SECOND 250 // (20000000/(4*256*256))
BYTE seconds; // A running seconds counter
BYTE int_count; // Number of interrupts left before a second has elapsed
STRUCT {
int1 sec;
}flag;
#int_rtcc // This function is called every time
void clock_isr() { // the RTCC (timer0) overflows (255-›0).
// For this program this is apx 76 times
if(--int_count==0) { // per second.
++seconds;
flag.sec=1;
int_count=INTS_PER_SECOND;
}
}
void main() {
BYTE start;
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
do {
if(flag.sec)printf("%u
",seconds),flag.sec=0;
} while (TRUE);
} |
Собственно тупею здесь , если разделять операторы после IF точкой с запятой то операторы отделенные
от первого после условия выполняются как ELSE.
Если просто запятой то все ОК.
Вроде в "нормальном" С должна точка с запятой быть.
Чей это глюк? Мой или CCS ?
Код:
|
if(flag.sec)printf("%u
",seconds),flag.sec=0; |
|
|
|
|
04.11.2006, 12:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
я советую использовать { } всегда !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
04.11.2006, 13:07
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Ну а все таки если без скобок?
|
|
|
|
04.11.2006, 15:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
ну ИМХО очевидно ;
так как запятая вроде при объявлении нескольких переменных одного типа используется.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
04.11.2006, 15:52
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Благодарю....
|
|
|
|
04.11.2006, 21:37
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Код:
|
....................
.................... if(flag.sec)printf("%u
",seconds);flag.sec=0;
00D7: BTFSS 31.0
00D8: GOTO 0E4
00D9: MOVF 2F,W
00DA: MOVWF 33
00DB: MOVLW 1B
00DC: MOVWF 34
00DD: GOTO 07D
00DE: MOVLW 0A
00DF: MOVWF 35
00E0: CALL 058
00E1: MOVLW 0D
00E2: MOVWF 35
00E3: CALL 058
00E4: BCF 31.0
....................
....................
.................... } while (TRUE);
....................
.................... }
00E5: GOTO 0D7
00E6: SLEEP |
Код:
|
.................... do {
....................
.................... if(flag.sec)printf("%u
",seconds),flag.sec=0;
00D7: BTFSS 31.0
00D8: GOTO 0E5
00D9: MOVF 2F,W
00DA: MOVWF 33
00DB: MOVLW 1B
00DC: MOVWF 34
00DD: GOTO 07D
00DE: MOVLW 0A
00DF: MOVWF 35
00E0: CALL 058
00E1: MOVLW 0D
00E2: MOVWF 35
00E3: CALL 058
00E4: BCF 31.0
....................
....................
.................... } while (TRUE);
....................
.................... }
00E5: GOTO 0D7
00E6: SLEEP |
Да.... а я думал что операторы разделяються точкой с запятой.....
Походу это все же глюк
|
|
|
|
04.11.2006, 22:31
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Да ...чудеса ...
Это работает.
Код:
|
If(flag.sec)
{
printf("%u
",seconds);
flag.sec=0;
} |
|
|
|
|
04.11.2006, 23:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
так как рекомендовано на:
avr123.nm.ru/05.htm - "Си для МК"
ВСЕГДА работает !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
04.11.2006, 23:47
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Реклама ты наша ,ходячая....
|
|
|
|
07.11.2006, 20:00
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Помогите, почему то из флеш памяти не читает, как хотелось:
Flash memory after being erased: FF FF FF FF FF FF FF FF
Flash memory after being written: 01 02 03 04 05 06 07 08
на самом деле:
Flash memory after being erased: FF FF FF FF FF FF FF FF
Flash memory after being written: FF FF FF FF FF FF FF FF
в чем глюк? МОжет протеуса?
Код:
|
#include ‹18F452.h›
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP, NOPROTECT, CPB
#use delay(clock=10000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#define ROM_ADDR 0x4000
//====================================
void main(void)
{
int8 i;
int8 write_data[8] = {1,2,3,4,5,6,7,8};
int8 read_data[8] = {0,0,0,0,0,0,0,0};
printf("Flash write size = %u\n\r", getenv("FLASH_WRITE_SIZE"));
printf("\n\r");
// Erase flash memory.
erase_program_eeprom(ROM_ADDR);
// Read flash memory.
read_program_memory(ROM_ADDR, read_data, sizeof(read_data));
// Display it, to show it's erased.
printf("Flash memory after being erased: ");
for(i = 0; i ‹ sizeof(read_data); i++)
printf("%X ", read_data[i]);
printf("\n\r");
printf("\n\r");
// Now write 8 bytes.
write_program_memory(ROM_ADDR, write_data, sizeof(write_data));
// Read them back.
read_program_memory(ROM_ADDR, read_data, sizeof(read_data));
// Display data read from Flash memory.
printf("Flash memory after being written: ");
for(i = 0; i ‹ sizeof(read_data); i++)
printf("%X ", read_data[i]);
printf("\n\r");
printf("\n\r");
while(1);
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:35.
|
|