А если серьезно - ну учится человек, чем дальше тем лучше будет. Может быть не было времени заниматься "причесыванием" кода. Если захочет представить свой код на суд нам - то так и напишет
only pure true norwegian blackx 
only pure true norwegian blackx 
Всегда было интересно, почему препроцессор сам этого не делаетvitalik_1984 писал(а): Так же чтобы не было ошибок необходимо делать блокировку повторного подключения модулей, как было в статье по ссылке.
only pure true norwegian blackx 
Код: Выделить всё
#include <mega16.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
PORTA=0x00;
DDRA=0x01;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
while (1)
{
{
//volatile unsigned char del;
volatile char del;
if (PINB.0 == 1) {
del = (1);
};
if (PINB.1 == 1) {
del = (50);
};
if (PINB.2 == 1) {
del = (2);
};
if (PINB.3 == 1) {
del = (15);
};
if (PINB.4 == 1) {
del = (20);
};
if (PINB.5 == 1) {
del = (25);
};
if (PINB.6 == 1) {
del = (30);
};
if (PINB.7 == 1) {
del = (35);
};
PORTA.0 = 1;
delay_ms(del);
PORTA.0 = 0;
};
}}не могу разобраться с тем как правильно объявить переименую и с тем как её вызватьАlex писал(а):А вопрос то какой ?
http://yandex.ru/yandsearch?clid=9582&t ... D0%B5&lr=2как правильно объявить переименую
Как это ? Куда вызвать, на дом ?как её вызвать
конечно спасибо но поиском я пользоваться умею тем более яндексом.Аlex писал(а):http://yandex.ru/yandsearch?clid=9582&t ... D0%B5&lr=2как правильно объявить переименую
Как это ? Куда вызвать, на дом ?как её вызвать
Заметно...но поиском я пользоваться умею
Зачем тут по 100 раз переписывать то, что уже неоднократно написано другими и выложено в интернет ?но вот как объявить переименую и потом взять то значение которое в ней находиться (лежит)
Ну ну... Дерзайте...по лучше того что нашли вы
вот так бы сразу! ото у вас то опыта огромный мешок сразу бы отсыпали да и всёАlex писал(а):http://www.misigames.h15.ru/yroki/C/kernigan.pdf
Курите...
Дак его, опыта этого, пол-интернета. Вы же поиском умеете пользоваться, что сами не нашли эту книгу ?ото у вас то опыта огромный мешок сразу бы отсыпали да и всё
Код: Выделить всё
#ifndef SPIROUTINE_H_
#define SPIROUTINE_H_
#include "stm32l1xx.h"
#include "stdio.h"
void spi_init(void); //инициализация SPI
static void xmit_spi(uint8_t xmit_data); //отправка числа
static char rcvr_spi(void); //прием числа
static void send_cmd(char cmd,char arg); //посылка пакета
#endifКод: Выделить всё
#include "stm32l1xx.h"
#include "stdio.h"
#include "spiRoutine.h"
void spi_init(void)
{
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B
//Линини SPI1 (Master)
//PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1)
GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function
GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull
GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5
GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5
/*Настройка SPI1 (Master)
8 бит данных, MSB передается первым, программный режим управления NSS, вывод NSS (PA4) разрешено использовать в качестве выхода*/
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1
SPI1->CR1 &= ~SPI_CR1_CPOL; //Полярность тактового сигнала
SPI1->CR1 &= ~SPI_CR1_CPHA; //Фаза тактового сигнала
SPI1->CR1 &= ~SPI_CR1_DFF; //8 бит данных
SPI1->CR1 &= ~SPI_CR1_LSBFIRST; //MSB передается первым
SPI1->CR2 = 0; //Вывод NSS - выход управления slave select
SPI1->CR1 |= SPI_CR1_MSTR; //Режим Master
SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256
SPI1->CR1 |= SPI_CR1_SSM; //Программный режим NSS
SPI1->CR1 |= SPI_CR1_SSI; //Аналогично состоянию, когда на входе NSS высокий уровень
SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI1
}
static void xmit_spi(uint8_t xmit_data)
{
SPI1->DR = xmit_data; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными
//отправка числа
while (!(SPI1->SR & SPI_SR_TXE)); //убедиться, что предыдущая передача завершена
}
static char rcvr_spi(void) //прием числа
{
uint8_t res;
SPI1->DR = 0xff; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными
while (!(SPI1->SR & SPI_SR_TXE)); //убедиться, что предыдущая передача завершена
//прием числа
while(!(SPI1->SR & SPI_SR_RXNE)); //Ожидаем окончания приема данных модулем SPI1 (RXNE =1 - приемный буфер содержит данные)
res= SPI1->DR;
return res;
}
static void send_cmd(char cmd,char arg) /* Send command packet */
{
xmit_spi(cmd); /* Start + Command index */
xmit_spi((char)(arg >> 24)); /* Argument[31..24] */
xmit_spi((char)(arg >> 16)); /* Argument[23..16] */
xmit_spi((char)(arg >> 8)); /* Argument[15..8] */
xmit_spi((char)arg); /* Argument[7..0] */
xmit_spi(0x95);
}Код: Выделить всё
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
#define CMD0 (0x40+0) /* GO_IDLE_STATE */
#define CMD1 (0x40+1) /* SEND_OP_COND (MMC) */
#define ACMD41 (0xC0+41) /* SEND_OP_COND (SDC) */
#define CMD8 (0x40+8) /* SEND_IF_COND */
#define CMD9 (0x40+9) /* SEND_CSD */
#define CMD10 (0x40+10) /* SEND_CID */
#define CMD12 (0x40+12) /* STOP_TRANSMISSION */
#define ACMD13 (0xC0+13) /* SD_STATUS (SDC) */
#define CMD16 (0x40+16) /* SET_BLOCKLEN */
#define CMD17 (0x40+17) /* READ_SINGLE_BLOCK */
#define CMD18 (0x40+18) /* READ_MULTIPLE_BLOCK */
#define CMD23 (0x40+23) /* SET_BLOCK_COUNT (MMC) */
#define ACMD23 (0xC0+23) /* SET_WR_BLK_ERASE_COUNT (SDC) */
#define CMD24 (0x40+24) /* WRITE_BLOCK */
#define CMD25 (0x40+25) /* WRITE_MULTIPLE_BLOCK */
#define CMD55 (0x40+55) /* APP_CMD */
#define CMD58 (0x40+58) /* READ_OCR */
#endifКод: Выделить всё
#include "stm32l1xx.h"
#include "stdio.h"
#include "spiRoutine.h"
#include "constants.h"
uint8_t temp,res,i;
int main()
{
spi_init();
//LED
GPIOB->MODER |= GPIO_MODER_MODER6_0 | GPIO_MODER_MODER7_0; //PB6, PB7 - GP Output
GPIOB->OTYPER &= ~(GPIO_OTYPER_OT_6 | GPIO_OTYPER_OT_7); //PB6, PB7 - Push-Pull
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7; //40 MHz
GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7); //No pull
for (int n = 7; n; n--) xmit_spi(0xff); /* 80 dummy clocks */
for (int n = 7; n; n--) xmit_spi(0xff); /* 80 dummy clocks */
send_cmd(CMD0,0);
while(!(res==1))
{
SPI1->DR = 0xff;
res=rcvr_spi();
if (i>10)
{
send_cmd(CMD0,0);
i=0;
}
i++;
putchar(res);
}
send_cmd(CMD1,0);
while(!(res==0))
{
SPI1->DR = 0xff;
res=rcvr_spi();
if (i>20)
{
send_cmd(CMD1,0);
i=0;
}
i++;
putchar(res);
}
xmit_spi(CMD18);
xmit_spi(0);
xmit_spi(0);
xmit_spi(0);
xmit_spi(0);
xmit_spi(0xff);
while(1)
{
res=rcvr_spi();
if(res!=0Xff)
{
if(res!=0X0) {putchar(res);}
}
}
}
а теперь пролистали обсуждение сначала - у чела возникла проблема раскидать файл по кускам, что я и сделал, тупо скопировал код совсем в нем не ковыряясь, а про статик ему уже 3 страницы рассказываютСовесть писал(а):Таких советчиков надо брать за шкирку и топить в ближайшем водоеме.