Пт июл 07, 2023 16:15:53
for (i = 0; i < 5; i++) {
master_arr[i] = SPDR;
SPDR = master_arr[i];
}
Пт июл 07, 2023 16:21:45
Пт июл 07, 2023 16:32:42
Пт июл 07, 2023 16:53:15
Пт июл 07, 2023 17:38:45
Сб июл 08, 2023 08:13:28
Пн июл 10, 2023 08:44:06
#include <mega8.h>
#include <math.h>
#include <io.h>
#include <delay.h>
#define F_CPU (8000000)
#define VFG_TIMER_MAX (65535)
#define VFG_DDR DDRD
#define VFG_PORT PORTD
unsigned char b1,b2,b3,b4;
volatile unsigned char i=0;
volatile unsigned long int fG;
volatile unsigned char nG;
unsigned int N[]={1,8,64,256,1024};
//BYTE STORAGE
volatile unsigned char master_arr [4];
//BYTE COUNTER
volatile int reqID;
volatile int flagRT=0;
void setup (void)
{
#asm("cli")
DDRB |= (1 << PORTB4); //configure MISO as output
SPCR |= (1 << SPE) | (0 << MSTR); //configure slave mod and interrupt
#asm("sei")
}
//***********************************************timer1************************************************
void main(void)
{
VFG_DDR = 0b00000111;
DDRC = 0b11111111;
setup();
#asm("sei")
for(;;) {
while(PINB.2==1) // висим пока 1, как 0 идем дальше
while(!(SPSR & (1<<SPIF)));// висим пока 0, как 1 идем дальше
b1 = SPDR;
while(!(SPSR & (1<<SPIF)));
b2 = SPDR;
while(!(SPSR & (1<<SPIF)));
b3 = SPDR;
while(!(SPSR & (1<<SPIF)));
b4 = SPDR;
//nG = master_arr[0] & 0x03; //generator number
fG = 0 |b2 | (b3<<8)| (b4<<16);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)(fG&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>8)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>16)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>24)&0xFF);
}
}
#include <mega128.h>
#include <io.h>
#include <delay.h>
volatile unsigned char reqTr,reqTm;
struct Tmr_t {
unsigned char n;
double F;
};
struct Tmr_t T;
unsigned char chrT;
typedef union //объединение
{
unsigned long int w ; // w as WORD
unsigned int h[2]; // h as HALF-WORD
unsigned char b[4]; // b as BYTE
} Union32;
Union32 dFi;
void SPI_MasterTransmit(unsigned char cData);
void IOInit(void) {
PORTA = 0b00000000;
DDRA = 0b11111111;
PORTB = 0b00001001;
DDRB = 0b11110111;
PORTC = 0b00010000;
DDRC = 0b11111111;
PORTD = 0b01101100;
DDRD = 0b10111011;
PORTE = 0b00000011;
DDRE = 0b11111110;
PORTF = 0b00000000;
DDRF = 0b11111110;
PORTG = 0b00000000;
DDRG = 0b11111111;
reqTr=0;
reqTm=0;
}
void SPI_MasterInit(void) {
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); /* Enable SPI, Master, set clock rate fck/16 */
}
void SPI_MasterTransmit(unsigned char cData) {
SPDR = cData; /* Start transmission */
while(!(SPSR & (1<<SPIF))); /* Wait for transmission complete */
}
void SPITransmitFreq(unsigned char Cnt, double F) { //F- значение частоты
//dFi.w = F*167.77216; //частота передаваемая через SPI, какое-то фиксированное число 167.77216
PORTB &= ~(1<<PORTB0);
SPI_MasterTransmit(dFi.b[2]);
SPI_MasterTransmit(0xff); //пустышка
SPI_MasterTransmit(0xff); // младший байт
SPI_MasterTransmit(0xff); // 2
SPI_MasterTransmit(0xff); // 3
SPI_MasterTransmit(0xff); // старший
PORTB |= (1<<PORTB0);
PORTB |= (1<<PORTB0);
}
void main(void)
{
chrT=0x01;
T.n=0;
T.F=0;
SPI_MasterInit();
IOInit();
while (1)
{
unsigned char nG=2;
double fG=100;
SPITransmitFreq(T.n, T.F);//T.F-значение частоты, T.n-номер генератора
switch(nG) {
case 0: {T.n=0; T.F=fG; reqTm=1;}; break;
case 1: {T.n=1; T.F=fG; reqTm=1;}; break;
case 2: {T.n=2; T.F=fG; reqTm=1;}; break;
}
}
}
Пн июл 10, 2023 18:44:27
Пн июл 10, 2023 19:19:12
#include <mega128.h>
#include <io.h>
#include <delay.h>
volatile unsigned char reqTr,reqTm;
struct Tmr_t {
unsigned char n;
double F;
};
struct Tmr_t T;
unsigned char chrT;
typedef union //объединение
{
unsigned long int w ; // w as WORD
unsigned int h[2]; // h as HALF-WORD
unsigned char b[4]; // b as BYTE
} Union32;
Union32 dFi;
void SPI_MasterTransmit(unsigned char cData);
void IOInit(void) {
PORTA = 0b00000000;
DDRA = 0b11111111;
PORTB = 0b00001001;
DDRB = 0b11110111;
PORTC = 0b00010000;
DDRC = 0b11111111;
PORTD = 0b01101100;
DDRD = 0b10111011;
PORTE = 0b00000011;
DDRE = 0b11111110;
PORTF = 0b00000000;
DDRF = 0b11111110;
PORTG = 0b00000000;
DDRG = 0b11111111;
reqTr=0;
reqTm=0;
}
void SPI_MasterInit(void) {
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); /* Enable SPI, Master, set clock rate fck/16 */
}
void SPI_MasterTransmit(unsigned char cData) {
SPDR = cData; /* Start transmission */
while(!(SPSR & (1<<SPIF))); /* Wait for transmission complete */
}
void SPITransmitFreq(unsigned char Cnt, double F) { //F- значение частоты
dFi.w = F*1 ;
PORTB &= ~(1<<PORTB0);
SPI_MasterTransmit(Cnt & 0x03);
SPI_MasterTransmit(dFi.b[0]);
SPI_MasterTransmit(dFi.b[1]);
SPI_MasterTransmit(dFi.b[2]);
SPI_MasterTransmit(0xff); //пустышка
SPI_MasterTransmit(0xff); // младший байт из fG
SPI_MasterTransmit(0xff); // 2-й из fG
SPI_MasterTransmit(0xff); // 3-й из fG
SPI_MasterTransmit(0xff); // старший из fG
PORTB |= (1<<PORTB0);
}
void main(void)
{
chrT=0x01;
T.n=0;
T.F=0;
SPI_MasterInit();
IOInit();
while (1)
{
unsigned char nG=2;
double fG=100;
SPITransmitFreq(T.n, T.F);//T.F-значение частоты, T.n-номер генератора
switch(nG) {
case 0: {T.n=0; T.F=fG; reqTm=1;}; break;
case 1: {T.n=1; T.F=fG; reqTm=1;}; break;
case 2: {T.n=2; T.F=fG; reqTm=1;}; break;
}
}
}
#include <mega8.h>
#include <math.h>
#include <io.h>
#include <delay.h>
#define F_CPU (8000000)
#define VFG_TIMER_MAX (65535)
#define VFG_DDR DDRD
#define VFG_PORT PORTD
volatile unsigned char i=0;
volatile unsigned long int fG;
volatile unsigned char nG;
unsigned int N[]={1,8,64,256,1024};
//BYTE STORAGE
volatile unsigned char master_arr [4];
//BYTE COUNTER
volatile int reqID;
volatile int flagRT=0;
void setup (void)
{
#asm("cli")
DDRB |= (1 << PORTB4); //configure MISO as output
SPCR |= (1 << SPE) | (0 << MSTR); //configure slave mod and interrupt
#asm("sei")
}
//***********************************************timer1************************************************
void main(void)
{
unsigned char b1,b2,b3,b4;
VFG_DDR = 0b00000111;
DDRC = 0b11111111;
setup();
#asm("sei")
for(;;) {
while(PINB.2==1); // висим пока 1, как 0 идем дальше
while(!(SPSR & (1<<SPIF)));// висим пока 0, как 1 идем дальше
b1 = SPDR;
while(!(SPSR & (1<<SPIF)));
b2 = SPDR;
while(!(SPSR & (1<<SPIF)));
b3 = SPDR;
while(!(SPSR & (1<<SPIF)));
b4 = SPDR;
//nG = master_arr[0] & 0x03; //generator number
fG = 0 |b2 | (b3<<8)| (b4<<16);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)(fG&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>8)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>16)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>24)&0xFF);
}
}
Пн июл 10, 2023 19:43:30
Пн июл 10, 2023 19:47:51
Пн июл 10, 2023 19:54:10
Пн июл 10, 2023 19:57:02
Пн июл 10, 2023 19:59:53
Пн июл 10, 2023 20:00:29
Пн июл 10, 2023 20:12:03
Пн июл 10, 2023 20:13:48
Пн июл 10, 2023 20:58:11
Вт июл 11, 2023 08:28:39
#include <mega8.h>
#include <math.h>
#include <io.h>
#include <delay.h>
#define F_CPU (8000000)
#define VFG_TIMER_MAX (65535)
#define VFG_DDR DDRD
#define VFG_PORT PORTD
volatile unsigned char b1,b2,b3,b4;
volatile unsigned char i=0;
volatile unsigned long int fG;
volatile unsigned char nG;
unsigned int N[]={1,8,64,256,1024};
//BYTE STORAGE
volatile unsigned char master_arr [4];
//BYTE COUNTER
volatile int reqID;
volatile int flagRT=0;
void setup (void)
{
#asm("cli")
DDRB |= (1 << PORTB4); //configure MISO as output
SPCR |= (1 << SPE) | (0 << MSTR); //configure slave mod and interrupt
#asm("sei")
}
//***********************************************timer1************************************************
void main(void)
{
VFG_DDR = 0b00000111;
DDRC = 0b11111111;
setup();
#asm("sei")
for(;;) {
while(PINB.2==1 && PINB.1==1) // висим пока 1, как 0 идем дальше
while(!(SPSR & (1<<SPIF)));// висим пока 0, как 1 идем дальше
if (SPDR == 0xff) {flagRT++;};
if (flagRT == 1) {b1 = SPDR; flagRT++;};
while(!(SPSR & (1<<SPIF)));
if (flagRT == 2) {b2 = SPDR; flagRT++;};
while(!(SPSR & (1<<SPIF)));
if (flagRT == 3) {b3 = SPDR; flagRT++;};
while(!(SPSR & (1<<SPIF)));
if (flagRT == 4) {b4 = SPDR; flagRT++;};
while(!(SPSR & (1<<SPIF)));// висим пока 0, как 1 идем дальше
if (SPDR == 0xff) {flagRT = 0;};
//nG = master_arr[0] & 0x03; //generator number
fG = 0 |b2 | (b3<<8)| (b4<<16);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)(fG&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>8)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>16)&0xFF);
while(!(SPSR & (1<<SPIF)));
SPDR = (char)((fG>>24)&0xFF);
}
}
#include <mega128.h>
#include <io.h>
#include <delay.h>
volatile unsigned char reqTr,reqTm;
struct Tmr_t {
unsigned char n;
double F;
};
struct Tmr_t T;
unsigned char chrT;
typedef union //объединение
{
unsigned long int w ; // w as WORD
unsigned int h[2]; // h as HALF-WORD
unsigned char b[4]; // b as BYTE
} Union32;
Union32 dFi;
void SPI_MasterTransmit(unsigned char cData);
void IOInit(void) {
PORTA = 0b00000000;
DDRA = 0b11111111;
PORTB = 0b00001001;
DDRB = 0b11110111;
PORTC = 0b00010000;
DDRC = 0b11111111;
PORTD = 0b01101100;
DDRD = 0b10111011;
PORTE = 0b00000011;
DDRE = 0b11111110;
PORTF = 0b00000000;
DDRF = 0b11111110;
PORTG = 0b00000000;
DDRG = 0b11111111;
reqTr=0;
reqTm=0;
}
void SPI_MasterInit(void) {
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); /* Enable SPI, Master, set clock rate fck/16 */
}
void SPI_MasterTransmit(unsigned char cData) {
SPDR = cData; /* Start transmission */
while(!(SPSR & (1<<SPIF))); /* Wait for transmission complete */
}
void SPITransmitFreq(unsigned char Cnt, double F) { //F- значение частоты
//dFi.w = F*167.77216; //частота передаваемая через SPI, какое-то фиксированное число 167.77216
PORTB &= ~(1<<PORTB0);
SPI_MasterTransmit(0xff); //пустышка
SPI_MasterTransmit(1); //пустышка
SPI_MasterTransmit(2); // младший байт
SPI_MasterTransmit(3); // 2
SPI_MasterTransmit(4); // 3
SPI_MasterTransmit(0xff); //пустышка
PORTB |= (1<<PORTB0);
}
void main(void)
{
chrT=0x01;
T.n=0;
T.F=0;
SPI_MasterInit();
IOInit();
while (1)
{
unsigned char nG=2;
double fG=100;
SPITransmitFreq(T.n, T.F);//T.F-значение частоты, T.n-номер генератора
switch(nG) {
case 0: {T.n=0; T.F=fG; reqTm=1;}; break;
case 1: {T.n=1; T.F=fG; reqTm=1;}; break;
case 2: {T.n=2; T.F=fG; reqTm=1;}; break;
}
}
}
Вт июл 11, 2023 09:28:48