📄 uart1.c
字号:
#include<iom64v.h>
#include<macros.h>
#define fosc 16000000 //晶振4MHZ
#define baud 38400 //波特率
#define xtal 4
#define DIN 0x80;
#define SCLK 0x40;
//#define CS 0x04;
unsigned char com;
unsigned long ad;
unsigned char vol[3];
unsigned long spi_read ( void )
{
unsigned long addata = 0 ;
unsigned char k ;
//PORTA &=~CS;
PORTA |=SCLK;
for (k=0;k<24;k++)
{
_NOP();_NOP();_NOP();
PORTA &=~SCLK;
addata*=2;
if(PIND &0x02) addata++;
PORTA |=SCLK;
}
//CS=1;
//PORTA |=CS;
return(addata);
/*******************************************************************************************/
}
void spi_write( unsigned char sw )
{
unsigned char j;
// CS=0;
//PORTA &=~CS;
PORTA |=SCLK;
for (j=0;j<8;j++)
{
_NOP();_NOP();_NOP();
PORTA &=~SCLK;
// DIN = (bit)(sw&0x80);
if(sw & 0x80)
{
PORTA |= DIN ;
}
else
{
PORTA &= ~DIN ;
}
sw=sw<<1;
PORTA |=SCLK;
// _NOP();_NOP();_NOP();
}
PORTA |= DIN ;
// PORTA |=CS;
}
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(xtal*143-2);i++)
;
}
void delay_ms(unsigned int n)
{
unsigned int i=0;
while(i<n)
{
delay_1ms();
i++;
}
}
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
UBRR0L=(fosc/16/(baud+1))%256;
UBRR0H=(fosc/16/(baud+1))/256;
UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
}
void putchar0(unsigned char c)
{
while (!(UCSR0A&(1<<UDRE0)));
UDR0=c;
}
void INT1_init(void)
{
EIFR=0xff;
EIMSK |=0x02;
// EICRA |=0x08;
DDRD &=~0x02;
}
#pragma interrupt_handler INT1_isr:3
void INT1_isr(void)
{ //CLI();
ad=0;
spi_write(0x38) ;
//_NOP();//_NOP();//_NOP();_NOP();
ad = spi_read();
// putchar0(0xff);
//delay_ms(10);
//_NOP();
//ad=ad>>16;
//putchar0(((unsigned char)ad));
com=1;
//_NOP();//_NOP();//_NOP();
//_NOP();_NOP();_NOP();
// _NOP();_NOP();_NOP();
//SEI();
//while((PIND &0x02)==0);
}
/***********************************AD7791*************************************************/
/*******************************************************************************************/
//function Inituart();
/*******************************************************************************************/
void delay ( unsigned int i )
{
while ( --i ) ;
}
void main(void)
{
CLI();
DDRA |=0xff;
INT1_init();
uart0_init(); // initialize 232 uart
SEI();
//spi_write( 0x3C ) ;
//spi_write( 0x10 ) ;
//spi_write( 0x82 ) ;
while(1)
{
if(com)
{
CLI();
com=0;
vol[1]=((unsigned char)ad);
vol[2]=((unsigned char)(ad>>8));
vol[3]=((unsigned char)(ad>>16));
putchar0(0xff);
putchar0(vol[1]);
putchar0(vol[2]);
putchar0(vol[3]);
SEI();
}
//CS = 0 ;
//spi_write( 0x3c ) ;
//delay ( 50000 ) ;
//putchar0('v');
delay_ms(1);
//if(DOUT_RDY)
// ad = spi_read();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -