当前位置:文档之家› 51控制字详解

51控制字详解

51控制字详解
51控制字详解

TMOD:工作方式控制寄存器

寄存器地址89H,不可位寻址。

位序B7 B6 B5 B4 B3 B2 B1 B0

位符号GATE C/T M1 M0 GATE C/T M1 M0

GATE——门控位

当=0时,以TR0(或TR1)状态决定定时器/计数器的启动或禁止

当=1时,以TR0与INT0(或TR1与INT1)状态决定定时器/计数器的启动或禁止

C/T=0 定时/计数工作方式选择位0为定时器1为计数器。

M1,M0——工作方式选择位

M1M0=00 方式0:是13位计数结构的工作方式,其计数器由TH全部8位和TL的低5位构成。

M1M0=01 方式1:是16位计数结构的工作方式,计数器由TH全部8位和TL全部8位构成。

M1M0=10 方式2:自动装入8位计数器。

M1M0=11 方式3:定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以计数使用,又可以定时使用,定时器/计数器0的各控制位和引脚信号全归它使用。

T2MOD:工作方式控制寄存器

寄存器地址0C9H,不可位寻址

------T2OE DCEN

T2OE:定时器2输出允许位,当=1时,P1.0/T2引脚输出连续脉冲信号

DCEN:当=1时,T2配置成向上向下计数器

P3口的代替功能

寄存器地址B0H,位寻址B7H~B0H。

引脚P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

代替功能RXD TXD /INT0 /INT1 T0 T1 /WR /RD

TCON:定时器控制寄存器

寄存器地址88H,位寻址8FH~88H。

位地址8F 8E 8D 8C 8B 8A 89 88

位符号TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。

TR0(TR1)——定时器运行控制位

当TR0(TR1)=0 停止定时器/计数器工作

当TR0(TR1)=1 启动定时器/计数器工作

IE0(IE1)——外中断请求标志位

当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。

IT0(IT1)——外中断请求信号方式控制位

当IT0(IT1)=1 脉冲方式(后沿负跳有效)

当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。

TF0(TF1)——计数溢出标志位

当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。

寄存器地址0C8H,位寻址0C8H~0CFH。

位地址CF CE CD CC CB CA C9 C8

位符号TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2

TF2:T2溢出标记

当T2溢出时TF2=1,TD2只能用软件清除

当RCLK=1或TCLK=1时,TF2将不置位

EXF2:T2外部标记

当EXEN2=1时,T2EX/P1.1引脚上的负跳变引起T2的捕捉/重装操作,此时EXF2=1。在T2中断允许时,EXF2=1将引起中断,EXF2只能用软件清除。在T2的向上、向下计数模式下(DCEN=1)EXF2的置位将不引起中断。

RCLK:接收时钟允许

当RCLK=1时,T2的溢出脉冲可用作串行口的接收时钟信号,适于串行口模式1、3当RCLK=0时,T1的溢出脉冲用作串行口接收时钟信号

TCLK:发送时钟允许

EXEN2:T2外部事件(引起捕捉/重装的外部信号)允许

当EXEN2=1时,如果T2没有作串行时钟输出(即RCLK+TCLK=0),则在T2EX/P1.1引脚跳变将引起T2的捕捉/重装操作;

当EXEN2=0时,在T2EX引脚的负跳变将不起作用

TR2:T2的启动/停止控制

C/T2:计数定时

CP/RL2:捕捉/重装选择

当CP/RL2=1且EXEN2=1时,T2EX/P1.1引脚的负跳变将引起捕捉操作

当CP/RL2=0且EXEN2=1时,T2EX/P1.1引脚的负跳变将引起重装操作

当CP/RL2=0且EXEN2=0时,T2的溢出将引起T2的自动重装操作

当RCLK+TCLK=1时,CP/RL2控制位不起作用,T2被强制工作于重装方式。重装方式发生于T2溢出时,常用来作波特率发生器。

寄存器地址98H,位寻址9FH~98H。

位地址9F 9E 9D 9C 9B 9A 99 98

位符号SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0、SM1:串行口工作方式选择位

SM2:多机通信控制位

REN:允许/禁止串行口接收的控制位

TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。RB8:在方式2和方式3中,是被接收的第9位数据(来自第TB8位);在方式1中,RB8收到的是停止位,在方式0中不用。

TI——串行口发送中断请求标志位

当发送完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。

RI——串行口接收中断请求标志位

当接收完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。

PSW:程序状态字

寄存器地址D0H,位寻址D7H~D0H。

位地址D7 D6 D5 D4 D3 D2 D1 D0

位符号CY AC F0 RS1 RS0 OV - P

CY——进位标记

AC——半进位标记

F0——用户设定标记

RS1、RS0——4个工作寄存器区的选择位。

VO——溢出标记

P——奇偶校验标记

PCON:电源控制器及波特率选择寄存器

字节地址=87H,不可位寻址

SMOD - - POF GF1 GF0 PD IDL

SMOD——波特率倍增位

GF1、GF0——用户通用标记

PD——掉电方式控制位,PD=1时进入掉电模式

IDL——空闲方式控制位,IDL=1时进入空闲方式

在AT89S51中PCON.4是电源断电标记位POF,上电是为1

AUXR:辅助寄存器

字节地址=8EH,不可位寻址

- - DISALE

-- - WDIDLE DISRT

O

WDIDLE:WTD在空闲模式下的禁止/允许位

当WDIDLE=0时,WDT在空闲模式下继续计数

当WDIDLE=1时,WDT在空闲模式下暂停计数

DISRTO:禁止/允许WDT溢出时的复位输出

当DISRTO=0时,WDT定时器溢出时,在RST引脚输出一个高电平脉冲

当DISRT0=1时,RST引脚为输入脚

DISALE :ALE禁止/允许位

当DISALE=0时,ALE有效,发出恒定频率脉冲

当DISALE=1时,ALE仅在CPU执行MOVC和MOVX类指令时有效,不访问外寄存器时,ALE不输出脉冲信号AUXR1:辅助寄存器1

字节地址=A2H,不可位寻址

-- - --- - DPS

DPS:数据指针寄存器选择位

当DPS=0时,选择数据指针寄存器DPRT0

当DPS=1时,选择数据指针寄存器DPRT

IE:中断允许控制寄存器

寄存器地址A8H,位寻址AFH~A8H。

位地址AF AE AD AC AB AA A9 A8 位符号EA / ET2 ES ET1 EX1 ET0 EX0

EA:中断允许总控制位

当EA=0时,中断总禁止。

当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。

EX0(EX1):外部中断允许控制位

当EX0(EX1)=0 禁止外中断

当EX0(EX1)=1 允许外中断

ET0(EX1):定时/计数中断允许控制位

当ET0(ET1)=0 禁止定时(或计数)中断

当ET0(ET1)=1 允许定时(或计数)中断

ET2:定时器2中断允许控制位,在AT89S52、AT89C52中

ES:串行中断允许控制位

当ES=0 禁止串行中断

当ES=1 允许串行中断

IP:中断优先级控制寄存器

寄存器地址B8H,位寻址BFH~B8H。

位地址BF BE BD BC BB BA B9 B8 位符号/ / PT2 PS PT1 PX1 PT0 PX0

PX0——外部中断0优先级设定位

PT0——定时中断0优先级设定位

PX1——外部中断1优先级设定位

PT1——定时中断1优先级设定位

PS——串口中断优先级设定位

PT2——定时器2优先级设定位

51单片机超高精度6路舵机控制程序

51单片机超高精度6路舵机控制程序 #include //包含单片机寄存器的头文件 #define uchar unsigned char #define uint unsigned int P0M1=0X00; P0M0=0XFF;//设置P0 为强推挽输出 sbit servo0=P0^0; sbit servo1=P0^1; sbit servo2=P0^2; sbit servo3=P0^3; sbit servo4=P0^4; sbit servo5=P0^5; sbit servo6=P0^6; sbit servo7=P0^7; uchar serVal[2]; uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382) uchar pwm_flag=0; uint code ms0_5Con=461; //0.5ms计数(实际是460.8,取整得461) uint code ms2_5Con=2304; //2.5ms计数 /******************************************************************** * 功能: 串口初始化,晶振11.0592,波特率9600,使能了串口中断 ***********************************************************************/ void Com_Init() { TMOD |= 0x20; //用定时器设置串口波特率 TH1=0xFD; //256-11059200/(32*12*9600)=253 (FD) TL1=0xFD;//同上 TR1=1;//定时器1开关打开 REN=1; //开启允许串行接收位 SM0=0;//串口方式,8位数据 SM1=1;//同上 EA=1; //开启总中断 ES=1; //串行口中断允许位 } /******************************************************************** * 功能: 舵机PWM中断初始化 ***********************************************************************/ void Timer0Init()

java中常用关键字总结

Java中的关键字总结 final 关键字 1、用final修饰的类不能被继承,没有子类; 2、用final修饰的方法,方法不能被重写; 3、用final修饰变量,变量的值不能被修改,表示常量,(书写规范:全部字母都要大写;多个单词,可以使用下划线(_)分开;) 注意:如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错;如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错; 4、final用于成员变量表示该成员变量为常量,不能被修改,必须在变量定义时赋值。 5、final用于局部变量表示该局部变量为常量,不能被修改,可以在变量定义时赋值,也可以先定义变量后赋值。 什么时候用final关键字? 有的时候不想别人重写我的方法就使用final关键字修饰该方法; static关键字 1、static用于成员变量表示该变量只有一份,也就是说静态成员变量属于类而不属于某个具体的类实例对象,所有的类实例对象共享这个静态成员变量;静态函数是不需要对象的,直接可以使用类名来调用; 2、非静态函数可以调用静态函数;静态函数不能调用非静态函数(非静态函数都是通过对象调用的);静态函数不能使用非静态成员变量,但可以使用静态成员变量; 3、静态函数调用时不需要对象的,所以不能使用和对象有关的关键字;(this;super;) 4、构造函数不能使用static修饰(构造函数是创建对象,开辟空间,给所有成员变量赋默认值之后,有JVM调用进栈,用来给对象的成员变量赋初始值的) static用于类,这里指的是内部类,那么在别的地方就可以通过外部类名来引用这个静态的内部类。 5、static还可以用于类的代码块,叫做静态代码块,静态代码块在类加载的时候就执行完毕,而类只加载一次;是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先

51红外循迹小车报告(舵机版)最终版

简易教程

前言 往届全国大学生电子设计竞赛曾多次出现了集光、机、电于一体的简易智能小车题目,此次,笔者在通过多次论证、比较与实验之后,制作出了简易小车的寻迹电路系统。 整个系统基于普通玩具小车的机械结构,利用小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。系统分为检测、控制、驱动三个模块。首先利用光电对接收管和路面信号进行检测,然后经过比较器处理,对软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。 智能小车能在画有黑线的白纸“路面”上行驶,这是由于黑线和白纸对光线的反射系数不同,小车可根据接收到的反射光的强弱来判断“道路”---黑线,最终实现简单的循迹运动。 个人水平有限,有错误不足之处,还望各位前辈同学多多包含,指出修正,完善。谢谢! 李学云王维 2016年7月27号

目录 前言 (1) 第一部分硬件设计 (1) 1.1 车模选择 (1) 1.2传感器选择 (1) 1.3 控制模块选择 (2) 第二部分软件设计及调试 (3) 2.1 开发环境 (3) 2.2总体框架 (3) 2.3 舵机程序设计与调试 (3) 2.3.1 程序设计 (3) 2.3.2 调试 (3) 2.3.3 程序代码 (4) 2.4 传感器调试 (5) 2.4.1 传感器好坏的检测 (5) 2.4.2 单片机能否识别信号并输出信号 (5) 2.5 综合调试 (7) 附录1 (9) 第一篇舵机(舵机及转向控制原理) (9) 1.1概述 (9) 1.2舵机的组成 (10) 1.3舵机工作原理 (11) 1.4舵机使用中应注意的事项 (12) 1.5如何利用程序实现转向 (12) 1.6舵机测试程序 (13) 附录2 (14) 第二篇光电红外传感器 (14) 2.1传感器的原理 (14) 2.2红外光电传感器ST188 结构图 (15) 2.3传感器的选择 (15) 2.4传感器的安装 (16) 2.5使用方法 (16) 2.7红外传感器输入输出调试程序 (17)

JavaScript流程控制语句

第5章流程控制语句 JavaScript程序是由若干个语句组成的,每一个语句以分号作为结束符。语句可以很简单,也可以很复杂。其中,改变程序正常流程的语句称为控制语句。流程控制语句是用来控制程序中各语句执行顺序的语句,是程序中基本却又非常关键的部分。流程控制语句可以把单个语句组合成有意义的、能完成一定功能的小逻辑模块。本章内容包括: ?顺序控制语句; ?选择控制语句; ?循环控制语句; ?其他流程控制语句。 通过本章学习,读者应该对几种流程控制语句有很深的理解,并可以利用这几种流程控制语句编写简单的程序。 5.1 顺序控制语句 JavaScript语言中,顺序控制语句是最简单的语句。其有如下特点:所有语句按照一定的顺序执行,每一条语句只执行一遍,不重复执行,也没有语句不执行。JavaScript语言中的顺序控制语句包括表达式语句,函数调用语句,空语句和复合语句等。 5.1.1 表达式语句 表达式后面跟一个分号就构成了一个表达式语句。最常见的表达式语句为赋值语句。赋值语句是在一个赋值表达式后跟一个分号形成的,程序中很多计算都由赋值语句完成。 【示例5-1】演示几个表达式语句。其代码如下所示。 var m=4; //把4赋给变量m var n=”hello world”; //把字符串hello world赋值给n i=m+n; //把变量m和n的和赋值给变量i 实际上,任何表达式都可以加上分号而成为语句。 【示例5-2】变量i自增1。 i++; //变量i的值加1 注意:有些语句写法虽然是合法的,但是由于其没有保留计算结果,因而并没有实际意义。如以下代码: a-b; i++-1;

51单片机程序:按键控制舵机角度

#include "reg52.h" unsigned char count; //0.5ms次数标识 sbit pwm =P2^7 ; //PWM信号输出 sbit jia =P2^4; //角度增加按键检测IO口 sbit jan =P2^5; //角度减少按键检测IO口 unsigned char jd=5; //角度标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(jia==0) //确实按下 { jd++; //角度标识加1 count=0; //按键按下则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 while(jia==0); //等待按键放开

程序流程控制语句

程序流程控制语句:选择语句 https://www.doczj.com/doc/f34836954.html,网站制作 2011年9月1日 Java语言中的程序流程控制语句有三种:顺序结构、选择结构和循环结构。其中顺序结构最简单,程序依次执行各条语句。Java的每条语句一般以分号(“;”)作为结束标志。所以本章重点讲解选择结构和循环结构。 1、选择语句 在程序设计时,经常需要使用选择结构在程序中完成逻辑判断和选择功能,这就需要使用到选择语句。Java中的选择语句包括if语句、if-else语句和switch语句。选择语句用来控制选择结构,对选择条件进行判断,并根据判断结果选择要执行的程序语句,改变程序执行流程。 2、if选择语句 在实际生活中,经常会需要做一些逻辑判断,并根据逻辑判断结果做出选择。例如,当一个男孩子向一个非常理智的女孩子求婚时,这个女孩子思考的逻辑可能是这样的: 如果你有100万 那么,我就嫁给你!

在这里,女孩子嫁给男孩子这个过程的实施,必须以“你有一百万”为前提。只有逻辑判断“你有一百万”这一前提条件为真时,“那么,我就嫁给你!”这个行为才能得到执行。在生活当中,类似这样的情形是很常见的。 相应地,在Java程序设计语言中,也有相应的条件语句来完成类似的逻辑判断和有选择地执行这样的功能,这就是if语句。if语句的语法格式如下: if(条件表达式) 语句 或者 if(条件表达式){ 一条或多条语句 } if语句执行的过程如下: 1.对if后面括号里的条件表达式进行判断。 2.如果条件表达式的值为true,就执行表达式后面的语 句或后面大括号里的多条语句。 3.如果条件表达式的值为false,则跳过if语句,执行 下一条语句。

java中的关键字的含义及介绍

Java中的键字? 才发现Java中的好多关键字都不知道什么意思,特转一遍过来。 Java保留关键字 Java语言有51个关键字,其中const和goto虽然被保留但未使用。你不能使用保留关键字来命名类、方法或变量。 一、保留关键字 1、数据类型: Boolean int long short byte float double char class interface 2、流程控制: if else do while for switch case default break continue return try catch finally 3、修饰符: public protected private final void static strictfp abstract transient synchronized volatile native 4、动作: package import throw throws extends implements this Super instanceof new 5、保留字: true false null goto const 二、访问修饰符: 访问修饰符:public , protected , private * 只能应用于类的成员变量。(局部变量只能在函数的范围内可见,不能使用访问修饰符) * 能够用来修饰类本身。(protected , private 不能用于顶级类,只能用于内部类) * 能够应用于成员方法和构造函数。 下面是一个例子: package Examples; public class HelloWorld02{ //以下定义了三个了类成员变量 public String str1="Hello"; //可被你程序中的任何其他代码访问 protected String str2="World!"; //程序中同一包的成员和不同包中的该类子类可以访问 private String str3=" "; //仅该类中的成员可以访问 String str=str1+str3+str2; //不使用修饰符的话,变量的访问控制在所在包内为public, // 不能被所在包外的代码存取 //以下定义了三个使用不同修饰符和不同参数的构造方法。

流程控制结构

流程控制结构 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

(单元教案首页) 单元标题第3章流程控制结构 教学时数:()学时,其中理论()学时、实验()学时、上机()其它()学时,其它是指: 教学目的与要求: 1.理解程序的的三大控制结构。 2.掌握选择结构实现语句的用法编程应用 3.掌握循环结构实现语句的用法及其编程应用。 4.理解并掌握各种跳转语句的使用方法。 主要教学内容: 1.程序的控制结构:顺序、选择、循环。 2.选择结构语句:if语句(两种格式)和switch语句、程序举例。 3.循环结构语句:for语句、while、语句、do-while语句、三种循环语句的互相转化、程序举例。 4.控制结构跳转语句:break语句、continue语句、return语句 教学重点与难点: 重点:if语句、switch语句、for语句、while语句、do-while语句 难点: switch语句、选择结构编程应用、循环结构编程应用、跳转语句的编程应用课后作业: 1.课本P66 综合练习三:第一题~第四题 2.上机实习:实习3:Java流程控制 课后体会:

兰州资源环境职业技术学院教师授课教案

—————————————————————— 第3章流程控制结构 一、本章主要内容: 本章主要讲述Java程序的基本控制结构和控制语句,使得学生能利用这三种结构来解决一些比较复杂的问题。 Java程序的基本控制结构有三种:顺序结构、选择结构、循环结构。 二、具体授课内容: 概述 选择结构 循环结构 跳转语句 三、本章授课思路: 1. 回顾C语言中结构化程序设计方法所所用的程序三大控制结构(顺序结构、选择结构、循环结构)语法知识,以复习回顾的方式引入讲解Java语言的程序控制结构知识(和 C语言用法一致),学生易于理解记忆。 2.具体讲解选择结构(if、switch)和循环结构语法(while、for、do-while)及其编程用法的典型程序编写举例,使学生理解掌握Java语言中控制结构的使用特点及编程技巧。 将两种输入数据的编程方法融入到控制结构用法的编程举例的程序中,使学生对输入数据方法的能够有一定的理解掌握和编程使用,结合在后续第4章面向对象的程序设计的方法的具体学习中再加强理解和掌握。 4.课堂上通过练习和讲解第3章课后习题,加强和巩固学生对所学知识的理解和掌握使用。

单片机按键控制舵机转动

忆飞工作室 https://www.doczj.com/doc/f34836954.html, 忆飞电子淘宝店欢迎进入 设计者:曾传辉 时间2012年8月13号 手机:134******** QQ:36439133 旺旺:epiapl_cn 程序名称:按键控制舵机控制 程序效果:单片机两个按键控制左右转,转角90度单片 #include #define Sevro_moto_pwm P1_0 //接舵机信号端输入PWM信号调节速度 #define k1 P2_5 //按键控制舵机左转 #define k2 P2_6 //按键控制舵机右转 unsigned char pwm_val_left = 0;//变量定义 unsigned char push_val_left;// =14;//舵机归中,产生约,1.5MS 信号 unsigned int timer=0; //延时基准变量 unsigned char timer1=0; //扫描时间变量 void pwm_Servomoto(void); //函数申明 unsigned int val,val2,fl1,fl2; //变量申明 /************************************************************************/ void delay(unsigned int k) //延时函数 { unsigned int x,y; for(x=0;x

舵机控制程序

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,

获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占

空比的变化改变舵机的位置。一般舵机的控制要求如图1所示。 图1 舵机的控制要求 单片机实现舵机转角控制可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放 器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV 以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波

电路的精度难以达到舵机的控制精度要求。 也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。 具体的设计过程: 例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为 20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在

VBA流程控制语句

VBA流程控制语句 一、条件(选择)语句 1、If <条件为真> Then <语句> 如果<条件为真>则执行<语句>命令。 例1:在窗体中建立一个命令按钮和两个文本框Test0、Test1,在文本框T est0中输入一个数,单击命令按钮时在文本框Test1中显示相应的文字。Comma nd0事件代码如下: Private Sub Command0_Click() a = Val(Text0) '输入的文本转换为数字 If a > 0 Then Text1.Value = "您输入的是正数" If a < 0 Then Text1.Value = "您输入的是负数" End Sub 2、If <条件为真> Then <语句1> Else <语句2> 如果<条件为真>则执行<语句1>中的命令,否则执行<语句2>中的命令。 例2:Command0事件代码如下: Private Sub Command0_Click() a = Val(Text0) If a > 0 Then Text1.Value = "您输入的是正数" else Text1.Value = "您输入的是0或负数" End Sub 3、If <条件为真> Then <语句序列1> Else <语句序列2> End if 如果<条件为真>则执行<语句序列1>中的命令(可能不止一行),否则执行<语句序列2>中的命令。 例3:Command0事件代码如下:

Private Sub Command0_Click() a = Val(Text0) If a > 0 Then Text1.Value = "您输入的是正数" Text1.ForeColor = 255 '设置文本框的文字颜色 Else Text1.Value = "您输入的是0或负数" End If End Sub 4、If <条件1为真> Then <语句序列1> ElseIf <条件2为真> Then <语句序列2> ElseIf <条件3为真> Then <语句序列3> …… Else <语句序列> End if 如果<条件1为真>则执行<语句序列1>中的命令,之后跳出此结构去执行E nd if的下一条语句;否则继续判断<条件2为真>,如果<条件2为真>则执行<语句序列2>中的命令,之后跳出此结构去执行 End if的下一条语句;否则继续判断<条件3为真>,依此类推。 例4:Command0事件代码如下: Private Sub Command0_Click() a = Val(Text0) If a > 0 Then

Java关键字大全

abstract - 1 - boolean - 2 - break - 2 - byte - 2 - case - 3 - catch - 3 - char - 4 - class - 4 - continue - 5 - default - 5 - do - 6 - double - 6 - else - 6 - extends - 6 - false - 7 - final - 7 - finally - 7 - float - 8 - for - 8 - if - 8 - implements - 9 - import - 9 - instanceof - 9 - int - 9 - interface - 10 - long - 10 - native - 10 - new - 11 - null - 11 - package - 11 - private - 11 - protected - 12 - public - 12 - return - 13 - short - 13 - static - 13 - super - 14 - switch - 14 - synchronized - 15 - this - 16 - throw - 16 - throws - 16 - transient - 17 - try - 17 - true - 18 - void - 18 - volatile - 18 - while - 18 - 1.abstract abstract 关键字可以修改类或方法。 abstract 类可以扩展(增加子类),但不能直接实例化。 abstract 方法不在声明它的类中实现,但必须在某个子类中重写。 -示例- public abstract class MyClass{ } public abstract String myMethod(); -注释- 采用abstract 方法的类本来就是抽象类,并且必须声明为abstract。 abstract 类不能实例化。 仅当abstract 类的子类实现其超类的所有abstract 方法时,才能实例化abstract 类的子类。这种类称为具体类,以区别于abstract 类。 如果abstract 类的子类没有实现其超类的所有abstract 方法,该子类也是abstract 类。 abstract 关键字不能应用于static、private 或final 方法,因为这些方法不能被重写,因此,不能在子类中实现。 final 类的方法都不能是abstract,因为final 类不能有子类。

51控制舵机程序大全

#include void InitTimer0(void) { TMOD = 0x01; TH0 = 0x0B1; TL0 = 0x0E0; EA = 1; ET0 = 1; TR0 = 1; }void delay(1)(void) { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void main(void) { InitTimer0(); P1_2=0; while(1); } void Timer0Interrupt(void) interrupt 1 { //20ms中断 TH0 = 0x0B1; TL0 = 0x0E0; P1_2=1; delay(1); P1_2=0; }

#include #include #include #define uchar unsigned char #define uint unsigned int sbit IN1=P0^0; sbit IN2=P0^1; sbit EA1=P0^5; sbitdj=P0^7; //舵机口 uint t=0;//中断次数 ucharzk;//高电平中断次数uchar p=0;//定义pwm占空比void delay(uint z) { uinti,j; for(i=0;i>8;//100us一次中断TL0=-100%256; if(t==0)zk=p; if(t=zk) dj=0; t++; if(t>=200) t=0;//20mspwm周期 } void turn_left() { IN1=1;IN2=0;EA1=1;//电机工作p=5;//0.5ms delay(600); } void turn_right() { IN1=1;IN2=0;EA1=1;//电机工作p=25;//2.5ms delay(600);

51单片机一个定时器控制多路舵机

#ifndef __interrupt0_H__ #define __interrupt0_H__ void interrupt0() //STM中断服务子程序 { _t2af = 0 ; switch (cnt) { case 0: PWMOUT_2 = PWMOUT_3 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_1 = (PWMbuf - PWMOUTbuf_1); _tm2al = PWMOUTbuf_1 & 0x00ff; _tm2ah = PWMOUTbuf_1 >>8 ; //重新定义计数初值 if( PWMOUTbuf_1 >= PWMOUTbufmin1 && PWMOUTbuf_1 <= PWMOUTbufmax1) {PWMOUTbuf_1 = PWMOUTcnt_1; PWMOUT_1 = 1;} else {PWMOUTbuf_1 = PWMbuf-PWMOUTcnt_1; PWMOUT_1 = 0 ; cnt = 1;} //判断脉宽是否在正常范围之内 break; case 1: PWMOUT_1 = PWMOUT_3 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_2 = (PWMbuf - PWMOUTbuf_2); _tm2al = PWMOUTbuf_2 & 0x00ff; //重新定义计数初值 _tm2ah = PWMOUTbuf_2 >> 8; if(PWMOUTbuf_2 >= PWMOUTbufmin1 && PWMOUTbuf_2 <= PWMOUTbufmax1) {PWMOUTbuf_2 = PWMOUTcnt_2; PWMOUT_2 = 1;} else {PWMOUTbuf_2 = PWMbuf-PWMOUTcnt_2;PWMOUT_2 = 0;cnt = 2;} //判断脉宽是否在正常范围之内 break; case 2: PWMOUT_1 = PWMOUT_2 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_3 = (PWMbuf - PWMOUTbuf_3); _tm2al = PWMOUTbuf_3 & 0x00ff; //重新定义计数初值 _tm2ah = PWMOUTbuf_3 >> 8; if(PWMOUTbuf_3 >= PWMOUTbufmin1 && PWMOUTbuf_3 <= PWMOUTbufmax1) {PWMOUTbuf_3 = PWMOUTcnt_3; PWMOUT_3 = 1;}

流程控制语句练习题

流程控制语句练习题 1、为某超市编写一个程序,完成顾客购物后根据优惠政策计算付款额的功能。某超市有如 下优惠政策: ?所有的本超市的会员购物享受9折优惠。 ?对于非会员的顾客购物满100元的也可以享受9折优惠。 ?本身是会员并购物满100元可以享受8折优惠。 假如某顾客从该超市购买了三件商品(价格自己输入),请计算该顾客可得到的折扣额(如果有),以及打折后需支付的金额。 2、银行提供了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单 编写一个程序,用于根据存期和存款额(本金)计算利息,以及到期取款时银行应支取的本息。提示: ?要求用户选择存期,并输入本金。声明两个变量分别存储存期和本金。 ?计算利息的公式: 利息=本金*年利率*存期 本息=本金+利息 3、编写一个程序,要求用户输入今天是星期几,根据用户的输入判断是工作日还周未,并 显示合适的问候语。 提示: ?如果输入的数字不在1~7之间,则显示“请输入位于1 ~ 7 之间的数” ?如果用户输入的数字为6或7,则显示“周未愉快!”。 ?对于1~5之间的数字,则显示“工作日愉快!”。 4、只要顾客购买的商品数量大于等于10件,并且购物总额大于等于10000元,商店就给 顾客10%的折扣。接收购物数量以及总金额,要求计算出折扣后的应付金额。 5、做一个简易计算器:(包含+、-、*、/、%) 接收一个字符,例如用“+”表示加法,用“-”表示减法。接收num1和num2两个数。如果输入的字符为“+”,则将这两个数相加并显示相应结果。如果输入的字符为“-”。则将这两个数相减并显示相应的值。 6、编写一个程序,用于计算长方形、圆形和三角形的面积。根据用户的选择要能计算相应 形状的面积。 7、企业年底发放的奖金根据当年的利润提成。利润低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时,高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,输入当年的利润,求应发放奖金总数。 8、编写一个程序,用于创建包括下列选项的菜单: A、添加详细信息 B、修改详细信息

实验2 M文件和流程控制语句[参考答案]

实验2 M 文件和流程控制语句 参考答案 1、 编写一个函数文件fun.m ,用于求 ∑==10 1n n n a ,然后在命令文件中给定a 的值,调用函数fun 。 建立函数M 文件fun.m function s=fun(a) s=0; for i=1:10 s=s+a^n; end MATLAB 命令: >> a=3; >> s=fun(a) 2、 编写一个函数文件,求小于任意自然数n 的斐波那契数列各项。Fibnacci 数列定义如下: ?????>+===--2,1 12121n f f f f f n n n 建立函数M 文件fib.m function f=fib(n) if n==1 f=1; end if n==2 f(1)=1; f(2)=2; end if(n>2) f(1)=1; f(2)=2; for i=3:n f(i)=f(i-1)+f(i-2); end end 3、 编制一个解数论问题的函数文件:取任意整数,若是偶数,则除以2,否则乘3加1, 重复此过程,直到整数变为1。

建立函数M文件collatz.m function c=collatz(n) % collatz % Classic “3n+1” Ploblem from number theory c=n; while n>1 if rem(n,2)==0 %返回n/2的余数 n=n/2; else n=3*n+1; end c=[c n]; end 4、编写一个函数M文件([y1,y2]=fun(x1,x2)),使之可以处理1个或两个输入参数,一个 或两个输出参数,满足如下条件: 当只有一个输入参数x1时:如果只有一个输出参数y1,则y1=x1; 如果有两个输出参数y1,y2,则y1=y2=x1/2; 当有两个输入参数x1,x2时:如果只有一个输出参数y1,则y1=x1+x2; 如果有两个输出参数y1,y2,则y1=y2=(x1+x2)/2; 建立函数M文件fun.m function [y1,y2]=fun(x1,x2) if nargin=1&nargout=1 y1=x1; elseif nargin=1&nargout=2 y1=x1/2; y2=y1; elseif nargin=2&nargout=1 y1=x1+x2; elseif nargin=2&nargout=2 y1=(x1+x2)/2; y2=y1; end 5、A=rand(3,4)<0.7, 编程实现查找矩阵A的每行中第一个0元素所在的列。将结果存放着 一个列向量中。 建立脚本M文件 A=rand(3,4)<0.7 result=zeros(3,1) for i=1:3

51单片机 PWM电位器控制舵机

/*----------------------------------------------- 名称:IIC协议 PCF8591ADDA转换 内容:此程序通过IIC协议对DAAD芯片操作,读取电位器的电压,并输出模拟量,用LED亮度渐变指示,晶体选用12MHz ------------------------------------------------*/ #include"reg52.h" #include //包含NOP空指令函数_nop_(); #define AddWr 0x90 //写数据地址 #define AddRd 0x91 //读数据地址 sbit Sda=P1^2; //定义总线连接端口 sbit Scl=P1^1; sbit control_signal=P1^5; data unsigned int Display[8];//定义临时存放数码管数值 unsigned char code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数共阴码管段码表 unsigned int ADtemp; //定义全局变量 unsigned int high,low; static unsigned int count1; /*------------------------------------------------ 延时程序 ------------------------------------------------*/ void mDelay(unsigned char j) { unsigned int i; for(;j>0;j--) { for(i=0;i<125;i++) {;} } } /*------------------------------------------------ 初始化定时器0 ------------------------------------------------*/ void Init_Timer0(void) { TMOD |=0x01; //定时器设置 0.1ms in 11.0592M crystal TH0=(65536-78)/256; TL0=(65536-78)%256; //定时0.1mS ET0=1;//定时器中断打开 EA=1;//总中断 TR0=1; //启动定时器0 } /*------------------------------------------------ 启动IIC总线 ------------------------------------------------*/ void Start(void)

JAVA编程关键字和常用单词

Java基础常见英语词汇(共70个) OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 JDK:Java development kit, java开发工具包 JVM:java virtual machine ,java虚拟机 Compile:编绎 Run:运行 Class:类 Object:对象 System:系统 out:输出 print:打印 line:行 variable:变量 type:类型 operation:操作,运算 array:数组 parameter:参数 method:方法 function:函数 member-variable:成员变量 member-function:成员函数 get:得到 set:设置 public:公有的 private:私有的 protected:受保护的 default:默认 access:访问 package:包 import:导入 static:静态的 void:无(返回类型) extends:继承 parent class:父类 base class:基类 super class:超类 child class:子类

derived class:派生类 override:重写,覆盖 overload:重载 final:最终的,不能改变的 abstract:抽象 interface:接口 implements:实现 exception:异常 Runtime:运行时 ArithmeticException:算术异常ArrayIndexOutOfBoundsException:数组下标越界异常NullPointerException:空引用异常ClassNotFoundException:类没有发现异常NumberFormatException:数字格式异常(字符串不能转化为数字) Catch:捕捉 Finally:最后 Throw:抛出 Throws: (投掷)表示强制异常处理 Throwable:(可抛出的)表示所有异常类的祖先类 Lang:language,语言 Util:工具 Display:显示 Random:随机 Collection:集合 ArrayList:(数组列表)表示动态数组 HashMap: 散列表,哈希表 Swing:轻巧的 Awt:abstract window toolkit:抽象窗口工具包 Frame:窗体 Size:尺寸 Title:标题 Add:添加 Panel:面板 Layout:布局 Scroll:滚动 Vertical:垂直 Horizonatal:水平 Label:标签 TextField:文本框 TextArea:文本域 Button:按钮

程序结构和流程控制语句

程序结构和流程控制语 句 集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]

C ++的语句类型 C++程序的组成:一个C++程序可以由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数执行部分组成,函数执行部分由数据定义和若干个执行语句组成。语句是组成程序的基本单元。C++语言的语句可以分成以下六大类: (1)说明语句:对变量、符号常量、数据类型的定义性说明 例如:int a,b,c; //定义整型变量a 、b 、c ① 仅向编译系统提供说明信息,在程序执行期间并不执行任何操作。 如,定义变量语句int a,b,c;是告诉编译系统为变量a 、b 、c 各分配4个字节的存储空间用于存放变量的值。程序执行时,该语句就不起任何作用了。 ② 说明语句可出现在函数内、外,允许出现语句的任何地方。 (2)控制语句:能改变程序执行顺序完成控制功能的语句。 C++中控制语句主要有: (3)函数和流对象调用语句:函数调用语句又一次函数调用加一个分号构成一个语句,如: 【例1】分析下面程序的功能: #include using namespace std; int max(int a,int b) //自定 义函数 { if(a>b) return a; else return b; } int main() { int a,b,m; cout<<"Input a,b:"; cin>>a>>b; m=max(a,b); //函数调用语 句 cout<<"max="<

相关主题
文本预览
相关文档 最新文档