单片机控制机械手
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "head.h"
#include
#include
/****************************************************************************** ******
Filename : Robot system
Processor : MC9S08DZ60CLH
FileFormat: V1.0
DataSheet : MC9S08DZ60.pdf
Compiler : CodeWarrior compiler
Date/Time : 20.8.2009
Author : XiongXinpeng
Pcbversion: qyss900-02-00pcb-v02
(c) Copyright 2009-2012
File-Format-Revisions:
- 09.09.2009,V1.0
******************************************************************************* ******/
/***************************************************
X_axis
****************************************************/
/***************************************************
Input: none
Output: none
parameter: none
Function: initMCU
***************************************************/
void initMCU(void) //单片机mcu设置
{
MCGC1=0x88; //多功能时钟发生器设置
MCGC2=0x76;
MCGC3=0x00;
while(!(MCGSC&0x02)) //当多功能时钟发生器处于fll或pll 模式且bdc调试器时钟不活动完成多功能时钟发生器设置
;
SOPT1=0x00; //通信接口设置TxD在PTF0,RxD在PTF1,SCL
在PTF2,SDA在PTF3;COP时钟源是1khz
SOPT2=0x00;
IRQSC=0x13; // irq中段设置
PTDDD=0xBF; //I/O口D口方向设置PTD6输入,其余输出
PTDD=0xBF;
PTDSC=0x03; //禁止d 口中段
PTDPE=0x40;
PTDPS=0x40;
PTDES=0x00;
//RTCSC=0x1D;
}
/***************************************************
Input: none
Output: none
parameter:none
Function: main function
***************************************************/
void main(void)
{
byte i=1;
register word j=0,k=0;
DisableInterrupts; //关中断
initMCU(); //单片机mcu初始化
//Initsci1();
Initsci2(); //sci初始化
InitCanBus(); //Can初始化
EnableInterrupts; //开中断
delay(1);
Motor0CpDir=1; //**改动修改//置PTG2,PTG3输入
Motor0PowDir=1;
Motor0Cp=1;
Motor0Pow=1;
Rest_Flag=1; //置复位标志Rest_Flag为1
delay(5);
for(;;)
{
if(Rest_Flag==1) //复位
{
delay(20);
Motor0Cp=1;
PWM_Immutably_CH0();
Rest_Flag=0; //清零接收主机发送的复位信号标志
Can_ReFlage[1]=0;
i=1;
Point_count=1;
Relay_RunFlag=0; //标志位清0
Can_ReFlage[5]=0;
Can_ReFlage[7]=0;
Can_buffer_Flag[0]=0;
Can_buffer_Flag[1]=0;
}
asm nop;
if(Irq_Intrput_Flag==1) ////irq中段程序x
{
Irq_Intrput_Flag=0; //清零中段标志位
Motor0Cp=1;
PWM_2kHz_CH0(224); //回原点
Motor0Cp=0;
PWM_2kHz_CH0(224);
Can_ReFlage[1]=0;
i=1;
Point_count=1;
Relay_RunFlag=0; //标志位清0
Can_ReFlage[5]=0;
Can_ReFlage[7]=0;
Can_buffer_Flag[0]=0;
Can_buffer_Flag[1]=0;
IRQSC=0x13; //irq重新打开
}
//如果传感器动作
if(Can_ReFlage[4]==1)
{
i=1;
Can_ReFlage[4]=0; // 传感器动作标志清零
CAN_Send_data_0(); // 从机发送完成复位/动作信号
delay(10);