欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
iar for avr單片機編程 通過 仿真 SPI無數據傳輸 請求指導
[打印本頁]
作者:
by64214
時間:
2021-3-3 17:10
標題:
iar for avr單片機編程 通過 仿真 SPI無數據傳輸 請求指導
學習《AVR單片機與傳感器模塊設計》(IAR) 教材,ATMega16 的SPI 雙機通信 編程實踐
編程通過 但是仿真 無數據傳輸 請求指導
1.jpg
(121.06 KB, 下載次數: 104)
下載附件
2021-3-3 16:03 上傳
單片機源程序如下:
//主機端:
#include <ioavr.h>
#include "delay.h"
//#include <iom16.h>
//========================變量類型的宏定義=========================
#define uchar unsigned char
#define uint unsigned int
//=========================SPI宏定義==============================
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define CSN PORTB_Bit4
#define MOSI PORTB_Bit5
#define MISO PORTB_Bit6
#define SCK PORTB_Bit7
//=========================晶振宏定義===========================
#define xtal 8 //8MHz晶振
uchar vol; //存儲電壓的全局變量
//=========================端口初始化子程序=======================
void Port_Init(void)
{
DDRA = 0x00; PORTA = 0xFF; //PORTA初始化為懸浮輸入
DDRB = 0xFF; PORTB = 0xFF;
DDRC = 0xFF; PORTC = 0xFF;
DDRD = 0xFF; PORTD = 0xFF;
}
//=========================ADC初始化=============================
void Adc_Init(void)
{
ADCSRA = 0xEE; //使能ADC、開始轉換、自動觸發、使能中斷、64預分頻
ADMUX = 0x40; //使用AVCC做基準電壓源、數據格式為右對齊、選擇通道0
}
//============================A/D轉換============================
unsigned int ADC_Convert(void)
{
uint temp1,temp2;
temp1 = (unsigned int)ADCL; //先讀取低8位數據
temp2 = (unsigned int)ADCH; //再讀取高8位數據
temp2 = (temp2<<8)+temp1; //高8位左移兩位與低8位合并成10位數據
return(temp2); //返回合并后的值
}
//===========================數據轉換=============================
unsigned int Conv(unsigned int i)
{
long x;
uint y;
x = (4840*(long)i)/1023; //把變量轉化成需要顯示的形式
y = (unsigned int)x; //把無符號長整型變量強制轉換成無符號整型變量
return y; //返回轉換后的值
}
//=========================主機初始化子程序=======================
void SPI_MasterInit(void) //主機狀態下的SPI初始化
{
MOSI = 1; //設置MOSI為輸出
MISO = 0; //設置MISO為輸入
SCK = 1; //設置SCK為輸出
CSN = 1; //設置CSN為輸出
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //使能SPI主機模式,設置時鐘速率為fck/16
}
//==================主機發送一字節數據子程序=======================
void SPI_MasterTransmit(char cData) //主機狀態下的數據傳輸
{
SPDR = cData; //啟動數據傳輸
while(!(SPSR & (1<<SPIF))); //查詢等待傳輸結束
}
//=============================主函數============================
void main(void)
{
Port_Init(); //端口初始化
Adc_Init(); //A/D轉換初始化
SPI_MasterInit(); //初始化為主機
CSN=0; //選擇從機
SREG = 0x80; //打開全局中斷
while(1)
{
SPI_MasterTransmit(vol); //發送電壓數據
_delay_ms(10);
}
}
//====================中斷函數(A/D轉換結束中斷)====================
#pragma vector = ADC_vect
__interrupt void ADC_Server(void)
{
vol = Conv(ADC_Convert()); //獲取A/D轉換數據
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1