c51实验指导书.docx

上传人:b****3 文档编号:5077936 上传时间:2023-05-08 格式:DOCX 页数:45 大小:1.32MB
下载 相关 举报
c51实验指导书.docx_第1页
第1页 / 共45页
c51实验指导书.docx_第2页
第2页 / 共45页
c51实验指导书.docx_第3页
第3页 / 共45页
c51实验指导书.docx_第4页
第4页 / 共45页
c51实验指导书.docx_第5页
第5页 / 共45页
c51实验指导书.docx_第6页
第6页 / 共45页
c51实验指导书.docx_第7页
第7页 / 共45页
c51实验指导书.docx_第8页
第8页 / 共45页
c51实验指导书.docx_第9页
第9页 / 共45页
c51实验指导书.docx_第10页
第10页 / 共45页
c51实验指导书.docx_第11页
第11页 / 共45页
c51实验指导书.docx_第12页
第12页 / 共45页
c51实验指导书.docx_第13页
第13页 / 共45页
c51实验指导书.docx_第14页
第14页 / 共45页
c51实验指导书.docx_第15页
第15页 / 共45页
c51实验指导书.docx_第16页
第16页 / 共45页
c51实验指导书.docx_第17页
第17页 / 共45页
c51实验指导书.docx_第18页
第18页 / 共45页
c51实验指导书.docx_第19页
第19页 / 共45页
c51实验指导书.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c51实验指导书.docx

《c51实验指导书.docx》由会员分享,可在线阅读,更多相关《c51实验指导书.docx(45页珍藏版)》请在冰点文库上搜索。

c51实验指导书.docx

c51实验指导书

第十章

8.1C51MultiFLEX控制卡介绍

C51MultiFLEX控制卡的IO口,AD口,舵机控制,电机控制的数量与MultiFLEX控制卡相同,各种元器件的布局也基本一致,区别就在于MultiFLEX控制卡使用的是ATMEGA128芯片,C51MultiFLEX控制卡使用的是AT89C51ED2芯片,该控制卡使用KEIL编译环境,程序下载方法也与MultiFLEX控制卡有区别,下面的章节再作具体的介绍。

8.2实验相关软件的介绍及使用

本节开始我们将介绍怎样对C51MultiFLEX控制卡进行C程序编写,从而实现对机器人的代码级的控制。

内容涉及到51单片机和单片机C语言的知识,读者需要学习过51单片机和C语言,在做具体的应用和开发时还需要查看提供的AT89C51ED2的芯片资料。

8.2.1控制核心及C程序编译环境简介

C51MultiFLEX控制卡的控制器的核心是ATMEL公司的AT89C51ED2单片机。

该芯片是具有ISP(In-SystemProgrammable)功能的8051,它可以利用电脑上的RS-232Port再配合ATMEL提供的免费烧录软件Flip(FlexibleIn-SystemProgrammable),就可以将编译好的代码烧录到8051的内部ROM中。

从上图中可以看到,ATMEL的AT89C51ED2(包装为PDIL40)与传统的8051是完全兼容的,脚位图特完全相容,也就是说如果没有用到一些特殊功能的话,可以把AT89C51ED2当做一般的8051来使用,满足了大部分高校教学的需求。

如果说要使用芯片中的特殊功能,可以上ATMEL的官方网站()去下载详细的参考资料。

AT89C51ED2内部有64KBytesROM,可重复烧录10万次,1792BytesSRAM,2048BytesEEPROM,也可重复烧录10万次,工作频率可达到60MHZ,一点都不用担心利用C语言来开发带来的问题。

还有板上的芯片比传统的8051多了两组IO口(P4P5),可以解决在一些特殊应用上IO口不足的问题。

8.2.2Keil软件介绍

KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。

C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。

C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:

编译器,汇编器,实时操作系统,项目管理器,调试器。

uVision2IDE可为它们提供单一而灵活的开发环境。

目前的版本可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。

读者可以到网站上下载使用

8.2.3Keil软件使用

相信读者在学习51单片机的过程中对Keil软件的用法比较熟悉了,不太熟悉的读者需要看看KeilC51入门教程,网站有很多相关的资料。

第八章实验源程序代码中完整的工程文件,读者可以很方便的上手应用。

8.2.4将*.hex文件烧录到新控制卡中。

由于两块控制卡的芯片使用不同,所以C51MultiFLEX控制卡程序的烧写方法也与MultiFLEX控制卡不一样,下文将具体介绍。

首先要安装flip-2_4_6烧写软件,打开实验指导书配套光盘,打开“flip-2_4_6烧写软件”文件夹,双击

,很轻松的就安装该软件了。

安装好了该软件后,打开桌面上的快捷方式,进入Setings->Precerences->AutoISP->More

选择芯片AT89C51ED2

 

选择通信:

Settings->Communication->RS232,选择连接板子的COM口号,选择波特率

57600。

连接好的界面,请注意照下面的选项来选择。

调用编译成功的HEX烧写文件。

注意:

Flip下载软件不支持中文路径。

调用文件后点击Run按纽,烧写完毕点击红色按键StartApplication,这时候通信已经中断,并且单片机已经复位运行起来。

这时候可以打开其它的串口调试软件用这条下载线对板子进行通信。

调试完毕如果还要烧写,关闭串口调试软件,重新链接Flip下载软件。

8.3C51MultiFLEX控制卡系统程序简介

在本节,我们将介绍C51MultiFLEX控制卡的程序总体结构以及介绍如何编写用户自己的c语言程序实现对机器人的控制。

8.3.1C51MultiFLEX控制卡的程序总体结构简介

通过第七章的实验,相信大家已经非常熟悉如何使用电脑对创意之星进行控制。

实际上,

我们通过电脑设置的命令会通过电脑串口传递给C51MultiFLEX控制卡,控制卡通过内部程序程序实现命令,进而实现对机器人的控制,那么控制卡具体是怎么工作的呢?

MultiFLEX控制卡的工作流程图如下所示:

当给控制卡通电后,控制卡首先会读取控制卡功能选择拨码开关的用户设置情况,然后

进行系统的初始化。

控制卡会根据用户设置判断是执行用户下载到控制卡的动作序列还是将各关机回复到初始位置等待上位机(电脑)的命令:

如果是用户下载到控制卡的动作序列,控制卡将循环执行该序列,直到接收到上位机的命令为止;如果是回复到初始位置等待上位机命令,则控制卡将使机器人各关节处于初始位置,然后等待上位机的指令。

然后控制卡就一直进行“等待命令——》执行上位机指令——》等待命令……”循环。

由于整个控制卡的控制程序比较复杂,并且设计到很多单片机最根本的知识(如波特率

设置,io口设置,中断等)还有数据结构方面的知识,对于初学者想弄明白可能需要花上

一个月甚至更多的时间,所以在此不对其源程序进行具体剖析,同学们可在每次做完实验之

余,或着利用课余时间自己研究,不懂的多查阅资料(建议大家研究透彻,将此卡的系统程

序研究透彻之后基本上你就可以进行51单片机的基础开发了)。

8.3.2与用户编写C程序有关的系统程序简介

用户首先要安装好KEIL软件,打开创意之星C51\C51Multifilex控制卡原始程序\C51Multifilex.Uv2,打开后程序界面如下图所示:

在图框1中的是项目管理树,在展开SourceGroup1和inc后,我们会发现整个控制卡程序由6个源文件(.c),和6个头文件(.h)组成,其中和我们编写自己的c语言程序有关的只有Public.h、Usertask.h、USERTASK.C,其余的都是系统文件,在出厂前均已设置好,大家不需要进行更改(更改后可能导致控制卡不能正常工作,如出现此情况请将位于实验指导书配套光盘中对应的文件夹拷过来覆盖原来的文件夹就可以了。

右边带注释的是程序编辑栏,当在左边树状表中双击一个文件的时候在右边就可以对该文件进行编辑。

下面让我们来好好分析一下Public.h、Usertask.h、USERTASK.C这三个文件。

Public.h

#ifndefPublic_h

#definePublic_h

#include

#include

#include

#include

typedefcharint8;

typedefunsignedcharuint8;

typedefintint16;

typedefunsignedintuint16;

typedeflongint32;

typedefunsignedlonguint32;

#definetrue0x01

#definefalse0x00

///////////////////////////////舵机控制方法//////////////////////////////////

//舵机控制数据命令包括两个值一个是最终到达的旋转终止角度,另外一个是速度范围0-255,

//255代表最大速度,MG995舵机速度是0.2秒60度,0代表最小速度设定为2.55秒每60度

//255减去速度参数.比如转动30度,速度参数200,255-200=55,代表550MS完成60度角度

//550MS/60=9.16MS运行一度,30度,时间30*9.16=275,舵机20MS一个周期,275/20=13.75个周期

//完成动作.一共要转动30度,每周期转动:

30/13.75=2.18,每度11.11US,2.18*11.11=24.24US

//定时器0.5425US为计数单位,24.24/0.5425=44.6us,每20MS一个周期每次改变数字计数器45,

//改变14个周期完成60度.另外还要考虑角度是增加还是减少.计算出来有小数点,以及误差,

//在最末尾的时候补足角度.计算出最终计数器数字,程序在中断里面自动按照计算出来的

//改变步进时间以及步进次数进行逼近,当和运行到计算最终数据时停止,中断里面每个周期

//都将查询角度数据是否被改变

/////////////////////////////////////////////////////////////////////////////

///////////////////////舵机控制数据结构///////////////////////////////////

structPWM_DATA

{

volatileuint16buff;//舵机控制寄存器

volatileuint16angle;//计算出的最终到达角度计数器数据=(角度*111111)/5425

volatileuint16value;//每周期改变的计数器数值

};

//////////////////////控制板端口定义////////////////////////////////////////

#defineWORK_LED_ONP5_7=1//WORK灯亮

#defineWORK_LED_OFFP5_7=0//WORK灯灭

///////////////////////舵机控制端口/////////////////////////////////////////

#definePWM1_HP0_2=1//1路舵机控制PWM1

#definePWM1_LP0_2=0

#definePWM2_HP0_3=1//2路舵机控制PWM2

#definePWM2_LP0_3=0

#definePWM3_HP5_5=1//3路舵机控制PWM3

#definePWM3_LP5_5=0

#definePWM4_HP0_4=1//4路舵机控制PWM4

#definePWM4_LP0_4=0

#definePWM5_HP5_4=1//5路舵机控制PWM5

#definePWM5_LP5_4=0

#definePWM6_HP5_3=1//6路舵机控制PWM6

#definePWM6_LP5_3=0

#definePWM7_HP0_5=1//7路舵机控制PWM7

#definePWM7_LP0_5=0

#definePWM8_HP0_6=1//8路舵机控制PWM8

#definePWM8_LP0_6=0

#definePWM9_HP0_7=1//9路舵机控制PWM9

#definePWM9_LP0_7=0

#definePWM10_HP5_2=1//10路舵机控制PWM10

#definePWM10_LP5_2=0

#definePWM11_HP5_1=1//11路舵机控制PWM11

#definePWM11_LP5_1=0

#definePWM12_HP5_0=1//12路舵机控制PWM12

#definePWM12_LP5_0=0

////////////////减速电机端口//////////////////////////////////////////////

#defineM1_RP1_0=1//电机1正转

#defineM1_LP1_0=0//电机1反转

#defineM1_TCCAP0H=0xff//电机1停转

#defineM2_RP1_1=1//电机2正转

#defineM2_LP1_1=0//电机2反转

#defineM2_TCCAP1H=0xff//电机2停转

#defineM3_RP1_2=1//电机3正转

#defineM3_LP1_2=0//电机3反转

#defineM3_TCCAP2H=0xff//电机3停转

#defineM4_RP1_7=1//电机4正转

#defineM4_LP1_7=0//电机4反转

#defineM4_TCCAP3H=0xff//电机4停转

///////////////蜂鸣器控制////////////////////////////////////////////////////

#defineBEEP_ONP3_7=1//蜂鸣器发声

#defineBEEP_OFFP3_7=0//蜂鸣器停止发声

///////////////ADC芯片控制//////////////////////////////////////////////////

#defineADC_ClkP5_6//ADC接口通信时钟线

#defineADC_DataP0_1//ADC接口通信数据线

#defineADC_Data_IP0_1=1//为输入做准备

#endif/*Public_h*/

经过分析之后,我们发现public.h实际上就是一些为了方便我们编程(如typedefchar

int8;)及将实际电路的与程序进行联系(如#defineWORK_LED_ONP5_7=1)而进

行的一些预操作而已,就这么简单。

Usertask.h

#include"public.h"

///////////////////////////////用户可自定义使用的控制板功能函数声明////////////////////////////////////////////////////////

/********************************************************************************

*函数原型:

voidrc_moto_control(uint8*point)

*参数说明:

*point指向24字节舵机控制数据,控制数据定义见控制板舵机控制命令说明

*返回值:

*说明:

设定12路舵机角度控制

********************************************************************************/

externvoidrc_moto_control(uint8*point);

/********************************************************************************

*函数原型:

voiddc_moto_control(uint8*point)

*参数说明:

*point指向8字节直流电机控制数据,控制数据定义见控制板电机控制命令说明

*返回值:

*说明:

设定4路直流电机控制

********************************************************************************/

externvoiddc_moto_control(uint8*point);

/********************************************************************************

*函数原型:

voidgpio_mode_set(uint16temp16)

*参数说明:

temp1616位GPIO设置字

*返回值:

*说明:

设置16位GPIO模式

********************************************************************************/

externvoidgpio_mode_set(uint16temp16);

/********************************************************************************

*函数原型:

voidwrite_gpio(temp16)

*参数说明:

temp1616位GPIO值

*返回值:

*说明:

写16位GPIO值

********************************************************************************/

externvoidwrite_gpio(uint16temp16);

/********************************************************************************

*函数原型:

uint16read_gpio(void)

*参数说明:

temp1616位GPIO值

*返回值:

*说明:

读取16位GPIO输入

********************************************************************************/

externuint16read_gpio(void);

/********************************************************************************

*函数原型:

voidbeep_set(uint8time)

*参数说明:

time持续时间,单位0.1秒

*返回值:

*说明:

板载喇叭输出控制

********************************************************************************/

externvoidbeep_set(uint8time);

/********************************************************************************

*函数原型:

voiddelay(uint8time)

*参数说明:

time延时,分辩率20MS

*返回值:

*说明:

延时操作,分辩率20MS

********************************************************************************/

externvoiddelay(uint8time);

/********************************************************************************

*函数原型:

uint8read_voltage(void)

*参数说明:

*返回值:

读取当前电池的电压值

*说明:

********************************************************************************/

externuint8read_voltage(void);

/********************************************************************************

*函数原型:

voidADC_Read(uint8Channel,uint8*data)//读取8路模拟量

*参数说明:

Channel:

ADC通道选择0-7

**data:

返回8位ADC数据

*返回值:

*说明:

读取8路模拟量

********************************************************************************/

externvoidADC_Read(uint8Channel,uint8*byte);//读取8路模拟量

//***********************************************************************************/

/////////////////////////////用户可自定义使用的控制板功能函数声明end/////////////////////////

经过分析之后,我们发现Usertask.h实际上就是对我们可以使用的控制卡功能函数的外部声明,通过这些声明,我们可以在USERTASK.C中调用这些函数,实现对机器人的控制。

控制卡的所有功能都可以通过调用这些函数实现:

有12路舵机的控制函数,有4路电机的控制函数,有IO口的设置函数,有AD口的读取函数等等,这些函数的定义以及算法代码在工程里的其他几个系统文件里面,在此不作介绍,在后面我们会介绍如何使用这些函数。

USERTASK.C

#include"public.h"

#include"Usertask.h"

/********************************************************************************

*函数原型:

voiduser_task(void)

*参数说明:

*返回值:

*说明:

用户自己编写的任务,所有用户自己定义的功能都在函数里面做

********************************************************************************/

voiduser_task(void)

{

//这里用户可以进行自己的程序编写

}

经过分析我们可以看出,USERTASK.C首先包含了一些必备的头文件,然后就是user_task

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2