单片机PLC实验报告.doc

上传人:文库蛋蛋多 文档编号:4144556 上传时间:2023-04-07 格式:DOC 页数:20 大小:193.50KB
返回 下载 相关 举报
单片机PLC实验报告.doc_第1页
第1页 / 共20页
单片机PLC实验报告.doc_第2页
第2页 / 共20页
单片机PLC实验报告.doc_第3页
第3页 / 共20页
单片机PLC实验报告.doc_第4页
第4页 / 共20页
单片机PLC实验报告.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单片机PLC实验报告.doc》由会员分享,可在线阅读,更多相关《单片机PLC实验报告.doc(20页珍藏版)》请在三一办公上搜索。

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 /-/ 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 (void);/-/ 主程序/-void main (

4、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; /*推挽输出*/-/函数名称: Timer3_Init ()/函数功能: 定

5、时器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 int j; TMR3CN &= (0x80)

6、;/*清中断标志*/ P4=i;/*送数据到P4*/ i=1; i = i | 0x01; if(i=0xff) i=0xfe;28路拨档开关输入/-/程序说明:/ 开关输入,小灯输出/-/ 头文件包含/-#include /-/ 主程序/-void main (void) WDTCN = 0xde; WDTCN = 0xad; /禁止看门狗定时器 XBR2 = 0x40;/*使能交叉开关*/ P74OUT |= 0x000; /*推挽输出*/P4=P5;/*送数据到P4*/五、 作业:1 试分析8位LED输出电路图的原理。答:8位LED输出电路图如下,当测试铜头为低电平时,LED能够发光,当

7、测试铜头为高电平或浮空状态时,LED不亮。2 试分析8路拨档开关输入电路图的原理。答:8路拨档开关输入电路图如下,K11是总的开关,当K1-K8任意一个开关接通时,对应的P5上的端口被置0,同时弱上拉端口产生一个中断,即INT0=0.实验二、单片机控制步进电机实验一、 实验目的:了解步进电机工作原理,掌握使用C8051F020 控制步进电机的硬件设计方法,熟悉步进电机驱动程序的设计与调试。二、 实验原理:1.步进电机的工作原理:以三相反应式步进电机为例:它的定子上有三对磁极,每一对磁极上绕着一相绕组,绕组通电时,这两个磁极的极性相反;三相绕组接成星形,转子铁心及定子极靴上有小齿,定转子齿距通常

8、相等。转子铁心上没有绕组,转子的齿数为40,相邻两个齿之间夹角为9。当某一相绕组通电时,由于定转子上有齿和槽,所以当转子齿的相对位置不同时,在磁场的作用下,转子将转动一个角度,使转子和定子的齿相互对齐,这就是使步进电机旋转的原因。步进电机运转是由脉冲信号控制。通过改变各相通电的次序可以调整步进电机的运转方向。改变脉冲信号的周期就可以改变步进电机的运转速度。本实验板选用的是四相步进电机,实验例程采用四相八拍的方式驱动步进电机。正方向:A-AB-B-BC-C-CD-D-DA-A反方向;A-DA-D-CD-C-BC-B-AB-A AA,BB,CC.DD 是步进电机的4 个线圈,D8,D9,D11,D

9、12 为续流二极管,是为步进电机的4 个线圈放电用的,当电机断电时,它的线圈要放电用二流管导流。本实验将P5的四个端口P5.0-P5.3连接到步进电机A、B、C、D四个口上,通过改变P5.0-P5.3四个口高低电平的轮流改变实现了步进电机的驱动。通过改变每个周期的高低电平改变时间控制步进电机的速度。三、 实验步骤:1准备工作教学实验机的步进电机驱动信号是STEPASTEPD,本例程用P5.0P5.3 来控制步进电机的4 个线圈处于通电或断电状态,所以在运行例程前,用跳线将STEPASTEPD 分别同P5.0P5.3 连接;同时也应将步进电机的引出线同CN2 正确连接(VCC 黑,AA 红,BB

10、黄,CC 白,DD 蓝)。2步进电机正编制程序控制步进电机实现正功能3步进电机反转编制程序控制步进电机实现反功能4步进电机定速运行编制程序使步进电机以每分钟30圈的速度正转四、 实验流程:1步进电机正初始化定时器3开始关看门狗初始化IO口按正/反转方向依次给4相通电2、步进电机反开始关看门狗初始化IO口按反转方向依次给4相通电3、步进电机定速运行开始关看门狗初始化IO口调整通电的间隔时间,达到预定速度按正转方向依次给4相通电五、实验程序:1. 步进电机正/P50-STEPAP51-STEPBP52-STEPCP53-STEPD/-/ Includes/-#include / SFR decla

11、rations#include /-/ 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;iicount;ii+) for(jj=0;jj250;jj+) _nop_(); /-/ MAIN Routine/-void main (void) unsigned c

12、har 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=SendData;sleep_ms(250);SendData=0x0d;/*B相通电*/P5=SendData;sleep_ms(250);SendData=0x09;/*BC相通电*/P5=SendData;

13、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;sleep_ms(250);/*函数名称:void PORT_Init(void)功能描述:初始化I/O输入:无输出:无全局变量:XBR2,P74OUT调用模块:无*/void PORT_Init (void)

14、XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/2. 步进电机反:/程序说明:此程序通过I/O口驱动步进电机反转/P50-STEPAP51-STEPBP52-STEPCP53-STEPD/-/ Includes/-#include / SFR declarations#include /-/ Function PROTOTYPES/-void PORT_Init (void);/*函数名称:void sleep_ms(WORD count)功能描述:延时输入:WORD count(所要延时的长度)输出:无全局

15、变量:无调用模块:_nop_()*/void sleep_ms(unsigned char count) unsigned char ii,jj; for(ii=0;iicount;ii+) for(jj=0;jj250;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

16、=0x0e;/*A相通电*/P5=SendData;sleep_ms(250);SendData=0x06;/*DA相通电*/P5=SendData;sleep_ms(250);SendData=0x07;/*D相通电*/P5=SendData;sleep_ms(250);SendData=0x03;/*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

17、相通电*/P5=SendData;sleep_ms(250);SendData=0x0c;/*AB相通电*/P5=SendData;sleep_ms(250);/*函数名称:void PORT_Init(void)功能描述:初始化I/O输入:无输出:无全局变量:XBR2,P74OUT调用模块:无*/void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/3. 步进电机定速运转:/程序说明:此程序通过I/O口驱动步进电机定速运转,且每分钟30转/P50-STEPAP51-ST

18、EPBP52-STEPCP53-STEPD/-/ Includes/-#include / SFR declarations#include /-/ 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;iicount;ii+) for(jj=0;jj60;jj+)/

19、通过改变循环次数实现定速 _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=SendData;sleep_ms(250);SendData=0x0d;/*B相通电*/P

20、5=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;sleep_ms(250);/*函数名称:void PORT_Init(void)功能描述:

21、初始化I/O输入:无输出:无全局变量:XBR2,P74OUT调用模块:无*/void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/实验三、单片机控制直流电机实验一、实验目的:熟悉C8051F020单片机的PCA模块,学会使用PWM输出,学会调整PWM信号的占空比。学会用PWM信号控制直流电机的运行。学会交叉编译开关的使用。二、 实验原理:实验原理图如图所示,对直流电机有两种控制方式,一是通过连接到DAC接口通过改变输入电压来改变转速,或是连接到PWM接口通过改变PWM信号

22、的占空比来改变转速。此处实验将PCA模块的CEX0引脚配置在P0.0处,通过改变8位或16位PWM信号的占空比来改变电机转速的变化。三、 实验步骤:准备工作:将P0.0用短接线连接到实验箱上的PWM点。1编制程序将PCA模块中的CEX0引脚配置在P0.02编制程序实现8位PWM控制直流电机的运行,试改变8位PWM信号的占空比,观察电机转速的变化。3编制程序实现16位PWM控制直流电机的运行,试改变16位PWM信号的占空比,观察电机转速的变化。四、 实验流程:开始.关看门狗,初始化IO口,将 PCA模块中的CEX0引脚配置在P0.0PCA初始化成8/16位脉宽调置方式开中断匹配中断清匹配中断标志

23、输出低电平清溢出中断标志输出高电平五、 实验程序:1. 将PCA模块中的CEX0引脚配置在P0.0,实现8位PWM控制直流电机的运行。/程序说明:此程序实现PCA的8位PWM输出,输出脚配置在P0.0脚。#include /*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口

24、*/ PCA_Init ();/*PCA初始化成8位脉宽调置方式*/ 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 = 0x01;/*PCA定时器/计数器溢出中断禁止*/PCA0L = 0x00;PCA0H = 0x00;PCA0CPM0 = 0x4b;/*8位PWM方式,当CCF0=1时,允许辅

25、捉/比较标志的中断申请*/PCA0CPL0 = 0x00;/*置初值*/PCA0CPH0 = 0xf0;PCA0CN = 0x40;/*允许PCA定时器/计数器*/*PCA中断子程序*/void PCA_ISR (void) interrupt 9CF = 0;/*清溢出中断标志*/CCF0 = 0;/*清匹配中断标志*/PCA0L = 0x00;/PCA0H = 0x40; 2. 实现16位PWM控制直流电机的运行/程序说明:此程序实现PCA的16位PWM输出,输出脚配置在P0.0脚。#include /*SFR定义*/-/ Function PROTOTYPES/-void PORT_Init (void)

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号