當前位置:首頁 » 編程語言 » c語言wdr函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言wdr函數

發布時間: 2023-06-06 05:08:51

❶ 單片機C語言編程關於sbit定義老是會出錯,求解。

keil c51 sbit為什麼放到主函數外面
(http://..com/link?url=-)
sbit聲明的部分是編譯器預處理的部分,就是為了給寄存器(位或位元組)取個別名,是在函數沒有編譯之前必須完成的,放在主函數中就是編譯中要處理的內容了,對於那些符號地址,C編譯器不認識,有的名字也不允許(如P1.1),必須在編譯之前進行替代,就是sbit聲明,替代的內容為相應單片機寄存器的頭文件里邊定義的,如REG51.H

❷ 請求單片機delay延時函數

如果在程序中x=10(你寫程序時肯定會給他賦一個值,在這里假定是10),即在程序的某處會有delay(10)這樣的語句。相當於循環了600*x=600*10=6000次。可以根據自己的需要來定。你說得對,可以寫一個就行。但是有些晶元,你在控制他時,時序要求非常嚴格,如果延時太長或延時太短,都不會運行出結果。如果需要小延時的地方(只需幾個us),只寫一個就可以。如果需要延時幾ms,只寫一個,可能達不到延時要求。總而言之,要根據你的程序需要,時間長了,學的多了,也就懂了。希望我的回答,能給你提供點幫助

❸ 誰能給我一個avr單片機SPI通信的實例,簡單的能體現出基本原理就可以,最好有比較詳細註解,C語言的.

主機:
//SPI雙機通信 主機//發送0x09,接收方PD0~3,對應點小燈
//包含所需頭文件
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
// SS PB4
// MOSI PB5
// MISO PB6
// SCK PB7
/*------宏定義------*/
#define uchar unsigned char
#define uint unsigned int
#define BIT(x) (1<<(x))
#define NOP() asm("nop")
#define WDR() asm("wdr")

/*------函數定義------*/
void spi_write(uchar sData);
uchar spi_read(void);

//埠初始化
void port_init(void)
{
DDRD = 0XFF;
PORTB=PORTB|0b11110000; //SCK MISO MOSI SS 使能上拉
DDRB=DDRB&0b10111111; //MISO 置為輸入
DDRB=DDRB|0b10110001; //SCK MOSI SS 置為輸出

}

void spi_init(void) //spi初始化
{
DDRB|=(~(1<<PB5))|(1<<PB7)|(1<<PB4)|(~(1<<PB4));
SPCR = 0xF1;
SPSR = 0x01;
}

SIGNAL(SIG_SPI) //一個位元組發送或接收完成中斷
{
PORTD=SPDR;
}

void spi_write(uchar sData)//功能:使用SPI發送一個位元組
{
SPDR = sData;
while(!(SPSR & BIT(SPIF)));
//sData=SPDR;//讀從機發回來的數據
}

uchar spi_read(void)//功能:使用SPI接收一個位元組
{
SPDR = 0x00;
while(!(SPSR & BIT(SPIF)));
return SPDR;
}

void init_devices(void)
{
cli(); //禁止所有中斷
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
port_init();
spi_init();
sei();//開全局中斷
}
//主函數
int main(void)
{
init_devices();
spi_write(0X09);
while(1)
{
NOP();
}
return 0;
}

從機:
//SPI雙機通信 從機
//發送0x06,PA0~3接收
//包含所需頭文件
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

/*------宏定義------*/
#define uchar unsigned char
#define uint unsigned int
#define BIT(x) (1<<(x))
#define NOP() asm("nop")
#define WDR() asm("wdr")

/*------函數定義------*/
void spi_write(uchar sData);
uchar spi_read(void);

//埠初始化
void port_init(void)
{
DDRA = 0XFF;
PORTB=PORTB|0b11110000; //SCK MISO MOSI SS 使能上拉
DDRB=DDRB&0b01001111; // SCK MOSI SS 置為輸入
DDRB=DDRB|0b01000001; // MISO 置為輸出
}

void spi_init(void) //spi初始化
{
DDRB|=(1<<PB5)|(~(1<<PB7))|(~(1<<PB4))|(~(1<<PB4));
SPCR = 0xE1;
SPSR = 0x00;
}

SIGNAL(SIG_SPI) //一個位元組發送或接收完成中斷
{
DDRA=0XFF;
PORTA=spi_read();
}

//功能:使用SPI發送一個位元組
void spi_write(uchar sData)
{
SPDR = sData;
while(!(SPSR & BIT(SPIF)));
//sData=SPDR;//讀從機發回來的數據
}

//功能:使用SPI接收一個位元組
uchar spi_read(void)
{
SPDR = 0x00;
while(!(SPSR & BIT(SPIF)));
return SPDR;
}

void init_devices(void)
{
cli(); //禁止所有中斷
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
port_init();
spi_init();
sei();//開全局中斷
}
//主函數
int main(void)
{
init_devices();
spi_write(0X06);

while(1)
{
NOP();
}
return 0;
}