单片机与PLC技术实验报告.docx

上传人:b****8 文档编号:10156839 上传时间:2023-02-08 格式:DOCX 页数:21 大小:39.19KB
下载 相关 举报
单片机与PLC技术实验报告.docx_第1页
第1页 / 共21页
单片机与PLC技术实验报告.docx_第2页
第2页 / 共21页
单片机与PLC技术实验报告.docx_第3页
第3页 / 共21页
单片机与PLC技术实验报告.docx_第4页
第4页 / 共21页
单片机与PLC技术实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机与PLC技术实验报告.docx

《单片机与PLC技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机与PLC技术实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

单片机与PLC技术实验报告.docx

单片机与PLC技术实验报告

一、简述实验内容

1.8位LED输出:

准备工作:

用短接线将实验箱上的P4.0~P4.7与LD1~LD8接线端子短接。

A.利用定时器3作定时(系统主频2MHz,定时间隔要求0.3秒),用C8051F020的P4口作输出控制发光二极管LD1~LD8。

让发光二极管LD1~LD8依次点亮(同一时刻只有一个发光二极管发光)。

其中LD1最先点亮发光,LD8最后点亮,LD1再点亮,然后重复。

2.8路拨档开关输入

准备工作:

闭合开关K11

A.编写程序,读入开关K1~K8的状态。

B.编写程序,读入开关K1~K8的状态,取反后通过发光二极管LD1~LD8输出。

2、试分析8位LED输出电路图的原理。

答:

发光二极管LD1~LD8正极均通过200Ω电阻接+3V电源,负极接实验箱上的P4.0~P4.7。

当P4.0~P4.7输出高电平时,发光二极管截止不发光,当P4.0~P4.7中有输出低电平的时,该端口对应的发光二极管导通,发光。

由此可以通过控制P4.0~P4.7输出电平控制灯的点亮与熄灭,可通过设一个低电平再通过移位的方法实现发光二极管LD1~LD8依次点亮的效果。

3、写出8位LED输出实验的以及子程序的流程图。

8位LED输出实验的以及子程序的流程图在实验报告上

4、写出8位LEDC语言源程序(要求有注释)

#include

//16位特殊寄存器定义

sfr16TMR3RL=0x92;

sfr16TMR3=0x94;

//常量定义

#defineSYSCLK2000000//系统工作频率

//全局变量定义

unsignedchari=0xfe;

//函数定义

voidPORT_Init(void);

voidTimer3_Init(intcounts);

voidTimer3_ISR(void);

//主程序

voidmain(void){

WDTCN=0xde;

WDTCN=0xad;//禁止看门狗定时器

PORT_Init();

Timer3_Init(SYSCLK*1024);

REF0CN=0x02;

EA=1;

while

(1){

}

}

//-------------------------------------------------------------------------

//函数名称:

PORT_Init()

//函数功能:

通用I/O口及交叉开关初始化

//入口参数:

//出口参数:

//全局变量引用:

//调用模块:

//----------------------------------------------------------------------

voidPORT_Init(void)

{

XBR2=0x40;/*使能交叉开关*/

P74OUT|=0x11;/*推挽输出*/

}

//--------------------------------------------------------------------

//函数名称:

Timer3_Init()

//函数功能:

定时器3初始化

//入口参数:

intcounts

//出口参数:

//全局变量引用:

//调用模块:

//----------------------------------------------------------------------

voidTimer3_Init(intcounts)

{

TMR3CN=0x00;

TMR3RL=-counts;

TMR3=0xffff;

EIE2|=0x01;

TMR3CN|=0x04;

}

//-------------------------------------------------------------------

//函数名称:

Timer3_ISR()

//函数功能:

定时器3中断服务程序

//入口参数:

//出口参数:

//全局变量引用:

//调用模块:

//-------------------------------------------------------------------

voidTimer3_ISR(void)interrupt14

{

TMR3CN&=~(0x80);/*清中断标志*/

P4=i;/*送数据到P4*/

i<<=1;

i=i|0x01;

if(i==0xff)

i=0xfe;

}

5、试分析8路拨档开关输入电路图的原理。

答:

将K1~K8分别与P5.0~P5.7相连,当K1~K8中有开关按下时,其对应P5.0~P5.7端口为低电平。

由此可见,将P5.0~P5.7通过程序赋给P4.0~P4.7,即可实现用8路拨档开关控制8个灯的开关。

6、写出8路拨档开关输入的程序流程图,以及C语言源程序(要求有注释)

#include

//16位特殊寄存器定义

sfr16TMR3RL=0x92;

sfr16TMR3=0x94;

//常量定义

#defineSYSCLK2000000//系统工作频率

//全局变量定义

unsignedchari=0xfe;

//主程序

voidmain(void){

WDTCN=0xde;

WDTCN=0xad;//禁止看门狗定时器

P4=P5;

}

}

8路拨档开关输入的程序流程图在实验报告上

1、简述实验内容

1.准备工作

教学实验机的步进电机驱动信号是STEPA~STEPD,本例程用P5.0~P5.3来控制步进电机的4个线圈处于通电或断电状态,所以在运行历程前,用跳线将STEPA~STEPD分别同P5.0~P5.3连接。

2.步进电机正转

编制程序控制步进电机实现正功能

3.步进电机反转

编制程序控制步进电机实现反功能

4.步进电机定速运行

编制程序使步进电机以每分钟30圈的速度正转

2、写出实验中,步进电机正反转,以及恒速运行的程序流程图,以及C语言源程序。

1.步进电机正反转

//程序说明:

此程序通过I/O口驱动步进电机,实现步进电机正反转

//P50--STEPAP51--STEPBP52--STEPCP53--STEPD

#include//SFRdeclarations

#include

voidPORT_Init(void);

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

函数名称:

voidsleep_ms(WORDcount)

功能描述:

延时

输入:

WORDcount(所要延时的长度)

输出:

全局变量:

调用模块:

_nop_()

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

voidsleep_ms(unsignedcharcount)

{

unsignedcharii,jj;

for(ii=0;ii

{

for(jj=0;jj<250;jj++)

_nop_();

}

}

//------------------------------------------------------------------------------------

//MAINRoutine

//------------------------------------------------------------------------------------

voidmain(void){

unsignedchark;

unsignedcharSendData;

WDTCN=0xde;/*无效看门狗*/

WDTCN=0xad;

PORT_Init();

SendData=0xff;/*4相线圈都截止*/

while

(1)

{

/*步进电机正转*/

for(k=0;k<10;k++){

SendData=0x0e;/*A相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x0c;/*AB相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x0d;/*B相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x09;/*BC相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x0b;/*C相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x03;/*CD相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x07;/*D相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

SendData=0x06;/*DA相通电*/

P5=SendData;

sleep_ms(250);

sleep_ms(250);

sleep_ms(250);

}

/*步进电机反转*/

for(k=0;k<10;k++){

SendData=0x06;

P5=SendData;

sleep_ms(250);

sleep_ms(250);

SendData=0x03;

P5=SendData;

sleep_ms(250);

sleep_ms(250);

SendData=0x09;

P5=SendData;

sleep_ms(250);

sleep_ms(250);

SendData=0x0c;

P5=SendData;

sleep_ms(250);

sleep_ms(250);

}

}

}

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

函数名称:

voidPORT_Init(void)

功能描述:

初始化I/O

输入:

输出:

全局变量:

XBR2,P74OUT

调用模块:

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

voidPORT_Init(void)

{

XBR2=0x40;/*使能交叉开关和弱上拉*/

P74OUT|=0x0f;/*P5低4位为推挽输出,其余口为开漏输出*/

}

2.步进电机恒速运行

//程序说明:

此程序通过I/O口驱动步进电机,实现步进电机以每分钟30圈的速度正转

//P50--STEPAP51--STEPBP52--STEPCP53--STEPD

#include//SFRdeclarations

#include

voidPORT_Init(void);

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

函数名称:

voidsleep_ms(WORDcount)

功能描述:

延时

输入:

WORDcount(所要延时的长度)

输出:

全局变量:

调用模块:

_nop_()

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

voidsleep_ms(unsignedcharcount)

{

unsignedcharii,jj;

for(ii=0;ii

{

for(jj=0;jj<250;jj++)

_nop_();

}

}

//------------------------------------------------------------------------------------

//MAINRoutine

//------------------------------------------------------------------------------------

voidmain(void){

unsignedchark;

unsignedcharSendData;

WDTCN=0xde;/*无效看门狗*/

WDTCN=0xad;

PORT_Init();

SendData=0xff;/*4相线圈都截止*/

while

(1)

{

/*步进电机正转*/

for(k=0;k<10;k++){

SendData=0x0e;/*A相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x0c;/*AB相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x0d;/*B相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x09;/*BC相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x0b;/*C相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x03;/*CD相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x07;/*D相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

SendData=0x06;/*DA相通电*/

P5=SendData;

sleep_ms(25);

sleep_ms(25);

sleep_ms(25);

}

}

}

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

函数名称:

voidPORT_Init(void)

功能描述:

初始化I/O

输入:

输出:

全局变量:

XBR2,P74OUT

调用模块:

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

voidPORT_Init(void)

{

XBR2=0x40;/*使能交叉开关和弱上拉*/

P74OUT|=0x0f;/*P5低4位为推挽输出,其余口为开漏输出*/

}

流程图在实验报告上

1、简述实验内容

准备工作:

将P1.0用短接线连接到实验箱上的PWM点。

1.编制程序将PCA模块中的CEX0引脚配置在P1.0

2.编制程序实现8位PWM控制直流电机的运行,试改变8位PWM信号的占空比,观察电机转速的变化。

3.编制程序实现16位PWM控制直流电机的运行,试改变16位PWM信号的占空比,观察电机转速的变化。

2、说明PCA模块的交叉开关引脚分配。

题目中要求将PCA模块中的CEX0引脚配置在P1.0,但实际操作时没有配置成功,最终将PCA模块中的CEX0引脚配置在P1.2。

具体引脚分配:

P0.0被分配给TX0,P0.1被分配给RX0,P0.2被分配给SCK,P0.3被分配给MISO,P0.4被分配给MOSI,P0.5被分配给NSS,P0.6被分配给SDA,P0.7被分配给SCL,P1.0被分配给TX1,P1.1被分配给RX1,P1.2被分配给CEX0。

3、写出程序的流程图,以及C语言源程序。

1.8位PWM控制直流电机的运行

//程序说明:

此程序实现PCA的8位PWM输出,输出脚配置在P1.2脚。

#include/*SFR定义*/

//------------------------------------------------------------------------------------

//FunctionPROTOTYPES

//------------------------------------------------------------------------------------

voidPORT_Init(void);

voidPCA_Init(void);

voidPCA_ISR(void);

//------------------------------------------------------------------------------------

//MAINRoutine

//------------------------------------------------------------------------------------

voidmain(void){

WDTCN=0xde;

WDTCN=0xad;/*关看门狗*/

PORT_Init();/*初始化IO口*/

PCA_Init();/*PCA初始化成16位脉宽调置方式*/

EA=1;/*开总中断*/

while

(1){

}

}

voidPORT_Init(void)

{

XBR0=0x0f;/*CEX0-->P1.2*/

XBR2=0x44;/*使能交叉开关和弱上拉*/

}

voidPCA_Init(void)

{

EIE1=0x08;

PCA0L=0x00;

PCA0CPM0=0x4b;/*8位PWM方式,当CCF0=1时,允许辅捉/比较标志的中断申请*/

PCA0CPL0=0x00;/*置初值*/

PCA0CPH0=0x80;

PCA0CN=0x40;/*允许PCA定时器/计数器*/

}

/*PCA中断子程序*/

voidPCA_ISR(void)interrupt9

{

CF=0;/*清溢出中断标志*/

CCF0=0;/*清匹配中断标志*/

}

2.16位PWM控制直流电机的运行

//程序说明:

此程序实现PCA的16位PWM输出,输出脚配置在P1.2脚。

#include/*SFR定义*/

//------------------------------------------------------------------------------------

//FunctionPROTOTYPES

//------------------------------------------------------------------------------------

voidPORT_Init(void);

voidPCA_Init(void);

voidPCA_ISR(void);

//------------------------------------------------------------------------------------

//MAINRoutine

//------------------------------------------------------------------------------------

voidmain(void){

WDTCN=0xde;

WDTCN=0xad;/*关看门狗*/

PORT_Init();/*初始化IO口*/

PCA_Init();/*PCA初始化成16位脉宽调置方式*/

EA=1;/*开总中断*/

while

(1){

}

}

voidPORT_Init(void)

{

XBR0=0x0f;/*CEX0-->P1.2*/

XBR2=0x44;/*使能交叉开关和弱上拉*/

}

voidPCA_Init(void)

{

EIE1=0x08;

PCA0L=0x00;

PCA0H=0x00;

PCA0CPM0=0xcb;/*16位PWM方式,当CCF0=1时,允许辅捉/比较标志的中断申请*/

PCA0CPL0=0x00;/*置初值*/

PCA0CPH0=0x80;

PCA0CN=0x40;/*允许PCA定时器/计数器*/

}

/*PCA中断子程序*/

voidPCA_ISR(void)interrupt9

{

CF=0;/*清溢出中断标志*/

CCF0=0;/*清匹配中断标志*/

}

流程图在实验报告上

实验1PLC实现启动、保持和停止功能

(1)将输入端X0,X1接至开关0,开关1,编制程序实

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

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1