版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一、单片机输入输出实验一、 实验目的:熟悉c8051f系列单片机的c语言编程,熟悉c8051f系列单片机的定时器使用方法,学习使用c8051f系列单片机数字量输入/输出。二、 实验原理:1.对于8位led输出实验将c8051f020 的p4 口连接到8 盏led 灯,通过定时器3计数溢出的方式产生中断,实现8 盏灯依次循环点亮。2.对于8路拨档开关输入,只需要使p5端口的输入传给p4端口,从而驱动对应led小灯点亮。三、实验步骤:1. 8位led输出准备工作:用短接线将实验箱上的p4.0p4.7与ld1ld8接线端子短接。利用定时器3作定时(系统主频2mhz,定时间隔要求0.3秒),用c8
2、051f020的p4口作输出控制发光二极管ld1ld8。让发光二极管ld1ld8依次点亮(同一时刻只有一个发光二极管发光)。其中ld1最先点亮,ld8最后点亮;当ld8点亮后,ld1再点亮,然后重复。28路拨档开关输入准备工作:闭合开关k11。a. 编写程序,读入开关k1k8的状态。b. 编写程序,读入开关k1k8的状态,取反后通过发光二极管ld1ld8输出。四、 实验流程:开始1.8位led输出关看门狗初始化io口初始化定时器3依次点亮led是否定时到 n y28路拨档开关输入开始关看门狗初始化io口开关输入给p5p5端口值->p4端口值led输出五、实验程序:1. 8位led输出/-
3、/程序说明:/ 此程序用于测试教学实验机上的8个发光二极管,正常情况下应轮流点亮.定时时间为0.3s/-/ 头文件包含/-#include <c8051f020.h> /-/ 16位特殊寄存器定义/-sfr16 tmr3rl = 0x92; sfr16 tmr3 = 0x94; /-/ 常量定义/-#define sysclk 2000000 /系统工作频率/-/全局变量定义/- unsigned char i=0xfe;/-/ 函数定义/-void port_init (void);void timer3_init (int counts);void timer3_isr (vo
4、id);/-/ 主程序/-void main (void) wdtcn = 0xde; wdtcn = 0xad; /禁止看门狗定时器 port_init (); timer3_init(0xc350 ); /定时时间为0.3s ref0cn=0x02; ea = 1; while (1) /-/函数名称: port_init ()/函数功能: 通用i/o口及交叉开关初始化/入口参数: 无/出口参数: 无/全局变量引用: 无/调用模块: 无/-void port_init (void) xbr2 = 0x40;/*使能交叉开关*/ p74out |= 0x000; /*推挽输出*/-/函数名称
5、: timer3_init ()/函数功能: 定时器3初始化/入口参数: int counts/出口参数: 无/全局变量引用: 无/调用模块: 无/-void timer3_init (int counts) tmr3cn = 0x00; /用十二分频 tmr3rl = -counts; tmr3 = 0xffff; eie2 |= 0x01; tmr3cn |= 0x04; /-/函数名称: timer3_isr ()/函数功能: 定时器3中断服务程序/入口参数: 无/出口参数: 无/全局变量引用: 无/调用模块: 无/-void timer3_isr (void) interrupt 14
6、 int j; tmr3cn &= (0x80);/*清中断标志*/ p4=i;/*送数据到p4*/ i<<=1; i = i | 0x01; if(i=0xff) i=0xfe;28路拨档开关输入/-/程序说明:/ 开关输入,小灯输出/-/ 头文件包含/-#include <c8051f020.h> /-/ 主程序/-void main (void) wdtcn = 0xde; wdtcn = 0xad; /禁止看门狗定时器 xbr2 = 0x40;/*使能交叉开关*/ p74out |= 0x000; /*推挽输出*/p4=p5;/*送数据到p4*/五、 作
7、业:1 试分析8位led输出电路图的原理。答:8位led输出电路图如下,当测试铜头为低电平时,led能够发光,当测试铜头为高电平或浮空状态时,led不亮。2 试分析8路拨档开关输入电路图的原理。答:8路拨档开关输入电路图如下,k11是总的开关,当k1-k8任意一个开关接通时,对应的p5上的端口被置0,同时弱上拉端口产生一个中断,即int0=0.实验二、单片机控制步进电机实验一、 实验目的:了解步进电机工作原理,掌握使用c8051f020 控制步进电机的硬件设计方法,熟悉步进电机驱动程序的设计与调试。二、 实验原理:1.步进电机的工作原理:以三相反应式步进电机为例:它的定子上有三对磁极,每一对磁
8、极上绕着一相绕组,绕组通电时,这两个磁极的极性相反;三相绕组接成星形,转子铁心及定子极靴上有小齿,定转子齿距通常相等。转子铁心上没有绕组,转子的齿数为40,相邻两个齿之间夹角为9°。当某一相绕组通电时,由于定转子上有齿和槽,所以当转子齿的相对位置不同时,在磁场的作用下,转子将转动一个角度,使转子和定子的齿相互对齐,这就是使步进电机旋转的原因。步进电机运转是由脉冲信号控制。通过改变各相通电的次序可以调整步进电机的运转方向。改变脉冲信号的周期就可以改变步进电机的运转速度。本实验板选用的是四相步进电机,实验例程采用四相八拍的方式驱动步进电机。正方向:a-ab-b-bc-c-cd-d-da-
9、a反方向;a-da-d-cd-c-bc-b-ab-a aa,bb,cc.dd 是步进电机的4 个线圈,d8,d9,d11,d12 为续流二极管,是为步进电机的4 个线圈放电用的,当电机断电时,它的线圈要放电用二流管导流。本实验将p5的四个端口p5.0-p5.3连接到步进电机a、b、c、d四个口上,通过改变p5.0-p5.3四个口高低电平的轮流改变实现了步进电机的驱动。通过改变每个周期的高低电平改变时间控制步进电机的速度。三、 实验步骤:1准备工作教学实验机的步进电机驱动信号是stepastepd,本例程用p5.0p5.3 来控制步进电机的4 个线圈处于通电或断电状态,所以在运行例程前,用跳线将
10、stepastepd 分别同p5.0p5.3 连接;同时也应将步进电机的引出线同cn2 正确连接(vcc 黑,aa 红,bb黄,cc 白,dd 蓝)。2步进电机正编制程序控制步进电机实现正功能3步进电机反转编制程序控制步进电机实现反功能4步进电机定速运行编制程序使步进电机以每分钟30圈的速度正转四、 实验流程:1步进电机正初始化定时器3开始关看门狗初始化io口按正/反转方向依次给4相通电2、步进电机反开始关看门狗初始化io口按反转方向依次给4相通电3、步进电机定速运行开始关看门狗初始化io口调整通电的间隔时间,达到预定速度按正转方向依次给4相通电五、实验程序:1. 步进电机正/p50-step
11、ap51-stepbp52-stepcp53-stepd/-/ includes/-#include <c8051f020.h> / sfr declarations#include <intrins.h>/-/ function prototypes/-void port_init (void);/*函数名称:void sleep_ms(word count)功能描述:延时输入:word count(所要延时的长度)输出:无全局变量:无调用模块:_nop_()*/void sleep_ms(unsigned char count) unsigned char ii,j
12、j; for(ii=0;ii<count;ii+) for(jj=0;jj<250;jj+) _nop_(); /-/ main routine/-void main (void) unsigned char k;unsigned char senddata;/*无效看门狗*/ wdtcn = 0xde; wdtcn = 0xad; port_init ();senddata=0xff;/*4相线圈都截止*/while(1)/步进电机正转senddata=0x0e;/*a相通电*/p5=senddata;sleep_ms(250);senddata=0x0c;/*ab相通电*/p5
13、=senddata;sleep_ms(250);senddata=0x0d;/*b相通电*/p5=senddata;sleep_ms(250);senddata=0x09;/*bc相通电*/p5=senddata;sleep_ms(250);senddata=0x0b;/*c相通电*/p5=senddata;sleep_ms(250);senddata=0x03;/*cd相通电*/p5=senddata;sleep_ms(250);senddata=0x07;/*d相通电*/p5=senddata;sleep_ms(250);senddata=0x06;/*da相通电*/p5=senddata
14、;sleep_ms(250);/*函数名称:void port_init(void)功能描述:初始化i/o输入:无输出:无全局变量:xbr2,p74out调用模块:无*/void port_init (void) xbr2 = 0x40; /*使能交叉开关和弱上拉*/ p74out |= 0x0f; /*p5低4位为推挽输出,其余口为开漏输出*/2. 步进电机反:/程序说明:此程序通过i/o口驱动步进电机反转/p50-stepap51-stepbp52-stepcp53-stepd/-/ includes/-#include <c8051f020.h> / sfr declarat
15、ions#include <intrins.h>/-/ function prototypes/-void port_init (void);/*函数名称:void sleep_ms(word count)功能描述:延时输入:word count(所要延时的长度)输出:无全局变量:无调用模块:_nop_()*/void sleep_ms(unsigned char count) unsigned char ii,jj; for(ii=0;ii<count;ii+) for(jj=0;jj<250;jj+) _nop_(); /-/ main routine/-void
16、main (void) unsigned char k;unsigned char senddata;/*无效看门狗*/ wdtcn = 0xde; wdtcn = 0xad; port_init ();senddata=0xff;/*4相线圈都截止*/*步进电机反转*/while(1)senddata=0x0e;/*a相通电*/p5=senddata;sleep_ms(250);senddata=0x06;/*da相通电*/p5=senddata;sleep_ms(250);senddata=0x07;/*d相通电*/p5=senddata;sleep_ms(250);senddata=0x
17、03;/*cd相通电*/p5=senddata;sleep_ms(250);senddata=0x0b;/*c相通电*/p5=senddata;sleep_ms(250);senddata=0x09;/*bc相通电*/p5=senddata;sleep_ms(250);senddata=0x0d;/*b相通电*/p5=senddata;sleep_ms(250);senddata=0x0c;/*ab相通电*/p5=senddata;sleep_ms(250);/*函数名称:void port_init(void)功能描述:初始化i/o输入:无输出:无全局变量:xbr2,p74out调用模块:无
18、*/void port_init (void) xbr2 = 0x40; /*使能交叉开关和弱上拉*/ p74out |= 0x0f; /*p5低4位为推挽输出,其余口为开漏输出*/3. 步进电机定速运转:/程序说明:此程序通过i/o口驱动步进电机定速运转,且每分钟30转/p50-stepap51-stepbp52-stepcp53-stepd/-/ includes/-#include <c8051f020.h> / sfr declarations#include <intrins.h>/-/ function prototypes/-void port_init
19、(void);/*函数名称:void sleep_ms(word count)功能描述:延时输入:word count(所要延时的长度)输出:无全局变量:无调用模块:_nop_()*/void sleep_ms(unsigned char count) unsigned char ii,jj; for(ii=0;ii<count;ii+) for(jj=0;jj<60;jj+)/通过改变循环次数实现定速 _nop_(); /-/ main routine/-void main (void) unsigned char k;unsigned char senddata;/*无效看门狗
20、*/ wdtcn = 0xde; wdtcn = 0xad; port_init ();senddata=0xff;/*4相线圈都截止*/while(1)senddata=0x0e;/*a相通电*/p5=senddata;sleep_ms(250);senddata=0x0c;/*ab相通电*/p5=senddata;sleep_ms(250);senddata=0x0d;/*b相通电*/p5=senddata;sleep_ms(250);senddata=0x09;/*bc相通电*/p5=senddata;sleep_ms(250);senddata=0x0b;/*c相通电*/p5=send
21、data;sleep_ms(250);senddata=0x03;/*cd相通电*/p5=senddata;sleep_ms(250);senddata=0x07;/*d相通电*/p5=senddata;sleep_ms(250);senddata=0x06;/*da相通电*/p5=senddata;sleep_ms(250);/*函数名称:void port_init(void)功能描述:初始化i/o输入:无输出:无全局变量:xbr2,p74out调用模块:无*/void port_init (void) xbr2 = 0x40; /*使能交叉开关和弱上拉*/ p74out |= 0x0f;
22、 /*p5低4位为推挽输出,其余口为开漏输出*/实验三、单片机控制直流电机实验一、实验目的:熟悉c8051f020单片机的pca模块,学会使用pwm输出,学会调整pwm信号的占空比。学会用pwm信号控制直流电机的运行。学会交叉编译开关的使用。二、 实验原理:实验原理图如图所示,对直流电机有两种控制方式,一是通过连接到dac接口通过改变输入电压来改变转速,或是连接到pwm接口通过改变pwm信号的占空比来改变转速。此处实验将pca模块的cex0引脚配置在p0.0处,通过改变8位或16位pwm信号的占空比来改变电机转速的变化。三、 实验步骤:准备工作:将p0.0用短接线连接到实验箱上的pwm点。1编
23、制程序将pca模块中的cex0引脚配置在p0.02编制程序实现8位pwm控制直流电机的运行,试改变8位pwm信号的占空比,观察电机转速的变化。3编制程序实现16位pwm控制直流电机的运行,试改变16位pwm信号的占空比,观察电机转速的变化。四、 实验流程:开始关看门狗,初始化io口,将 pca模块中的cex0引脚配置在p0.0pca初始化成8/16位脉宽调置方式开中断匹配中断清匹配中断标志输出低电平清溢出中断标志输出高电平五、 实验程序:1. 将pca模块中的cex0引脚配置在p0.0,实现8位pwm控制直流电机的运行。/程序说明:此程序实现pca的8位pwm输出,输出脚配置在p0.0脚。#i
24、nclude <c8051f020.h>/*sfr定义*/-/ function prototypes/-void port_init (void);void pca_init (void);void pca_isr (void);/-/ main routine/-void main (void) /*关看门狗*/ wdtcn = 0xde; wdtcn = 0xad; port_init ();/*初始化io口*/ pca_init ();/*pca初始化成8位脉宽调置方式*/ ea = 1;/*开总中断*/ while (1) void port_init (void) xb
25、r0 = 0x10;/*cex0->p0.0*/ xbr2 = 0x40; /*使能交叉开关和弱闪拉*/ p0mdout |= 0x00; /*使能p1.6脚推挽输出*/void pca_init (void)eie1 = 0x28;/pca0md = 0x01;/*pca定时器/计数器溢出中断禁止*/pca0l = 0x00;pca0h = 0x00;pca0cpm0 = 0x4b;/*8位pwm方式,当ccf0=1时,允许辅捉/比较标志的中断申请*/pca0cpl0 = 0x00;/*置初值*/pca0cph0 = 0xf0;pca0cn = 0x40;/*允许pca定时器/计数器*
26、/*pca中断子程序*/void pca_isr (void) interrupt 9cf = 0;/*清溢出中断标志*/ccf0 = 0;/*清匹配中断标志*/pca0l = 0x00;/pca0h = 0x40; 2. 实现16位pwm控制直流电机的运行/程序说明:此程序实现pca的16位pwm输出,输出脚配置在p0.0脚。#include <c8051f020.h>/*sfr定义*/-/ function prototypes/-void port_init (void);void pca_init (void);void pca_isr (void);/-/ main ro
27、utine/-void main (void) /*关看门狗*/ wdtcn = 0xde; wdtcn = 0xad; port_init ();/*初始化io口*/ pca_init ();/*pca初始化成16位脉宽调置方式*/ ea = 1;/*开总中断*/ while (1) void port_init (void) xbr0 = 0x10;/*cex0->p0.0*/ xbr2 = 0x40; /*使能交叉开关和弱闪拉*/ p0mdout |= 0x00; /*使能p1.6脚推挽输出*/void pca_init (void)eie1 = 0x28;/pca0md = 0x
28、01;/*pca定时器/计数器溢出中断禁止*/pca0l = 0x00;pca0h = 0x00;pca0cpm0 = 0xcb;/*16位pwm方式,当ccf0=1时,允许辅捉/比较标志的中断申请*/pca0cpl0 = 0x00;/*置初值*/pca0cph0 = 0xf0;pca0cn = 0x40;/*允许pca定时器/计数器*/*pca中断子程序*/void pca_isr (void) interrupt 9cf = 0;/*清溢出中断标志*/ccf0 = 0;/*清匹配中断标志*/pca0l = 0x00;/pca0h = 0x40; 实验四、plc实验一、实验目的:熟悉三菱plc,学会使用软件输入梯形图程序,并下载到plc中运行。学会编制的plc梯形图程序,用以完成相应的控制功能。二、 实验原理:利用软件输入梯形图程序,并下载到plc中运行,实现所要求的功能。三、 实验步骤:1.利用plc实现启动、保持和停止功能。将输入端x0,x1接至开关0,开关1,编制程序实现如下功能:按下x0使输出有效并一直保持,直到按下x1使输出无效并保持。2将输入端x0接开关0,输出端y0、y1接至发光二极管1、2, 当接上电源,并按下x000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45086.1-2024车载定位系统技术要求及试验方法第1部分:卫星定位
- 2024年气体放电灯项目立项申请报告
- 磁吸铝条尺行业市场发展及发展趋势与投资战略研究报告
- 2025农村公益性服务合同书
- 展览展示装修合同范例
- 物流门头定制合同范例
- 农村合资建房合同范例
- 承包开挖石方合同范例
- 文案合同范例
- 合同范例公示写
- 天津市南开区2023-2024学年四年级上学期期末语文试卷
- 数据中心智能运维体系建设
- 2023年计划订单专员年度总结及下一年规划
- 体质测试成绩表(自动统计数据)(小学、初中)
- 2022年全国垃圾分类知识竞赛试题库(附含答案与解析)
- 2024版医院手术安全管理学习培训课件
- 材料标准目录
- 脑卒中后吞咽障碍患者进食护理(2023年中华护理学会团体标准)
- 护士执业注册申请表 新
- 妊娠期高血压疾病诊治指南(2022版)解读
- 公章证照使用登记表
评论
0/150
提交评论