Все перепроверил кучу раз.
Компилятор sdcc:
Код: Выделить всё
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.4.0 #8981 (Jan 10 2015) (Linux)
published under GNU General Public License (GPL)
Код: Выделить всё
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.4.0 #8981 (Jan 10 2015) (Linux)
published under GNU General Public License (GPL)
Код: Выделить всё
void TIM1_init(void) // Настройка таймера 1
{
//PWM output signal frequency = TIM1 counter clock/(TIM1_ARR + 1)
//Channel x duty cycle = [TIM1_CCRxx/(TIM1_ARR + 1)] * 100
TIM1->PSCRH = 0x00;
TIM1->PSCRL = 0x00;
TIM1->ARRH = 0x0F;
TIM1->ARRL = 0x9F;
TIM1->CCMR1 |= (uint8_t)0x60; //110: PWM mode 1 - In up-counting, channel 1 is active as long as TIM1_CNT < TIM1_CCR1,
TIM1->CCER1 |= TIM1_CCER1_CC1E; //CH1 compare Enable
TIM1->CCR1H = 0x07;
TIM1->CCR1L = 0xD0;
TIM1->CR1 |= TIM1_CR1_CEN;
TIM1->BKR |= TIM1_BKR_MOE; // OC and OCN outputs are enabled if their respective enable bits are set (CC/E in Tim1_CCERi)
}Код: Выделить всё
#include "stm8s.h"
void TIM1_Init(void)
{
GPIOC->DDR |= GPIO_PIN_4;
GPIOC->CR1 |= GPIO_PIN_4;
GPIOC->CR2 |= GPIO_PIN_4;
CLK->PCKENR1 |= CLK_PCKENR1_TIM1; //16MHz
TIM1->CR1 &= ~TIM1_CR1_CEN; //OFF
TIM1->CR1 |= TIM1_CR1_ARPE;
TIM1->PSCRH = 0x00;
TIM1->PSCRL = 0x08; // 16MHz/8 = 2MHz
TIM1->ARRH = 0x4e; //2MHz/20000 = 100Hz частота шима
TIM1->ARRL = 0x20;
//D = 100% = 20000
//D = 50% = 10000
TIM1->CCMR4 |= 0x68; //PWM MODE, Output compare 4 preload enable
TIM1->CCER2 &= ~TIM1_CCER2_CC4P; //PC4
TIM1->CCER2 |= TIM1_CCER2_CC4E;
TIM1->BKR |= TIM1_BKR_MOE;
TIM1->CCR4H = 0x00; //D=0%
TIM1->CCR4L = 0x00;
TIM1->IER &= ~TIM1_IER_UIE;
TIM1->CR1 |= TIM1_CR1_CEN; //ON;
TIM1->CCR4H = 0x3a; //15000, D = 75%
TIM1->CCR4L = 0x98;
}
int main( void )
{
CLK->CKDIVR = 0;
TIM1_Init();
while (1);
}Код: Выделить всё
Clear_Fl_Ext_D EXTI_CR1_PDIS=0;EXTI_CR1_PDIS=0x3;Добавлено after 1 minute 59 seconds:11.9.4 Port x control register 1 (Px_CR1)
Address offset: 0x03
Reset value: 0x00 except for PD_CR1 which reset value is 0x02.
Код: Выделить всё
void copy_array(uint8_t * buf)
{ uint8_t test,i;
for(i=0;i<8;i++)
{
test= *buf++;
}
}
uint8_t my_array[20]={1,45,68,34,78,23,98,56,3,0,165};
copy_array(my_array);Код: Выделить всё
void copy_array(uint8_t * buf)
{ uint8_t test,i;
for(i=0;i<8;i++)
{
test= buf[i];
}
}
Код: Выделить всё
copy_array(&my_array[0]);Код: Выделить всё
spiwritereg(0x01, 0x02);
void spiwritereg (uint8_t adress,uint8_t data)
{адреса
spisendbuf(&adress,1);
spisendbuf(&data,1);
}
void spisendbuf(uint8_t *massiv,uint8_t byte)
{
uint8_t i;
uint8_t test;
for(i=0;i<byte;i++)
{
test=*massiv[i];/* здесь в отладчике вижу что в указателе *massiv[0] лежит адрес переменной adress например, а по адресу adress лежит нужное значение 0x01
а в переменную test копируется старший байт адреса указателя *massiv(смотрю в отладчике STVD), как сделать так, чтобы в переменную test копировалась переменная adress? */
test=massiv[i];// так компилятор ругается
}
}
Код: Выделить всё
void copy_array(uint8_t * buf)
{ uint8_t test,i;
for(i=0;i<8;i++)
{
test= *buf++;
}
}
void copy_array2(uint8_t * buf)
{ uint8_t test,i;
for(i=0;i<8;i++)
{
test= buf[i];
}Код: Выделить всё
uint8_t my_array[20]={1,45,68,34,78,23,98,56,3,0,165};
copy_array(my_array);
copy_array2(my_array);Интересно, а как такая конструкция должна работать?Klepko писал(а):test=*massiv;
Код: Выделить всё
volatile uint8_t Test [3]= {1,2,3};
volatile uint8_t Test_var;
//volatile uint8_t *Test_var;
...
...
Test_var= *Test[0];
Это уже происходит при передаче аргумента в функцию.если вам нужно получить указатель на массив, но объявите test как указатель: uint8_t * test;
после чего присваивайте: test=massive;
Чем сие не угодило?доступ к элементам массива через: *(test+i), где i- номер элемента массива.
Код: Выделить всё
void clear_array(uint8_t my_arr[]) {
//
for (int i = 0; i < 10; i++) {
my_arr[i] = 0;
}
}
// причем, можно и по-другому
void clear_array(uint8_t *my_arr) {
//
for (int i = 0; i < 10; i++) {
my_arr[i] = 0;
}
}
вот моя программаJackSmith писал(а):Чем сие не угодило?
test= *buf+i
Код: Выделить всё
NRF24_WriteReg(CONFIG, 0x0a);
void NRF24_WriteReg(uint8_t addr, uint8_t dt)
{
addr |= W_REGISTER;//включим бит записи в адрес
CS_ON;
HAL_SPI_Transmit(&addr,1);//отправим адрес в шину
HAL_SPI_Transmit(&dt,1);//отправим данные в шину
CS_OFF;
}
void HAL_SPI_Transmit(uint8_t * pData1, uint8_t Size)
{
uint8_t i;
uint8_t test;
test = pData1[i];//test=0x03
test = *pData1;//test=0x03
for(i = 0; i < Size; i++)
{
while (SPI_GetFlagStatus(SPI_FLAG_TXE)== RESET);
SPI_SendData(* pData1);
//buf = pData1[0];
pData1++;
while (SPI_GetFlagStatus(SPI_FLAG_BSY)== SET);
while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);
//buf=SPI_ReceiveData();
}
}