Вопросы и ответы по написанию программ
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
Помогите написать программу в CVAVR на mega128. Программа должна принимать 32 импульса с периодом 20 мкс, и присваивать соответствующим переменным значения этих импульсов (0 или 1). пробовал через массивы не получается. за ранее СПАСИБО
- Реклама
для мега128 программ никогда не писал, тем более для такой задачи ресурсов мега128 будет недостаточно. Минимум нужно Четырехядерный Пеньтиум, а про тактовую частоту и говорить боюсь.
Код: Выделить всё
unsigned char i, x[32];
for (i=0; i<32; i++) {
x[i]=PINB.0;
delay_us(20);
}
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
спасибо. может я не совсем правиьлно выразился (я только начинаю с МК). но задача моя состоит в следующем:
на вход МК поступают синхроимпульсы, 32 импульса по 1-му проводу (СИ) (всегда 1 с периодом 20 мкс, 32 шт.), по 2-му просто импульсы (ИМП) (тоже только 1,), но межимпульснй интервал разный. длительность импульсов 10 мкс, импульсы синхронны(рис.ris1 ниже)
мне надо пропустить дальше в схему 15 - 28 импульсы если:
1)1,8 импульсы = 1;
2)2-7 импульсы =0;
3)30, 31 импульсы =0;
4)количество единиц поступающих по 2-му проводу не четное;
5)количество СИ должно быть строго 32 шт.
Почти месяц мучаюсь.
Была идея сделать массив, каждой переменой массива присваивать значение соответствующего импульса, а исходя из полностью заполненного массива выполнять условия 1,2,3,4,5!
на вход МК поступают синхроимпульсы, 32 импульса по 1-му проводу (СИ) (всегда 1 с периодом 20 мкс, 32 шт.), по 2-му просто импульсы (ИМП) (тоже только 1,), но межимпульснй интервал разный. длительность импульсов 10 мкс, импульсы синхронны(рис.ris1 ниже)
мне надо пропустить дальше в схему 15 - 28 импульсы если:
1)1,8 импульсы = 1;
2)2-7 импульсы =0;
3)30, 31 импульсы =0;
4)количество единиц поступающих по 2-му проводу не четное;
5)количество СИ должно быть строго 32 шт.
Почти месяц мучаюсь.
Была идея сделать массив, каждой переменой массива присваивать значение соответствующего импульса, а исходя из полностью заполненного массива выполнять условия 1,2,3,4,5!
- Вложения
-
- ris1.jpg
- (19.97 КБ) 395 скачиваний
- Сообщения: 3459
- Зарегистрирован: Ср сен 27, 2006 16:18:57
- Реклама
во первых синхроимпульсы заведи на внешнее прерывание (по переднему фронту).
При возникновении прерывания читай данные из пина с информационными импульсами и загоняй их в массив.
При возникновении прерывания читай данные из пина с информационными импульсами и загоняй их в массив.
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
А может автор покажет свой листинг и текст ошибки? Ну чтоб мы не подумали что автор хочет чтоб мы всё за него(автора) сделали. Это так-мысли вслух.
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
Вот текст:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 27.11.2009
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega128
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128>
#include <stdio>
// Declare your global variables here
unsigned char a2[4][8], b=PINB.4, c=PINB.3
bit a=TOV1; //4р порта B принимает СИ, 3р порта В принимает только положительные импульсы
void initialization(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;
// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;
// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;
ETIMSK=0x20;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
}
void main (void)
{
{
if (a==1)
{a[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][0]=!(b-c);}
_delay_us(19);
if (TOV1==1)
{a[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][7]=!(b-c);}
_delay_us(19);
}
}
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 27.11.2009
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega128
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128>
#include <stdio>
// Declare your global variables here
unsigned char a2[4][8], b=PINB.4, c=PINB.3
bit a=TOV1; //4р порта B принимает СИ, 3р порта В принимает только положительные импульсы
void initialization(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;
// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;
// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;
ETIMSK=0x20;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
}
void main (void)
{
{
if (a==1)
{a[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][0]=!(b-c);}
_delay_us(19);
if (TOV1==1)
{a[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][7]=!(b-c);}
_delay_us(19);
}
}
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
или еще тоже немножко по другому:
#include <mega128>
#include <stdio>
#include <math>
flash bit b, c, a, x[4][8];
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}
void main (void)
{
b=PINB.4;
c=PINB.3
a=TOV1;
if (a==1)
{x[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][7]=!(b-c);}
_delay_us(89);
}
#include <mega128>
#include <stdio>
#include <math>
flash bit b, c, a, x[4][8];
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}
void main (void)
{
b=PINB.4;
c=PINB.3
a=TOV1;
if (a==1)
{x[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][7]=!(b-c);}
_delay_us(89);
}
Код: Выделить всё
flash bit b, c, a, x[4][8];главная функция main выполняется один раз, вот по этому в ней и организовывают "вечный" цикл
Код: Выделить всё
while (1) {}Код: Выделить всё
void init (void) {
...
}Код: Выделить всё
void main (void)
{
b=PINB.4;
c=PINB.3
a=TOV1;
if (a==1)
{x[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][1]=!(b-c);}
_delay_us(19);
Код: Выделить всё
b=PINB.4;
c=PINB.3
Код: Выделить всё
#define b PINB.4
#define c PINB.3
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
- Сообщения: 25
- Зарегистрирован: Сб окт 31, 2009 12:34:44
Зачем массивы то? 32 бита прекрасно помещаются в unsigned long. Или в uint32_t по стандарту С99. Я уже с трудом вспоминаю разрядности стандартных типов так привык к новому стандарту языка.САША1987 писал(а):Только мега 128 потому-что это только % эдак 10. Спасибо! так и делал, но проблема с записью в массив, мне кажется там ошибка ( пишет ошибку),но, не могу найти!
можешь начало проги написать, для CVAVR.
Так что в тексте uint32_t - unsigned long, uint8_t unsigned char
И биты я нумерую с 0 по 31-ый
Итак прием:
Код: Выделить всё
#define DATA_PIN PINB
#define DATA_INPUT PB3
// дефайны от фонаря :)
volatile uint16_t RxData; // сюда положим принятые данные. Если старший бит=1, то данные помещены в буфер
ISR(vector по фронту на тактовом входе) // это синтаксис GCC, замените на CV самостоятельно
{
static unsigned long RxBuf = 0; // приемный буфер
uint8_t tmp;
RxData <<= 1;
if(DATA_PIN & (1<<DATA_INPUT>> 24); // старший байт
if(tmp & 0x3E) return; // проверяем биты 1-6 на 0, если не 0 в буфере туфта
if((tmp & 0x81) != 0x81) return; // проверка 0 и 7-го бита, если не 1 - в буфере туфта
tmp =(uint8_t)( RxBuf); // получим младший байт
if(tmp & 0x03) return; // проверяем 30 и 31 бит, если не 0 в буфере туфта
// если дошли до сюда - в буфере валидный пакет
RxData = ((RxBuf >> 4) & 0x3FFF) | 0x8000; // поместим биты 14-27 в RxData, сбросив незначащие и установив старший бит
RxBuf = 0; // необязательно, тут явно протокол с самосинхронизацией
}
int16_t main(void)
{
// настройки всякие переферии
// необходимо настроить любое прерывание по фронту тактового сигнала
sei();
while(1)
{
if(RxData |= 0)
{
// собственно тут чего то делаем не забыв сбросить старший бит в RxData
// по окончании обработки RxData = 0;
// в идеале это лучше сделать сразу, предварительно скопировав RxData в какую нибудь
// локальную переменную запретив прерывания на время копирования
}
}
}
Блин, чего то криво отображается код.
Вложу как txt
- Вложения
-
- otvet.txt
- Неиспорченный форумом ответ
- (2.34 КБ) 198 скачиваний
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
пробовал еще так все равно ошибки!
#include <mega128>
#define f PINB.5
#use_delay
// Declare your global variables here
unsigned char c, b, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32;
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}
void main(void)
{
while (1)
{
b=PINB.4, c=PINB.3;
if (f==1)
{x1=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x2=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x3=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x4=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x5=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x6=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x7=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x8=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x9=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x10=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x11=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x12=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x13=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x14=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x15=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x16=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x17=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x18=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x19=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x20=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x21=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x22=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x23=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x24=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x25=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x26=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x27=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x28=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x29=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x30=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x31=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x32=~(b-c);}
delay_us(89);
}
}
#include <mega128>
#define f PINB.5
#use_delay
// Declare your global variables here
unsigned char c, b, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32;
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}
void main(void)
{
while (1)
{
b=PINB.4, c=PINB.3;
if (f==1)
{x1=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x2=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x3=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x4=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x5=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x6=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x7=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x8=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x9=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x10=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x11=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x12=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x13=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x14=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x15=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x16=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x17=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x18=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x19=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x20=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x21=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x22=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x23=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x24=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x25=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x26=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x27=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x28=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x29=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x30=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x31=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x32=~(b-c);}
delay_us(89);
}
}
- Сообщения: 3459
- Зарегистрирован: Ср сен 27, 2006 16:18:57
- Сообщения: 21
- Зарегистрирован: Пт ноя 27, 2009 12:09:06
- Сообщения: 25
- Зарегистрирован: Сб окт 31, 2009 12:34:44
А в каком виде Вы предлагаете??? Начните не с кода, а с алгоритма. Рспишите НА БУМАГЕ что, куда, зачем и как. Переложить готовый алгоритм на С займет не более 5 минут.САША1987 писал(а):Может кто-то объяснит мне, как написать программу в том виде как я предлагаю? Я просто по другому не понимаю, пока-что. Спасибо за ранее, а закончить надо уже в середине следующей недели.
Кстати - что это за протокол? Кто этот сигнал производит? Эти посылки идут без пауз?
(C) Мыши плакали, кололись, но продолжали есть кактус...
В том виде, как Вы написали, программа неработоспособная полностью.
Смотрите, импульсы могут придти в любой момент, а не тогда, когда Вы запустили программу на исполнение. Второе - задержки по 19 микросекунд - Вы считаете, что выполнение кода анализа вообще не занимает время ? Теперь, если Вы даже правильно поймали первые пару импульсов, ошибка отсчета времени будет накапливаться.
Синхронизироваться нужно по каждому импульсу, поэтому. как правильно заметил Qwertty тактовые подаем на вход внешнего прерывания, который перед этим сконфигурим по rising - по нарастающему фронту.
Без вариантов.
В том виде, как Вы написали, программа неработоспособная полностью.
Смотрите, импульсы могут придти в любой момент, а не тогда, когда Вы запустили программу на исполнение. Второе - задержки по 19 микросекунд - Вы считаете, что выполнение кода анализа вообще не занимает время ? Теперь, если Вы даже правильно поймали первые пару импульсов, ошибка отсчета времени будет накапливаться.
Синхронизироваться нужно по каждому импульсу, поэтому. как правильно заметил Qwertty тактовые подаем на вход внешнего прерывания, который перед этим сконфигурим по rising - по нарастающему фронту.
Без вариантов.


