📄 fouraxis.c
字号:
//Target : M128, Crystal: 8.0000Mh
#include <iom128v.h>
#include <macros.h>
#include "fouraxis.h"
#include "motion.h"
#include "Lcd.h"
#include "eeprom.h"
#include "communication.h"
unsigned char rec_tab0[30];
unsigned char rec_tab1[20];
unsigned char save_buff[4]={0x0d,0x0d,0x0d,0x0d};
unsigned char read_buff[25],temp_buff[6];
unsigned char counter,pointer11,pointer12,pointer0,key_flag1,shift_flag,
key_interrupt_flag,f1_function,f2_function,f3_function,
screen_flag,input_dig_num,dummy,input_initial,
position_num,position_flag,repeat_flag,original_flag,slow_flag;
unsigned char xyz_axis_flag,teaching_flag;
unsigned short k;
//define mappings
void mapping_init(void)
{
asm(
".area memory(abs)\n"
".org 0x3000\n"
" _LCD:: .blkb 4\n"
".org 0x4000\n"
" _DSPCHIP:: .blkb 32\n"
".org 0x8000\n"
" _ESTORAGE:: .blkb 32767\n"
".text\n"
);
}
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0xFF; //output
PORTB = 0xFF;
DDRB = 0xFF; //output
PORTC = 0xFF;
DDRC = 0xFF; //output
PORTD = 0x00;
DDRD = 0x00; //input without pull up
PORTE = 0x0F;
DDRE = 0x0F; //the most four Significant bits without pull up
PORTF = 0xFF;
DDRF = 0x0F;
PORTG = 0x1F;
DDRG = 0x1F; //output
}
//TIMER0 initialization - prescale:1024
// WGM: Normal
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00;
TCNT0 = 0xFE; //set count
OCR0 = 0xFA;
}
void init_devices(void)
{
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
mapping_init();
port_init();
uart0_init();
uart1_init();
timer0_init();
MCUCR = 0xC0;
XMCRA = 0x0A; //external memory
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x01; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
}
//timer0 interrup programm
void timer0_ovf_isr(void)
{
TCNT0 = 0x00; //reload counter value
counter++;
if(counter==0xff)
{
counter=0;
LED_CLEAR(); //close led
TCCR0=0X00;
}
}
/*-------------------- delay subroutine ------------------*/
void Delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<300;j++) //300*8*0.125us=300us=0.3ms
{;}
}
//dspchip input and output example
void inputandoutput_example(void)
{
unsigned char temp;
temp=0x55;
while(DSPYIOPB ==0x55)
{
Delay(1000);
while((PIND&IFB)==0);
temp=~temp;
DSPXOTPB =temp;
}
}
void inputandoutput_example_new(void)
{
unsigned char temp;
temp=0x55;
while(DSPZIOPB ==0x55)
{
Delay(1000);
while((PIND&IFB)==0);
temp=~temp;
DSPXOTPB =temp;
}
}
void external_EEPROM_write(unsigned char block_number,unsigned short EEPROM_adrr,
unsigned char data[25])
{
unsigned char j;
unsigned short i;
if(block_number==0) //block 0
PE2_CLEAR();
else if(block_number==1) //block 1
PE2_SET();
for(i=0+EEPROM_adrr,j=3;i<20+EEPROM_adrr;i++,j++)
{
ESTORAGE[i]=data[j];
Delay(50);
if(data[j]=='\0')
break;
}
}
void external_EEPROM_read(unsigned char block_number,unsigned short EEPROM_adrr,
unsigned char data[25])
{
unsigned char j;
unsigned short i;
if(block_number==0) //block 0
PE2_CLEAR();
else if(block_number==1) //block 1
PE2_SET();
for(i=EEPROM_adrr,j=3;i<20+EEPROM_adrr;i++,j++)
{
if(i==EEPROM_adrr+18)
{
if((ESTORAGE[i]!=0x0D)||(ESTORAGE[i+1]!='\0'))
{
data[3]='0';
data[4]=0x0D;
data[5]='\0';
break;
}
}
data[j]=ESTORAGE[i];
if(ESTORAGE[i]=='\0')
{
if(ESTORAGE[i-1]==0x0D)
break;
else
{
data[3]='0';
data[4]=0x0D;
data[5]='\0';
break;
}
}
}
}
void screen11(unsigned char dischar)
{
if(input_initial==0)
{
transmit1_cmd("200X axis: \r");
input_initial=1;
}
dummy=8+input_dig_num;
if(dummy>=8&&dummy<20)
{
temp_buff[0]='2';
temp_buff[1]=dummy/10+0x30;
temp_buff[2]=dummy%10+0x30;
temp_buff[3]=dischar;
temp_buff[4]=0x0D;
temp_buff[5]='\0';
transmit1_cmd(temp_buff);
if(dummy==19)
transmit1_cmd("219on\r");
}
read_buff[input_dig_num+3]=dischar;
if(input_dig_num==11)
{
repeat_flag=1;
}
else if(input_dig_num!=11)
{
input_dig_num++;
}
}
void screen12(unsigned char dischar)
{
if(input_initial==0)
{
transmit1_cmd("300Y1 axis: \r");
input_initial=1;
}
dummy=8+input_dig_num;
if(dummy>=8&&dummy<20)
{
temp_buff[0]='3';
temp_buff[1]=dummy/10+0x30;
temp_buff[2]=dummy%10+0x30;
temp_buff[3]=dischar;
temp_buff[4]=0x0D;
temp_buff[5]='\0';
transmit1_cmd(temp_buff);
if(dummy==19)
transmit1_cmd("319on\r");
}
read_buff[input_dig_num+3]=dischar;
if(input_dig_num==11)
{
repeat_flag=1;
}
else if(input_dig_num!=11)
{
input_dig_num++;
}
}
void screen13(unsigned char dischar)
{
if(input_initial==0)
{
transmit1_cmd("400Y2 axis: \r");
input_initial=1;
}
dummy=8+input_dig_num;
if(dummy>=8&&dummy<20)
{
temp_buff[0]='4';
temp_buff[1]=dummy/10+0x30;
temp_buff[2]=dummy%10+0x30;
temp_buff[3]=dischar;
temp_buff[4]=0x0D;
temp_buff[5]='\0';
transmit1_cmd(temp_buff);
if(dummy==19)
transmit1_cmd("419on\r");
}
read_buff[input_dig_num+3]=dischar;
if(input_dig_num==11)
{
repeat_flag=1;
}
else if(input_dig_num!=11)
{
input_dig_num++;
}
}
void screen21(unsigned char dischar)
{
if(input_initial==0)
{
transmit1_cmd("300POSITION NO: \r");
input_initial=1;
}
dummy=12+input_dig_num;
if(dummy>=12&&dummy<14)
{
temp_buff[0]='3';
temp_buff[1]=dummy/10+0x30;
temp_buff[2]=dummy%10+0x30;
temp_buff[3]=dischar;
temp_buff[4]=0x0D;
temp_buff[5]='\0';
transmit1_cmd(temp_buff);
if(dummy==13)
transmit1_cmd("313on\r");
}
read_buff[input_dig_num+3]=dischar;
if(input_dig_num==1)
{
repeat_flag=1;
}
else if(input_dig_num!=1)
{
input_dig_num++;
}
}
void screen22(unsigned char dischar)
{
if(position_flag==1)
{
if(input_initial==0)
{
transmit1_cmd("400DATA: \r");
input_initial=1;
}
dummy=5+input_dig_num;
if(dummy>=5&&dummy<20)
{
temp_buff[0]='4';
temp_buff[1]=dummy/10+0x30;
temp_buff[2]=dummy%10+0x30;
temp_buff[3]=dischar;
temp_buff[4]=0x0D;
temp_buff[5]='\0';
transmit1_cmd(temp_buff);
if(dummy==19)
transmit1_cmd("419on\r");
}
read_buff[input_dig_num+3]=dischar;
if(input_dig_num==14)
{
repeat_flag=1;
}
else if(input_dig_num!=14)
{
input_dig_num++;
}
xyz_axis_flag=0;
}
}
void save_parameter_data(void)
{
unsigned char i;
if(input_initial==1)
{
if(screen_flag==0x11)
{
if((input_dig_num==11)&&(repeat_flag==1))
input_dig_num++;
read_buff[input_dig_num+3]=0x0D;
read_buff[input_dig_num+4]='\0';
external_EEPROM_write(0,max_speed_x,read_buff);
transmit1_cmd("208on\r");
}
else if(screen_flag==0x12)
{
if((input_dig_num==11)&&(repeat_flag==1))
input_dig_num++;
read_buff[input_dig_num+3]=0x0D;
read_buff[input_dig_num+4]='\0';
external_EEPROM_write(0,max_speed_y1,read_buff);
transmit1_cmd("308on\r");
}
else if(screen_flag==0x13)
{
if((input_dig_num==11)&&(repeat_flag==1))
input_dig_num++;
read_buff[input_dig_num+3]=0x0D;
read_buff[input_dig_num+4]='\0';
external_EEPROM_write(0,max_speed_y2,read_buff);
transmit1_cmd("408on\r");
}
else if((screen_flag==0x21)||(screen_flag==0x31)||(screen_flag==0x41))
{
if((input_dig_num==1)&&(repeat_flag==1))
input_dig_num++;
read_buff[input_dig_num+3]=0x0D;
read_buff[input_dig_num+4]='\0';
position_num=0;
for(i=3;read_buff[i]!=0x0D;i++)
{
position_num=position_num*10+(read_buff[i]-0x30);
}
transmit1_cmd("312on\r");
position_flag=1;
}
else if(screen_flag==0x22)
{
if(position_flag==1)
{
if(xyz_axis_flag==0)
{
if((input_dig_num==14)&&(repeat_flag==1))
input_dig_num++;
read_buff[input_dig_num+3]=0x0D;
read_buff[input_dig_num+4]='\0';
teaching_flag=0;
}
k=x_position_0+position_num*20;
external_EEPROM_write(0,k,read_buff);
transmit1_cmd("405on\r");
}
}
else if(screen_flag==0x32)
{
if(position_flag==1)
{
if(xyz_axis_flag==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -