📄 ytcpg01.c
字号:
//update on 2004-04-22 21:45
//chage Level check : DBNEW
// deal with rotory speed unsteable
//one charter a to send
#include <iom8515v.h>
#include <macros.h>
#include <eeprom.h>
//outport define
#define OUTau8ON PORTC|=0x01
#define OUTau8OFF PORTC&=~0x01
#define OUTau7ON PORTC|=0x02
#define OUTau7OFF PORTC&=~0x02
#define OUTau6ON PORTC|=0x04
#define OUTau6OFF PORTC&=~0x04
#define OUTau5ON PORTC|=0x08
#define OUTau5OFF PORTC&=~0x08
#define OUTau4ON PORTC|=0x10
#define OUTau4OFF PORTC&=~0x10
#define OUTau3ON PORTC|=0x20
#define OUTau3OFF PORTC&=~0x20
#define OUTau2ON PORTC|=0x40
#define OUTau2OFF PORTC&=~0x40
#define OUTau1ON PORTC|=0x80
#define OUTau1OFF PORTC&=~0x80
#define OUTau1Pulse PORTC^=0x80
#define CLROFF PORTB|=0x01
#define CLRON PORTB&=~0x01
#define BOARDID '1'
//全局变量
unsigned char OPDATA[12];
unsigned char TXbuf[18];
unsigned char RXbuf[18];
unsigned char tmpRx=0;
unsigned char RXCR=0;
unsigned char RXstartFlag=0;
union mdd {
unsigned int TXCRC;
unsigned char txCRC[2];
}CRCT;
void watchdog_init(void)
{
WDR();
WDTCR=0x0F ;
}
void Delay_1ms(void)
{
unsigned int i;
for (i = 1; i<1140; i++)
;
}
void delayXms(unsigned int n)
{
unsigned int i=0;
while(i<n)
{
Delay_1ms();
i++;
}
}
void port_init(void)
{
PORTA=0xF0; //PA set to 1
DDRA=0xF0; //PA0-PA3:ADC PA4-PA6:KL0-KL2(OUT)
//PA7:LCD-E (OUTPUT)
PORTB=0xFF; //PB set to 1
DDRB=0xFF; //PB0-PB2:QN0-QN2 PB3:TEMPC(OUT)
//PB4-PB7:KR0-KR3(IN)
PORTC=0x00; //PC set to 1
DDRC=0xFF; //PC0-PC7:DB0-DB7
PORTD=0x00; //PD set to 1
DDRD=0x02;
//OUTDEON;
SFIOR&=~(1<<PUD); //OPEN UP LINK
//delayXms(2000); //delay 1s
}
void SPI_MasterInit(void)
{
//SPCR=0xD1; //SPIE ,SPE ,Master enable ;1/16 Fcl
SPCR=0x51; // ,SPE ,Master enable ;1/16 Fcl
}
void SPI_Tran(void)
{
unsigned char i;
for(i=8;i>0;i--)
{
SPDR=OPDATA[i];
while(!(SPSR&0x80));
}
//delayXms(1);
}//unsigned
void uart_init(void)
{
UCSRB=0x00;
UBRR=0x33; //9600bps
//UCR=0xd8;
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
#pragma interrupt_handler uart0_tx_isr:12
void uart0_tx_isr(void)
{
;
}
#pragma interrupt_handler uart0_rx_isr:10
void uart0_rx_isr(void)
{
unsigned char i;
//SEI();
tmpRx=UDR;
////while(!(UCSRA & (1<<UDRE)))
//// ;
////UDR=tmpRx; //TX the data of rx
//OUTrunON;
if (tmpRx=='%')
{
//PORTC=0xff;
RXCR=0;
RXstartFlag=1;
}//if tmprx
if (RXCR>16)
{
RXCR=0;
//
}
RXbuf[RXCR]=tmpRx;
RXCR++;
//SEI();
if(RXstartFlag==1 && RXCR==15 && RXbuf[0]=='%')
{
RXstartFlag=0;
// OUTau1Pulse;
if(RXbuf[1]==BOARDID && RXbuf[14]=='$')
//if(RXbuf[1]==BOARDID)
{
//OUTau1Pulse;
CRCT.TXCRC=0;
for(i=0;i<12;i++)
{
CRCT.TXCRC=CRCT.TXCRC+RXbuf[i];
}//for(i=0;i<12;i++)
if(CRCT.txCRC[0]==RXbuf[12] && CRCT.txCRC[1]==RXbuf[13])
{
if(RXbuf[2]=='1')
{
for(i=3;i<12;i++)
{
OPDATA[i-3]=RXbuf[i];
}//for(i=2;i<10;i++)
PORTC=OPDATA[0];
SPI_Tran();
}//if(RXbuf[2]=='1')
//ANSWER
TXbufINIT();
for (i=0;i<15;i++)
{
while(!(UCSRA & (1<<UDRE)))
;
UDR=TXbuf[i]; //TX the data of rx
}//for (i=0;i<15;i++)
}//if(CRCT.txCRC[0]==RXbuf[12] && CRCT.txCRC[1]==RXbuf[13])
}//if(RXbuf[1]==BOARDID && RXbuf[12]=='$')
RXbuf[0]=0;
RXbuf[1]=0;
RXbuf[14]=0;
} //if(RXstartFlag==1 && RXCR==13 && RXbuf[0]=='%')
} //void
void TXbufINIT(void)
{
unsigned char i;
TXbuf[0]=37;
TXbuf[1]=49;
TXbuf[2]=49;
TXbuf[14]=36;
for(i=3;i<12;i++)
{
TXbuf[i]=OPDATA[i-3];
}//for(i=2;i<10;i++)
CRCT.TXCRC=0;
for(i=0;i<12;i++)
{
CRCT.TXCRC=CRCT.TXCRC+TXbuf[i];
}//f
TXbuf[12]=CRCT.txCRC[0];
TXbuf[13]=CRCT.txCRC[1];
}
void main()
{
unsigned char ia;
port_init();
SPI_MasterInit();
uart_init();
for(ia=0;ia<13;ia++)
{
OPDATA[ia]=0;
}
CLRON;
delayXms(100);
CLROFF;
PORTC=0xff;
delayXms(1000);
PORTC=0;
SPI_Tran();
delayXms(500);
SEI();
while(1)
{
;
;
;
}
//delayXms(1000);
//SPI_TranByte(1);
}//MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -