📄 m8mpt._c
字号:
//////////主机
#include <iom8v.h>
#include <macros.h>
//ISARM pro
#define OUTLED1OFF PORTB|=0x01 //for
#define OUTLED1ON PORTB&=~0x01
#define OUTLED2OFF PORTB|=0x02 //For
#define OUTLED2ON PORTB&=~0x02
#define OUTLED2Pulse PORTB^=0x02
#define OUTLED3OFF PORTB|=0x04 //For
#define OUTLED3ON PORTB&=~0x04
#define OUTLED3Pulse PORTB^=0x04
#define OUTLED4OFF PORTB|=0x08 //For
#define OUTLED4ON PORTB&=~0x08
#define OUTLED4Pulse PORTB^=0x08
#define OUTDEON PORTD|=0x10
#define OUTDEOFF PORTD&=~0x10
#define KB0 (PINC&0x01)
#define KB1 (PINC&0x02)
///UART///
#define TXENABLE UCSRB&=~(1<<RXEN);UCSRB|=(1<<TXEN);
#define RXENABLE UCSRB&=~(1<<TXEN);UCSRB|=(1<<RXEN);
#define TXADDRESS UCSRB|=(1<<TXB8);TXADFG=0;
#define TXDATA UCSRB&=~(1<<TXB8);TXADFG=1;
//
#define TRFG0 0xFE
#define TRFG1 0xFD
#define TRFG2 0xF1
#define TRFG3 0xF0
//最大子板数
#define SlaveBMAX 15
//////////////////////////////
//////////////////////////////
unsigned char TXADFG=0;
unsigned char SlaveEN[17];
unsigned char SlaveCR=0; //子板编号计数器,当作物理地址
unsigned char TXINTMAX=1;//下行发送中断次数控制值
//unsigned char TXINTCR=0;//下行发送中断次数计数器
unsigned char TXINTFG=0;//下行发送中断次数完成标志
unsigned char RXINTMAX=16;//下行发送中断次数控制值
unsigned char RXINTCR=0;//下行发送中断次数计数器
unsigned char RXINTFG=0;//下行发送中断次数完成标志
unsigned char TXBUF[30]; //发送缓冲区
unsigned char RXBUF[30]; //接收缓冲区
unsigned char TXbufP=0; //发送缓冲区下标
unsigned char RXbufP=0; //接收缓冲区下标
unsigned char RXbufPmax=11;//接收数据实际长度
unsigned char RXERROR=0;
/////Soft Timer
unsigned char WaitCR0=0;
unsigned char WaitCR1=0;
void SoftTimer(void)
{
WaitCR0++;
if(WaitCR0>254)
{
WaitCR0=0;
WaitCR1++;
}//if(WaitCR0>0)
}
void SoftTimerStart(void)
{
WaitCR0=0;
WaitCR1=0;
}
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)
{
PORTB=0xFF; //PB set to 1
DDRB=0xFF;
PORTC=0xFF; //PC set to 1
DDRC=0x00; //
PORTD=0xFF; //PD set to 1
DDRD=0x12; //PD0:RXD PD1:TXD PD2:DI0 PD3:DI1
//PD4:DI2 PD5:DI3
//OUTDEON;
SFIOR&=~(1<<PUD); //OPEN UP LINK
//MCUCR|=(1<<ISC11); //Down edge int1
//GICR=(1<<INT1); //enable INT1
delayXms(10); //delay 1s
}
//////////////////////////UART INIT
void uart_init(void)
{
OUTDEOFF;
UCSRB=0x00;
UBRRL=0x25; //19.2kbps
//TX EN ,9Bit ,Adress init
UCSRB=((1<<RXCIE)|(1<<TXCIE)|(1<<UCSZ2));
//UCSRB=((1<<TXCIE)|(1<<TXCIE)|(1<<TXEN)|(1<<TXB8));
}//void uart_init(void)
///////////////Timer init
void timer_init(void)
{
;
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
;
}//void timer1_ovf_isr(void)
//TR to SLAVE
#pragma interrupt_handler uart1_tx_isr:14
void uart1_tx_isr(void)
{
TXbufP++;
if(TXbufP<14)
{
if(TXbufP==2 )
{
OUTLED3Pulse;
// Delay_1ms();
//delayXms(1000);
TXDATA;
//OUTLED3Pulse;
//
}//if(TXbufP>1)
UDR=TXBUF[TXbufP];
}
else
{
OUTLED1ON;
RXENABLE
}//else
OUTLED2Pulse;
//Delay_1ms();
//OUTLED2Pulse;
}//void uart1_tx_isr(void)
#pragma interrupt_handler uart1_rx_isr:12
void uart1_rx_isr(void)
{
RXBUF[RXbufP]=UDR;
RXbufP++;
if(RXBUF[11]==TRFG3)
OUTLED4ON;
}//void uart1_rx_isr(void)
void TXbufRDY(void)
{
TXBUF[0]=5;
TXBUF[1]=5;
TXBUF[2]=TRFG0;
TXBUF[3]=TRFG1;
TXBUF[4]=0;
TXBUF[5]=1;
TXBUF[12]=TRFG2;
TXBUF[13]=TRFG3;
}//void TXbufRDY(void)
unsigned char SLSTEP=10;
void main()
{
unsigned char i=0;
//delayXms(500);
port_init(); //IO初始化
uart_init();
//timer_init();
delayXms(100);
RXbufP=0;
TXbufRDY()
SEI();
TXbufP=0;
TXADDRESS;
TXENABLE;
UDR=TXBUF[0];
while(1)
{
}//while1
}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -