SPI Protocol Problem in AT89C51ED2
扫描二维码
随时随地手机看文章
working on a SPI based ADC MCP3202, using Atmel 89C51ED2 micro controller
#include
#include
#include
#include"display.h"
sbit CS = P1^0;
unsigned int call_adc(unsigned char Channel);
unsigned int call_adc(unsigned char Ch)
{
unsigned int Data1,Data2;
unsigned char Channel;
CS=0; /* Chip Select for ADC Active State */
if(Ch==0) /* Channel Select */
Channel=0x0D; /* Channel -1 */
else
Channel=0x0F; /* Channel -2 */
SPDAT=Channel; /* Channel i/p for SPI */
while(!(SPSTA&0x80));
Data1=SPDAT; /* Higher 8bit of ADC value */
SPSTA|=0x7F; /* Clear Trasmit Flag */
Data1=Data1<<8;
SPDAT=0x00;
while(!(SPSTA&0x80));
SPSTA|=0x7F; /* Clear Trasmit Flag */
Data2=SPDAT; /* Lower 8bit of ADC value */
Data1|=Data2; /* 12 Bit ADC Value */
CS=1; /* Chip Select for ADC off State*/
return (Data1>>4); /* 12 Bit ADC Data */
}
void main()
{
unsigned int Adc_Data=0;
static unsigned char Buffer[10];
SPCON |= 0x10; /* Master mode */
SPCON |= 0x82; /* Fclk Periph/128 */
SPCON &= ~0x08; /* CPOL=0; transmit mode example */
SPCON |= 0x04; /* CPHA=1; transmit mode example */
SPCON |= 0x40; /* run spi */
SPSTA |= 0x7F; /* Clear Trasmit Flag */
Initlcd();
while(1)
{
Adc_Data=call_adc(0);
sprintf(Buffer,"%d",(unsigned int)Adc_Data);
display(Buffer,0x80);
}
}