ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:1.32MB ,
资源ID:5077936      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5077936.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c51实验指导书.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

c51实验指导书.docx

1、c51实验指导书第十章 8.1 C51MultiFLEX控制卡介绍 C51MultiFLEX控制卡的IO口,AD口,舵机控制,电机控制的数量与MultiFLEX 控制卡相同,各种元器件的布局也基本一致,区别就在于MultiFLEX 控制卡使用的是ATMEGA128芯片,C51MultiFLEX控制卡使用的是AT89C51ED2芯片,该控制卡使用KEIL编译环境,程序下载方法也与MultiFLEX 控制卡有区别,下面的章节再作具体的介绍。8.2 实验相关软件的介绍及使用 本节开始我们将介绍怎样对C51MultiFLEX 控制卡进行C程序编写,从而实现对机器人的代码级的控制。内容涉及到51单片机和

2、单片机C语言的知识,读者需要学习过51单片机和C语言,在做具体的应用和开发时还需要查看提供的AT89C51ED2的芯片资料。8.2.1 控制核心及C 程序编译环境简介 C51MultiFLEX控制卡的控制器的核心是ATMEL公司的AT89C51ED2单片机。该芯片是具有ISP(In-System Programmable)功能的8051,它可以利用电脑上的RS-232 Port再配合ATMEL提供的免费 烧录软件Flip(Flexible In-System Programmable),就可以将编译好的代码烧录到8051的内部ROM中。 从上图中可以看到,ATMEL的AT89C51ED2(包装

3、为PDIL40)与传统的8051是完全兼容的,脚位图特完全相容,也就是说如果没有用到一些特殊功能的话,可以把AT89C51ED2当做一般的8051来使用,满足了大部分高校教学的需求。如果说要使用芯片中的特殊功能,可以上ATMEL的官方网站()去下载详细的参考资料。 AT89C51ED2内部有64K Bytes ROM,可重复烧录10万次, 1792 Bytes SRAM ,2048 Bytes EEPROM,也可重复烧录10万次,工作频率可达到60M HZ,一点都不用担心利用C语言来开发带来的问题。还有板上的芯片比传统的8051多了两组IO口(P4 P5),可以解决在一些特殊应用上IO口 不足

4、的问题。8.2.2 Keil软件介绍 KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。 目前的版本可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三 方开发工具。读者可以到网站上下载使用8.2.3 Keil软件使用 相信读者在学习51单片机的过程中对K

5、eil软件的用法比较熟悉了,不太熟悉的读者需要看看Keil C51入门教程,网站有很多相关的资料。第八章实验源程序代码中完整的工程文件,读者可以很方便的上手应用。8.2.4 将*.hex 文件烧录到新控制卡中。 由于两块控制卡的芯片使用不同,所以C51MultiFLEX控制卡程序的烧写方法也与MultiFLEX 控制卡不一样,下文将具体介绍。 首先要安装flip-2_4_6烧写软件,打开实验指导书配套光盘,打开“flip-2_4_6烧写软件”文件夹,双击,很轻松的就安装该软件了。 安装好了该软件后,打开桌面上的快捷方式,进入Setings-Precerences-AutoISP-More选择芯

6、片AT89C51ED2选择通信:Settings-Communication-RS232,选择连接板子的COM口号,选择波特率57600。连接好的界面,请注意照下面的选项来选择。调用编译成功的HEX烧写文件。注意:Flip下载软件不支持中文路径。调用文件后点击Run按纽,烧写完毕点击红色按键Start Application,这时候通信已经中断,并且单片机已经复位运行起来。这时候可以打开其它的串口调试软件用这条下载线对板子进行通信。调试完毕如果还要烧写,关闭串口调试软件,重新链接Flip下载软件。8.3 C51MultiFLEX 控制卡系统程序简介在本节,我们将介绍C51MultiFLEX 控

7、制卡的程序总体结构以及介绍如何编写用户自己的c语言程序实现对机器人的控制。8.3.1 C51MultiFLEX 控制卡的程序总体结构简介 通过第七章的实验,相信大家已经非常熟悉如何使用电脑对创意之星进行控制。实际上,我们通过电脑设置的命令会通过电脑串口传递给C51MultiFLEX 控制卡,控制卡通过内部程序程序实现命令,进而实现对机器人的控制,那么控制卡具体是怎么工作的呢?MultiFLEX 控制卡的工作流程图如下所示:当给控制卡通电后,控制卡首先会读取控制卡功能选择拨码开关的用户设置情况,然后进行系统的初始化。控制卡会根据用户设置判断是执行用户下载到控制卡的动作序列还是将各关机回复到初始位

8、置等待上位机(电脑)的命令:如果是用户下载到控制卡的动作序列,控制卡将循环执行该序列,直到接收到上位机的命令为止;如果是回复到初始位置等待上位机命令,则控制卡将使机器人各关节处于初始位置,然后等待上位机的指令。然后控制卡就一直进行“等待命令执行上位机指令等待命令”循环。由于整个控制卡的控制程序比较复杂,并且设计到很多单片机最根本的知识(如波特率设置,io 口设置,中断等)还有数据结构方面的知识,对于初学者想弄明白可能需要花上一个月甚至更多的时间,所以在此不对其源程序进行具体剖析,同学们可在每次做完实验之余,或着利用课余时间自己研究,不懂的多查阅资料(建议大家研究透彻,将此卡的系统程序研究透彻之

9、后基本上你就可以进行51 单片机的基础开发了)。8.3.2 与用户编写C 程序有关的系统程序简介 用户首先要安装好KEIL软件,打开创意之星C51C51Multifilex控制卡原始程序C51Multifilex.Uv2, 打开后程序界面如下图所示:在图框1 中的是项目管理树,在展开SourceGroup 1 和inc 后,我们会发现整个控制卡程序由6个源文件(.c),和6个头文件(.h)组成,其中和我们编写自己的c 语言程序有关的只有Public.h、Usertask.h、USERTASK.C,其余的都是系统文件,在出厂前均已设置好,大家不需要进行更改(更改后可能导致控制卡不能正常工作,如出

10、现此情况请将位于实验指导书配套光盘中对应的文件夹拷过来覆盖原来的文件夹就可以了。右边带注释的是程序编辑栏,当在左边树状表中双击一个文件的时候在右边就可以对该文件进行编辑。下面让我们来好好分析一下Public.h、Usertask.h、USERTASK.C 这三个文件。Public.h#ifndef Public_h#define Public_h#include #include#include#includetypedef char int8; typedef unsigned char uint8;typedef int int16;typedef unsigned int uint16;

11、typedef long int32;typedef unsigned long uint32;#define true 0x01#define false 0x00/舵机控制方法/舵机控制数据命令包括两个值一个是最终到达的旋转终止角度,另外一个是速度范围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个周

12、期/完成动作.一共要转动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度.另外还要考虑角度是增加还是减少.计算出来有小数点,以及误差,/在最末尾的时候补足角度.计算出最终计数器数字,程序在中断里面自动按照计算出来的/改变步进时间以及步进次数进行逼近,当和运行到计算最终数据时停止,中断里面每个周期/都将查询角度数据是否被改变/舵机控制数据结构/struct PWM_DATA volatile uin

13、t16 buff; /舵机控制寄存器 volatile uint16 angle; /计算出的最终到达角度计数器数据=(角度*111111)/5425 volatile uint16 value; /每周期改变的计数器数值; /控制板端口定义/#define WORK_LED_ON P5_7 = 1 /WORK灯亮#define WORK_LED_OFF P5_7 = 0 /WORK灯灭/舵机控制端口/#define PWM1_H P0_2 = 1 /1路舵机控制 PWM1#define PWM1_L P0_2 = 0 #define PWM2_H P0_3 = 1 /2路舵机控制 PWM2#

14、define PWM2_L P0_3 = 0 #define PWM3_H P5_5 = 1 /3路舵机控制 PWM3#define PWM3_L P5_5 = 0 #define PWM4_H P0_4 = 1 /4路舵机控制 PWM4#define PWM4_L P0_4 = 0 #define PWM5_H P5_4 = 1 /5路舵机控制 PWM5#define PWM5_L P5_4 = 0 #define PWM6_H P5_3 = 1 /6路舵机控制 PWM6#define PWM6_L P5_3 = 0 #define PWM7_H P0_5 = 1 /7路舵机控制 PWM7#

15、define PWM7_L P0_5 = 0 #define PWM8_H P0_6 = 1 /8路舵机控制 PWM8#define PWM8_L P0_6 = 0 #define PWM9_H P0_7 = 1 /9路舵机控制 PWM9#define PWM9_L P0_7 = 0 #define PWM10_H P5_2 = 1 /10路舵机控制 PWM10#define PWM10_L P5_2 = 0 #define PWM11_H P5_1 = 1 /11路舵机控制 PWM11#define PWM11_L P5_1 = 0 #define PWM12_H P5_0 = 1 /12路

16、舵机控制 PWM12#define PWM12_L P5_0 = 0 /减速电机端口/#define M1_R P1_0 = 1 /电机1正转#define M1_L P1_0 = 0 /电机1反转#define M1_T CCAP0H = 0xff /电机1停转#define M2_R P1_1 = 1 /电机2正转#define M2_L P1_1 = 0 /电机2反转#define M2_T CCAP1H = 0xff /电机2停转#define M3_R P1_2 = 1 /电机3正转#define M3_L P1_2 = 0 /电机3反转#define M3_T CCAP2H = 0

17、xff /电机3停转#define M4_R P1_7 = 1 /电机4正转#define M4_L P1_7 = 0 /电机4反转#define M4_T CCAP3H = 0xff /电机4停转/蜂鸣器控制/#define BEEP_ON P3_7 = 1 /蜂鸣器发声#define BEEP_OFF P3_7 = 0 /蜂鸣器停止发声/ADC芯片控制/#define ADC_Clk P5_6 /ADC接口通信时钟线#define ADC_Data P0_1 /ADC接口通信数据线#define ADC_Data_I P0_1 = 1 /为输入做准备#endif /*Public_h*/经

18、过分析之后,我们发现public.h 实际上就是一些为了方便我们编程(如typedef charint8;)及将实际电路的与程序进行联系(如#define WORK_LED_ON P5_7 = 1)而进行的一些预操作而已,就这么简单。Usertask.h#include public.h/用户可自定义使用的控制板功能函数声明/* *函数原型: void rc_moto_control(uint8 *point) *参数说明: *point 指向24字节舵机控制数据,控制数据定义见控制板舵机控制命令说明 *返回值: 无 *说明: 设定12路舵机角度控制 */extern void rc_moto

19、_control(uint8 *point);/* *函数原型: void dc_moto_control(uint8 *point) *参数说明: *point 指向8字节直流电机控制数据,控制数据定义见控制板电机控制命令说明 *返回值: 无 *说明: 设定4路直流电机控制 */extern void dc_moto_control(uint8 *point);/* *函数原型: void gpio_mode_set(uint16 temp16) *参数说明: temp16 16位GPIO设置字 *返回值: 无 *说明: 设置16位GPIO模式 */extern void gpio_mode

20、_set(uint16 temp16);/* *函数原型: void write_gpio(temp16) *参数说明: temp16 16位GPIO值 *返回值: 无 *说明: 写16位GPIO值 */extern void write_gpio(uint16 temp16);/* *函数原型: uint16 read_gpio(void) *参数说明: temp16 16位GPIO值 *返回值: 无 *说明: 读取16位GPIO输入 */ extern uint16 read_gpio(void);/* *函数原型: void beep_set(uint8 time) *参数说明: tim

21、e 持续时间,单位0.1秒 *返回值: 无 *说明: 板载喇叭输出控制 */extern void beep_set(uint8 time);/* *函数原型: void delay(uint8 time) *参数说明: time 延时,分辩率20MS *返回值: 无 *说明: 延时操作,分辩率20MS */extern void delay(uint8 time);/* *函数原型: uint8 read_voltage(void) *参数说明: 无 *返回值: 读取当前电池的电压值 *说明: */extern uint8 read_voltage(void);/* *函数原型: void

22、ADC_Read(uint8 Channel,uint8 *data) /读取8路模拟量 *参数说明: Channel : ADC通道选择 07 * *data : 返回8位ADC数据 *返回值: 无 *说明: 读取8路模拟量 */extern void ADC_Read(uint8 Channel,uint8 *byte); /读取8路模拟量 /*/用户可自定义使用的控制板功能函数声明end/经过分析之后,我们发现Usertask.h 实际上就是对我们可以使用的控制卡功能函数的外部声明,通过这些声明,我们可以在USERTASK.C 中调用这些函数,实现对机器人的控制。控制卡的所有功能都可以通

23、过调用这些函数实现:有12 路舵机的控制函数,有4 路电机的控制函数,有IO 口的设置函数,有AD 口的读取函数等等,这些函数的定义以及算法代码在工程里的其他几个系统文件里面,在此不作介绍,在后面我们会介绍如何使用这些函数。USERTASK.C#include public.h#include Usertask.h /* *函数原型: void user_task(void) *参数说明: 无 *返回值: 无 *说明: 用户自己编写的任务,所有用户自己定义的功能都在函数里面做 */void user_task(void) /这里用户可以进行自己的程序编写经过分析我们可以看出, USERTASK.C 首先包含了一些必备的头文件,然后就是user_task

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

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