1、单片机与PLC技术实验报告一、简述实验内容1.8位LED输出:准备工作:用短接线将实验箱上的P4.0P4.7与LD1LD8接线端子短接。A.利用定时器3作定时(系统主频2MHz,定时间隔要求0.3秒),用C8051F020的P4口作输出控制发光二极管LD1LD8。让发光二极管LD1LD8依次点亮(同一时刻只有一个发光二极管发光)。其中LD1最先点亮发光,LD8最后点亮,LD1再点亮,然后重复。2.8路拨档开关输入准备工作:闭合开关K11A.编写程序,读入开关K1K8的状态。B.编写程序,读入开关K1K8的状态,取反后通过发光二极管LD1LD8输出。2、试分析8位LED输出电路图的原理。答:发光
2、二极管LD1LD8正极均通过200电阻接+3V电源,负极接实验箱上的P4.0P4.7。当P4.0P4.7输出高电平时,发光二极管截止不发光,当P4.0P4.7中有输出低电平的时,该端口对应的发光二极管导通,发光。由此可以通过控制P4.0P4.7输出电平控制灯的点亮与熄灭,可通过设一个低电平再通过移位的方法实现发光二极管LD1LD8依次点亮的效果。3、写出8位LED输出实验的以及子程序的流程图。8位LED输出实验的以及子程序的流程图在实验报告上4、写出8位LEDC语言源程序(要求有注释)#include / 16位特殊寄存器定义sfr16 TMR3RL = 0x92; sfr16 TMR3 =
3、0x94; / 常量定义#define SYSCLK 2000000 /系统工作频率/全局变量定义 unsigned char i=0xfe;/ 函数定义void PORT_Init (void);void Timer3_Init (int counts);void Timer3_ISR (void);/ 主程序void main (void) WDTCN = 0xde; WDTCN = 0xad; /禁止看门狗定时器 PORT_Init (); Timer3_Init(SYSCLK * 1024 ); REF0CN=0x02; EA = 1; while (1) /-/函数名称: PORT_
4、Init ()/函数功能: 通用I/O口及交叉开关初始化/入口参数: 无/出口参数: 无/全局变量引用: 无/调用模块: 无/-void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关*/ P74OUT |= 0x11; /*推挽输出*/-/函数名称: Timer3_Init ()/函数功能: 定时器3初始化/入口参数: int counts/出口参数: 无/全局变量引用: 无/调用模块: 无/-void Timer3_Init (int counts) TMR3CN = 0x00; TMR3RL = -counts; TMR3 = 0xffff; EIE2 |=
5、 0x01; TMR3CN |= 0x04; /-/函数名称: Timer3_ISR ()/函数功能: 定时器3中断服务程序/入口参数: 无/出口参数: 无/全局变量引用: 无/调用模块: 无/-void Timer3_ISR (void) interrupt 14 TMR3CN &= (0x80); /*清中断标志*/ P4=i; /*送数据到P4*/ i=1; i = i | 0x01; if(i=0xff) i=0xfe;5、试分析8路拨档开关输入电路图的原理。答:将K1K8分别与P5.0P5.7相连,当K1K8中有开关按下时,其对应P5.0P5.7端口为低电平。由此可见,将P5.0P5
6、.7通过程序赋给P4.0P4.7,即可实现用8路拨档开关控制8个灯的开关。6、写出8路拨档开关输入的程序流程图,以及C语言源程序(要求有注释)#include / 16位特殊寄存器定义sfr16 TMR3RL = 0x92; sfr16 TMR3 = 0x94; / 常量定义#define SYSCLK 2000000 /系统工作频率/全局变量定义 unsigned char i=0xfe;/ 主程序void main (void) WDTCN = 0xde; WDTCN = 0xad; /禁止看门狗定时器 P4=P5; 8路拨档开关输入的程序流程图在实验报告上1、简述实验内容1.准备工作教学
7、实验机的步进电机驱动信号是STEPASTEPD,本例程用P5.0P5.3来控制步进电机的4个线圈处于通电或断电状态,所以在运行历程前,用跳线将STEPASTEPD分别同P5.0P5.3连接。2.步进电机正转编制程序控制步进电机实现正功能3.步进电机反转编制程序控制步进电机实现反功能4.步进电机定速运行编制程序使步进电机以每分钟30圈的速度正转2、写出实验中,步进电机正反转,以及恒速运行的程序流程图,以及C语言源程序。1.步进电机正反转/程序说明: 此程序通过I/O口驱动步进电机,实现步进电机正反转/P50-STEPA P51-STEPB P52-STEPC P53-STEPD#include
8、/ SFR declarations#include 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 char k; u
9、nsigned char SendData; WDTCN = 0xde; /*无效看门狗*/ WDTCN = 0xad; PORT_Init (); SendData=0xff; /*4相线圈都截止*/ while(1) /*步进电机正转*/ for(k=0;k10;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
10、); 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
11、); 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;k10;k+) SendData=0x06; P5=SendData; sleep_ms(250); sleep_ms(250); SendData=0x03; P5
12、=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); /*函数名称: void PORT_Init(void)功能描述: 初始化I/O输入: 无输出: 无全局变量: XBR2,P74OUT调用模块: 无*/void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /
13、*P5低4位为推挽输出,其余口为开漏输出*/2.步进电机恒速运行/程序说明: 此程序通过I/O口驱动步进电机,实现步进电机以每分钟30圈的速度正转/P50-STEPA P51-STEPB P52-STEPC P53-STEPD#include / SFR declarations#include void PORT_Init (void);/*函数名称: void sleep_ms(WORD count)功能描述: 延时输入: WORD count(所要延时的长度)输出: 无全局变量: 无调用模块: _nop_()*/void sleep_ms(unsigned char count) uns
14、igned 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) /*步进电机正转*/ for(k=0;k10;k+) SendData=0x0e; /*A相通电*/ P5=SendData; sle
15、ep_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相通电*
16、/ 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); /*函数
17、名称: void PORT_Init(void)功能描述: 初始化I/O输入: 无输出: 无全局变量: XBR2,P74OUT调用模块: 无*/void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/流程图在实验报告上1、简述实验内容准备工作:将P1.0用短接线连接到实验箱上的PWM点。1.编制程序将PCA模块中的CEX0引脚配置在P1.02.编制程序实现8位PWM控制直流电机的运行,试改变8位PWM信号的占空比,观察电机转速的变化。3.编制程序实现16位PWM控制直流电机
18、的运行,试改变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控制直流电机的运行/程序说明: 此程
19、序实现PCA的8位PWM输出,输出脚配置在P1.2脚。#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口*/ PCA_Init (); /*PCA初始化成16位脉宽调置方式*/ EA = 1; /*开总中断*/ while (1) void PORT_
20、Init (void) XBR0 = 0x0f; /*CEX0-P1.2*/ XBR2 = 0x44; /*使能交叉开关和弱上拉*/void PCA_Init (void) EIE1 = 0x08; PCA0L = 0x00; PCA0CPM0 = 0x4b; /*8位PWM方式,当CCF0=1时,允许辅捉/比较标志的中断申请*/ PCA0CPL0 = 0x00; /*置初值*/ PCA0CPH0 = 0x80; PCA0CN = 0x40; /*允许PCA定时器/计数器*/*PCA中断子程序*/void PCA_ISR (void) interrupt 9 CF = 0; /*清溢出中断标志
21、*/ CCF0 = 0; /*清匹配中断标志*/2.16位PWM控制直流电机的运行/程序说明: 此程序实现PCA的16位PWM输出,输出脚配置在P1.2脚。#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口*/ PCA_Init (); /*PCA初始
22、化成16位脉宽调置方式*/ EA = 1; /*开总中断*/ while (1) void PORT_Init (void) XBR0 = 0x0f; /*CEX0-P1.2*/ XBR2 = 0x44; /*使能交叉开关和弱上拉*/void PCA_Init (void) EIE1 = 0x08; PCA0L = 0x00; PCA0H = 0x00; PCA0CPM0 = 0xcb; /*16位PWM方式,当CCF0=1时,允许辅捉/比较标志的中断申请*/ PCA0CPL0 = 0x00; /*置初值*/ PCA0CPH0 = 0x80; PCA0CN = 0x40; /*允许PCA定时器/计数器*/*PCA中断子程序*/void PCA_ISR (void) interrupt 9 CF = 0; /*清溢出中断标志*/ CCF0 = 0; /*清匹配中断标志*/流程图在实验报告上实验1 PLC实现启动、保持和停止功能(1)将输入端X0,X1接至开关0,开关1,编制程序实
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1