单片机习题基础习题,请教!谢谢!

几个java小题目,想请教大家_百度知道
几个java小题目,想请教大家
1:java程序的运行原理?详珐亥粹酵诔寂达檄惮漏细解释java先编译后解释执行的操作!使用哪些命令来进行这个操作。如何进行? 2:类和对象是什么关系?在java语言中间如何实现,请写代码说明。String x
= new String(“abc”);3:构造方法作什么事情?怎么在java中写构造函数?请具体说明。4:方法重载是怎么回事?为什么要方法重载?在java中怎么实现?请写代码说明。
提问者采纳
我来解释一下吧,我不知道你的水平,所以可能讲的比较罗嗦了点,希望你能有所收获:1 java程序的运行原理和编译执行一个java程序的步骤:java程序是通过java虚拟机解释,将其中的代码(字节码)翻译为具体的操作指令来执行的。假设要编译并执行位于d:\javademo目录中的Test.java:一、首先设置classpath和path环境变量: 在我的电脑上点右键 & 属性 & 高级 & 环境变量 & 上面一半的部分是当前用户的环境变量,只对当前用户适用,用其它用户登录后就变为另一个用户的环境变量内容了。下面一半是整个系统的环境变量,对电脑中的每个用户都适用。建议设置系统的环境变量 & 新建 & 变量名填classpath,变量值填一个英文句号(.),注意要是英文的句号 & 确定 & 设置path变量,path变量是已经存在的,我们只要找到该变量名(这里名称是大小写无关的,PATH、path、Path,只要找到就行),双击它或点击它之后点编辑按钮 & 在变量值一栏中的最前面(注意不要将原先的值删掉)加上你的java安装目录下的bin目录的路径,然后加一个英文分号。如你的java安装路径是c:\java,那么这里要加上“c:\java\jdkxxx\(这后面是原先的值)”(这里的jdkxxx会因为你安装的版本不同而不同,所以你要自己查一下) & 完成之后一直点确定就行了这里讲一下环境变量的作用:环境变量又叫系统变量,和我们程序中的变量类似,是储存一些系统运行期间经常用到的值的,操作系统或应用程序如果需要用到环境变量,它可以根据环境变量的变量名(如刚才定义的classpath)来查找对应的值(如刚才的英文句号)。那classpath到底是干嘛的呢?它是给java虚拟机用的,当我们需要运行一个java程序时,java虚拟机查找classpath变量的值,根据这些值定位java程序所在的位置,刚才定义的英文句号的意思是命令行所处的当前目录,下面例子中会详细讲到。(以上的环境变量只要设置一次,以后再编译或运行java程序时就不用再重复设置了)二、然后打开命令行:开始菜单 & 运行 & 输入cmd后确定将目录切换到java文件所在的位置,输入以下命令(输入一行命令按一次回车键):d:cd javademo解释:d: 的作用是切换盘符cd javademo 的作用是切换目录,该目录只能在当前盘符下进行目录切换,如果在c盘下输入cd d:\javademo是没有效果的,必须先将盘符切换到d盘。该命令可以一次切换多层目录,如在d盘根目录下要切换到d:\a\b\c目录下,可以写cd a\b\c,就几层写几层就行了。三、编译java程序经过前一步,当前目录已经是Test.java所在的目录了,因此我们输入以下命令编译:javac Test.java这一步命令是大小写无关的,因此也可以输入javac test.java。但注意,文件本身的文件名是大小写有关的,只是输入这个命令的时候可以忽略它的大小写(见第五步)。四、执行java程序第三步编译后会生成一个Test.class文件,输入以下命令载入这个文件并执行它:java Test注意,这一步Test是大小写相关的,并且不能加.class后缀,因此不能写成java test 或 java Test.class五、补充,下面是Test.java的一个样本,可以直接拿来做实验:import javax.swing.JOptionPpublic class Test{public static void main(String[] args){JOptionPane.showDialogMessage(null, &如果你见到这个,就说明你已经成功了&);System.exit(0);}}说明:这个程序定义了一个公有类叫Test,因此它的文件名必须叫Test.java,包括大小写。如果你改变了类的名字,那么文件名也必须跟着改变。2.类和对象的关系:其实只要明白一点:类是我们预先定义好的,它就像一个模板,对象由这个模板来创建,因此由一个类可以“复制”出任意多个对象。举一个直观点了例子,类就好像印刷时用的模板,每一次印刷都会产生一件印刷品(报纸、书、宣传单等等)。模板本身并不太能胜任“给人看”这样一个任务,首先因为它太重,其次因为它的字是反的。类也一样,我们一般不直接用类来完成一件事情,而是先由它生成一个对象,由对象来执行具体的任务。3.构造方法又叫构造函数,它的任务是创建它所在类的对象。一个类必须至少有一个构造方法,否则这个类无法创建对象(因此也就没用了)。所以如果我们没有在类中自己定义构造方法,编译器会给我们添加一个(这就保证了任何一个类都能产生对象)。4.方法重载:举个例子,你想编写一个方法(或叫函数),它返回传入的两个参数中较大的那个,在c中(c不支持方法重载)你可以这样写:int larger(int x, int y){if (x&=y){}else{}}但问题是,这个方法只能完成两个整数的比较,如果我还想传入两个浮点数并返回其中的较大者,在c中只能另外定义一个不同名称的函数,因为两个函数的名称相同在c中是不允许的。而java中可以利用方法重载方便的解决这个问珐亥粹酵诔寂达檄惮漏题,这个double型的方法可以这样写:double larger(double x, double y){....}虽然定义了两个都叫larger的方法,但由于参数的类型不同,所以它们是不同的方法。但是这种不同对使用这个方法的人来说是透明的,也就是说,任何人都可以这样调用:larger(a, b);不管a和b是整型或double型,java虚拟机都能够从所有重载的方法中正确选择一个合适的方法来执行。而在c中,由于不能进行方法重载,编写方法的人必须定义不同的名称来完成相似的功能,例如上面例子中两个方法可能分别叫做intLarger和dblLarger,这样使用方法的人也必须根据参数的不同选择一个方法去调用。
提问者评价
大家都讲得不错谢谢了
其他类似问题
java的相关知识
其他10条回答
我的建议:找段视频教程看一下很容易理解。java基础教程,不是做广告,我就是这麽加深理解的。祝你早日学会并理解。
1. javac编译 java执行 , 执行过程是虚拟机执行初始化操作, 调用程序的入口函数, 也就是main函数.2, 对象是类的实例, 在c++中, 类存在于代码段, 实例存在与数据段3, 构造方法用于生成类的实例时执行一些初始化操作4. 方法重载是oop为程序员提供的语法糖, 用于避免方法名混乱
1.原理:java源文件编译为java字节码(.class),然后再通过JVM运行.
所使用命令:通过命令javac编译成字节码.再通过命令java解释字节码.2.类就好比是对象的蓝图,是对象的模型对象是照着类的蓝图生成的.
在这里String x = new String(&abc&);
String就是类,同时也是类型,x就是对象.x就是照着String这样的蓝图生成的.
最后生成的就是String类型的对象&abc&.3.简单来说,构造方法就是初始构造出对象时所做的事情.它是在对象在生成的时候执行的.构造函数的语法是,名字同类名相同,同时不能加反加类型,连void也不行.例:public class A{
public A()
}}4.1 方法名称必须相同 2 参数必须不同 3 返回值可能不同
前面两题一般书中都会介绍。2.类是对象的抽象,比如人类是一个类,美国人,中国人就是对象。3.构造方法是初始化变量用的。在java中默认的构造函数是public 类名(){...};你可以自己写构造函数,那样默认的就没有了,比如public 类名(String s){...};构造函数还有很多其他用途,可以做整个方法的调用。4.方法重载是指两个方法的类型 ,参数应该不同,如public void exit(int x){};和public void exit(int x,String y){};就是完成了一个方法的重载。还有容易混淆的是方法的覆盖,方法的覆盖返回值,参数类型都必须相同,不同的是大括号里面的东西。比如public void exit(int x){x=1};和public void exit(int x){x=2};就完成了一个方法的覆盖。其实如果这些东西不知道我推荐你去耐心的完完整整的去看完一本java的书,然后自己要不嫌烦的去敲书上的代码,你会有很大的收获的。
这些都是基本的问题! 1.Java是解释型执行的,运行在虚拟机jre上。 java文件-》编译器-》class文件-》解释器 2.一个类就是一个对象。对象的概念就是以类的形式表现出来的。String就是 个对象,这段代码就是创建一个String对象x,内容为“abc”。和String x=“abc”;一样。 3.构造方法是在初始化类的实例的时候自动执行的方法。名字和类的名字一样,做一些初始化的操作,默认的是没有参数也没任何操作的构造方法。 比如 public class People(){ }虽然没有写构造方法,但是还是有的 就是People(){}。可以有多个构造方法,带参数。如果初始化的实例有参数就会相应的调用不同的构造方法。可以有2个和类名相同的构造方法,这叫做构造器的重载,它也是方法重载, 4.子类继承父类,可以对父类的方法进行继承和修改,一个方法名字,可以有多个方法的存在,方法重载有以下几个特点: (1).方法名称相同 (2).参数不同(包括参数类型不同,参数个数不同,参数顺序不同,不过一般都不用参数顺序这一个) (3).返回值类型可以相同,也可以不同,不做要求 (4).方法的重载是发生在同一个类之间一个重载的例子 方法eat(){System.out.println(&吃饭&)}
eat(String name){System.out.println(name+&吃饭&)}pep是初始化的类的实例,如果你这样调用
pep.eat();结果是
打印出来 &吃饭&;如果这样调用pep.eat(&小明&);执行的结构就是打印出 “小明吃饭”;
其他的都差不多,关键是第2个问题,有点绕人:我来举个例子仔细的说明一下:String x1 = &abc&; --&1String x2 = new String(&abc&);--&2--&1 的过程:首先创建一个叫x1的引用变量,然后再栈区中查找有没有叫&abc&的对象,如果有直接另x1指向&abc&,如果没有,则创建一个名称为&abc&的对象并x1指向&abc&,这时如果你再创建一个String x3 = &abc&,在这里就不会创建&abc&对象了,直接就是x3指向&abc&,x1和x3指向的是同一个对象,他们的内存地址是一样的,System.out.println(x1==x2)//true因为栈区中有个叫 字符串常量池 的一小块内存。它的好处是所有名称相同的字符串常量都只占用一份内存空间--&2的过程:String x2 = new String(&abc&);其实是创建了2个对象,一个是x2位于栈区,一个是new出来的String类型的&abc&位于堆区,这里的&abc&本身就是String pool中的一个对象,当你new String(&abc&)时,会把pool中的对象复制一份放到堆区中,并把堆中的这个&abc&对象的应用交给x2。不知道这样解释对不对,但是应该是这样的吧,如果有什么地方理解不正确,欢迎各位指点啊,呵呵。
____先说一下平台,Java程序需要在Java运行平台(有三个:J2SE即Java标准版,J2EE即Java企业版,J2ME即Java微型版)上运行,通常我们用的是J2SE或者是J2EE,J2ME一般用于手机掌上电脑等单片机系统。____运行原理:Java平台的JVM(即Java虚拟机)把Java程序(即*.java文件)编译后形成的字节码文件(可以理解为机器码即二进制码,后缀为.class)加载到系统内存,然后以解释的方式来执行一条一条的语句,即根据相应硬件的机器指令翻译一句执行一句。我们运行Java程序时一般先用&javac *.java&命令来编译,然后用&java *&来运行程序。____关于类和对象:类是组成Java程序的基本单元,一个完整的Java程序就是有一个Public类和一般类构成。类里面封装了变量和方法,或者说是由成员变量和成员方法构成。定义一个类相当于定义了一类事物的特性,比如定义人有名字,双手,双脚,有嘴,然后手可以拿东西,脚可以走路,嘴可以说话一样。对象则相当于类的一个实体,比如我声明一个人,他叫小明,他有这个类的所有属性,有名字,手,脚,他还有这个类的所有方法,他可以拿东西,走路,说话。____关于“String x = new String(“abc”);”:&String&是Java类库中的一种类,&String(“****”)&则是这个类的构造方法,这个语句的作用是声明一个String类型的对象,并为它初始化。假如我有一个类class A{....}那么声明这个类的对象的方式是:A a=new A();____构造方法一般用作初始化,调用构造方法声明对象的同时就为该对象分配了内存空间。构造方法是一种特殊的方法,它的名字必须和它所在的类的名字相同,并且不能返回任何数据类型,即void型,但void必须省略不写,也就是说不必为这个方法写类型。而且一个类可以有多个构造方法,但这些构造方法的参数个数或类型必须不同。举例如下:class A{ int ni, A(){//构造方法1,无参数
System.out.println(&Hello world!&); } A(int a,int b){//构造方法2,有两个参数,用于初始化
this.ni=a;
this.wo=b; } ......}____关于方法重载:方法重载是Java多态特性的一种,是指一个类中可以有多个同名的方法,从而实现多种功能。但是这个方法的参数个数或者类型必须不同。举例如下:class B{//此类省略了构造方法,但是系统在编译时会自动为其添加构造方法 int ni, int JiSuan(int a){
return a*a; } int JiSuan(int a,int b){//重载1
return a*b; }
float JiSuan(int a,float b){//重载2
return a*b }}
1,java编译时,首先由编译程序生成一个中间代码,在执行时,由解释程序解释那个中间代码。解释一句,执行一句,然后解释下一句。2,类和对象的关系 好比 汽车 和 奥迪汽车的关系。对象是类的实例话。3,构造方法是跟类名相同的方法,由于初始化属性。4,方法重载允许方法具有相同的方法名,但是方法的参数或返回类型不能都相同。
楼上的二题说的不是很明白 你们要是怎么说的话 对编程理解的还不够透彻 第二题补充下: 可以说类是 对象的集合或者抽象 对象是类的实例 对象是唯一的,不会重复 对象可以调用类属性 类不可调用对象属性 String 该对象类型 x 句柄 指向你所声明的对象所在的内存地址 new 声明一个新的对象 String(&abc&) String类的构造方法,并在里面赋上属性值 这样说才对 new String(&abc&) 是创建一个对象; 不是x是对象 他只是个句柄(或者引用?) 指向内存那个对象的所在地址
讲的都还可以。。。有收获。。
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请教下AT89S52单片机的问题,回答满意者追加分,谢谢_百度知道
请教下AT89S52单片机的问题,回答满意者追加分,谢谢
2.0592M和12M的区别在哪?3.晶体11.如果要用AT89S52单片机内部晶体,如何能做到精确,该如何设置.用AT89S52单片机内部的计时器来定时报警?希望可以分条回答下1
提问者采纳
256。就是12M比11. TMOD=0x01,11; TH0=(0x100-定时时间)&#47,还需用一个倍数变量3. AT89S52
有内部晶振吗; TL0=(0x100-定时时间)%256?2.0592M快一点.晶振越大,CPU执行指令越快?:单位是 晶振频率的倒数如果定时时间超出TH0范围?;定时时间.0592M的优点是设置波特率无累计误差1
其他类似问题
at89s52的相关知识
其他4条回答
0592M可以产生准确的串口通信波特率.89S52没有内部晶体2.11.把中断程序执行 的时间也加上;3,而12M有误差1
1、单片机一般都用外部晶振2、用定时器中断的方法3、12m的话便于计算机械周期,11.0592m便于调节串口比特率和串口通信
一 有内部晶振吗 好像都是外接的吧二 用11.0592的晶振 精确到微秒三 第二条已经回答了12的有偏差
1.你说的晶体是不是内部晶振?
52单片机内部没有内部晶振比如AVR单片机内部就有一个简单的RC振荡但是不是很精确
一般用的时候还可以用(控制LED显示) 但是要用时间精确(比如说串口通信的时候就不行了 还是要外部在接晶振)2.定时器可以精确到US级别了
定时器就是最精确的了
我用定时器功能做了一个数码管时间10天后都没有差一秒(对于怎么使用定时器很多书籍上面都有
我也不好教你)3.12M和11.0592的区别主要在于串口通信的时候
用11.0592的时候串口通信算波特率的时候就比较精确
12M的就不是那么好算了
对于一些波特率来说 用12M的(虽然书上面有TH0和TL0的相关溢出数据)总是有点点小小的偏差 (看你们的教材上的串口通信那章
它设置波特率有一个溢出数值表格你看看吧 )
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁我今年52岁学了十天单片机,有个问题请各位老师指教谢了.
当前位置:
我今年52岁学了十天单片机,有个问题请各位老师指教谢了.
阅读: 7815
楼层直达:
各位老师好:硬件学完了,问题不大.软件也学完了(好几个通宵呢)遇到麻凡了.各个部分学完了(主程序.子程序.寄存器定意.I/O口设值.AD设值.时钟设值.)我要想编个程序试试了,可脑子乱了这么多程序部分哪个在前哪个在后分不清了.是主程序在前还是各种定意在前应该是先运行主程序,我又觉着不对不定意主程序砸运行一头雾水,请指教谢了.
比如说程序编好了,单片机上电运行.在主程序不运行能定意I/O口和其他的状态吗?搞不懂.
定义I/O就是在主程序的开头,一些特殊功能寄存器也在开头定义,接下来走主程序的其它东西,
您好:谢谢.再请教个问题.在AD转换模试下,要同时设两个输入端(两个引脚)是不是相当于运算放大器的一正一负两个输入端.
这要看你用的单片机了,有的单片机输入是单端的,有的是既可以单端也可以双端,由sfr的设置来决定.
另外,不知道你编程序用的是汇编还是C.
您好:我才学几天没学过C语言用的是汇编语言,芯片用的是中颖的69p42(我有仿真器)
我还是不太懂,能把这几部分(系统寄存器定义.用户寄存器定义.I/O口定义.模数转换定义.中断程序.主程序.子程序.上电程序)排一下次序吗?谢了.上电PC从地址0000开始有4个中断这里不能写主程序是吗?
你到网上找个例程看看,其实不用想那么多,先做个简单的程序走走看,以后再把其它功能一个一个加上去
有好多东西看是明白了,真做起来就不知从哪下手,有些细节.逻缉又似懂非懂.命令具体还得现查没记住.看来我是急了点谢谢指教了.要是和你在一个城市就好了,可以登门拜访并请你喝酒.
能交个朋友吗,留个信箱就可.我的信箱是:
刚写程序是会有一点乱,但写好一个非常简单的程序了就会懂了,我的邮箱是wangzai_
我老是把rom和ram地址给闹昏了,真头疼.越学越麻繁糊独.
真实年龄52岁吗?
1954年属马的自己算吧.
哈哈~~~大我几岁~~~
佩服之中...
1954应该是60岁吧老哥!
哈哈!我没有看帖时间!哥哥长我8岁!
我帮不上太大的忙,我汇编学的PIC,51系列的我都用C写的.
已经帮了不少了,非常感谢.
开始学习``请问怎么弄个程序来试试啊
用什么软件,怎么知道写的程序对不对啊?
&&地址0000应该是个转移指令,目的就是跳开后面的中断入口.如果不使用中断也可以不用转移直接占用中断入口地址.
&&同样中断入口地址也是转移指令.中断入口地址的转移指令需要用伪指令“ORG”来指定写在ROM中的确实地址.
您好;寄存器.I/O口.模数转换设制是在ORG之前还是之后.
应该可以,因为还没运行啊.我学了半年单片机刚大学毕业.很佩服您的精神加油啊
各位老师好:我想了好久终于知到这个问题怎样问了,
&& 寄存器定意.I/O口.模数转换命令是不是应该写在ROM中是在ORG(主程序之前吗?请指教谢了.
是的,另外,已经预定义过的就不必再次定义.
比如:
$mod51&&&& ;或者#include 等,以编译器不同而不同
Counter&& data&& 35H
Flagreg&& data&& 20H
……
MyBit0&&&&bit&&&&00H
MyBit1&&&&bit&&&&Flagreg.1&&;即01H位
……
MyConst&& equ&&&&126
……
&&&&&&&&&& org&&&& 0H
&&&&&&&&&&jmp&&&& Start
&&&&&&&&&&org&&&& 03H
&&&&&&&&&&jmp&&&& IntX0
……
您好:ORG之前的各种设制命令占ROM地址吗?要是占的话(ORG从0000H开始)ORG之前的命令占哪里?(PC指针不是从零开始吗)那些设制怎会操做.我糊涂请指教.学了十几天了想写程序还不行.
njyd说得很对.
伪指令不产生目标代码,哪怕把它放到程序的中间.
&&ORG是指定编译出的程序放在ROM什么位置,可以用在任何地方,所以无所谓用在前后.
&&程序的第一句如果没有ORG编译时就放在地址0000,所以第一句可以不用“ORG 00”
&&定义I/O口、外设的指令也可以放在任何位置,但一定要在使用这些I/O口、外设的程序以前.这个以前不是编程序的行数前,而是程序运行先后的前面.但一般放在在主程序一开始,需要的话在程序运行中间也可以改变设置.
&&汇编语言分“指令”和“伪指令”,指令在编译后都产生目标程序,这些目标程序就被放在ROM中;伪指令不产生目标程序,只是告诉编译程序去怎么运作,比如说ORG就是告诉编译程序下面紧接的程序从ROM什么地址开始,(放在ROM中什么位置).所以目标程序反编译后能看到所有原程序的指令,但原程序中的伪指令反编译后就看不到.
讲的太好了,我明白了很多.谢谢您!我在中断方面还有点问题.中断我知道,可单片机的一个脚我设成输入时(比如说下降沿响应中断)ROM中的程序怎样响应(比如说我想要指定的一输出脚由1变0)响应的是PC指的地址呢还是命令的位呢.我想这方面搞明白了就可是编程了.
楼主,
&&我有个同事,1953年出生的.他是2001年后,才学单片机.湖北人
近几年,他已经很熟悉,MCU开发,例如电饭煲,倒车雷达,温度控制板,棉花湿度仪.....
&&非常在行,他原来是,技校毕业
&&我本身,也是32岁才,真正编程.许多人说,30岁后,不宜从事软件编程.
我觉得,不妥.俺,现在连复杂的,小波变换及其应用,DSP常用算法,也得心就手.我已36岁,这几年,才转行到DSP,MCU 编程.&&&&&&&&&&&&&&
&&以前,我是画电路板的,PROTEL99,仅仅是硬件工程师
&&不过,现在算是DSP,MCU 行家
&&一起努力
您讲的太好了,我要非常奴力才行,谢谢鼓力.我正准备学PRTEL99呢,拜你为老师不要推词奥.我买不到有关资料.
哈哈!我终于找到知音了,我今年52周岁,也是刚刚开始学习单片机,由于还要上班养家,所以都是在业余时间搞,《跟着专家学习单片机》就是我,请多指教!
都很厉害的,挺佩服他们,活到老学到老,敬佩敬佩!我正想开始学单片机,毕业7年了,一直做电子产品调试,以前没接触过,看了几个月的相关资料,还是一头雾水,想买一款51系列的机子实践一下,不知哪家的好,请多赐教,向各位学习,谢了!MSN:,QQ:
中断是单片机在执行某个进程时,由于内、外某个中断源向单片机发出中断请求信号,要求单片机中断当前进程而转去执行相应的线程,待处理完毕中断线程后,再返回继续执行原来进程.
当设置外部中断的信号来时(在中断引脚发生了下降沿),先由硬件完成中断标志位的变化.在由硬件完成PC指针的入栈,记录被中断进程的的地址.
在由硬件完成PC指针装入中断线程的入口地址.
PC指针装入中断线程入口地址后,单片机开始执行中断线程(指定一个输出脚由1变0).由于中断线程中可能用到被中断进程的资源,所以要先保护原进程的资源状态如 ACC,PSW 等等,当中断线程执行完成后在恢复原进程的资源状态.我的理解就是这样的说的不好也别怪我啦!相互学习啦!
52岁还在学习!这就够我学的啦!向你学习!
&&你说的太复杂了.简单点就是:
&&中断响应时,程序会自动跳到ROM开头的几个中断地址之一,(具体要看什么中断,书上能查到),这几个地址应该写上转移指令(指向你写的中断处理程序),程序到这几运行后就会转移到你写的你写的中断处理程序运行.
&&中断时单片机会自动记下在什么地址响应中断的,中断处理程序最后一句“RETI”(没记错吧?)就是告诉单片机返回到响应中断时记下的地方.
&&中断处理程序一般要保护现场,就是保存下响应中断时正在使用并且后面还要使用的一些寄存器内容,这个问题只要把堆栈搞懂就是小菜一碟.
&&试验中断可以把断点设在中断处理程序内,运行中在此停下就说明发生了中断.
&&或者在中断处理程序内进行写RAM的操作,运行后这个RAM地址被写入就说明发生了中断.
&&初学者对中断是个难点,可以先编些简单的程序试验,只要能产生你需要的中断后面的就好办了.
&&自学单片机关键就在多试,有些不懂的地方编些小程序多试试就能搞通.当然试硬件中断需要有相应的硬件,限可以先试定时器中断,这用软件仿真就可以.
谢谢您:怎么说呢你讲的很现实,我明白一点就是不管过程如何,目地达到就行.过程以后再说,也可能不说就明白了.哈哈高兴那么多热心人.
我有新问体向各位老师请教:1
1.指令和伪指令都要占ROM地址是不是应该避开中断地址?怎样避开.
2.主程序内可以设制I/O口是吗?
3.A/D转换中指定好I/O的寄存器后,I口电压随时改变O口卖宽随之改变这两个寄存器之间交换程序要用循环的吗?谢谢!
1,在中断地址用一跳转指令,可能如下:
org&&ox4&&&&//中断地址
goto 0x20
.......&&&& //多个中断同上
org&&0x20&& //中断处理
中断内容
org&&0x40&& //主程序,前面留出足够空间用于
主程序&&&&&& //中断内容处理
3,先不要做A/D了,先让IO口点亮/熄灭LED,等程序动了,再添加其它功能.一口吃不成胖子.
你用的什么型号单片机?
我用中颖的SH69P42.
我想问的是命令一个地址接一个地址的往ROM里写ORG 0000H开始
再写就占了中断地址是不是加个什么命令让开他(但我还在后面还须
要中断)比如我设PD1.PA1为A/D转换输出输入口他门不断的采样工做,
但PA2有信号时还要中断.
**此帖已被管理员删除**
谢谢您:我就(中颖单片机入门与实践)这么一个学习资料.我问的是通用问体,资料里没讲.我说的这个型号的单片机(其他的一样都有中断地址)中断地址是H往ROM里写程序第一是0000H第二不就把中段给占了这怎么行呢?
&&&&比如:MOV P0,#00H;第一行占0000H
MOV P1 ,#00H;这第二行不就占了00001H了吗?(不是说的这命令具体操作,是说的这行要占PC地址)
MOV P2 ,#00H
这个问体明白了我就可以编程了,请帮帮我万谢!
ORG xxH是伪指令,是编译时候才用的,只是告诉编译软件从ROM中XXH这个地方开始写下面的程序,它本身并不会在ROM中留下任何东西,
&&这是我以前编的8031汇编程序中的一部分.“;”以后的为解释,(注意其中有一部分是汉字编码的“;”,如果直接使用要改成英文的“;”)其中有一部分是以前为防忘记写的,//以后的是为你写的解释.
&&(这里说的地址、内存都是ROM)
&&&&&&HMX EQU 25H&&;//这是把HMX定义为常量,程序中有HMX编译时都作为“25H”,编译后看不到这句,也就是不占内存.
&&&&&&ORG 00&&;//&&定义下面一句“JMP ZC”放在地址0000,编译后也看不到,因为本身就是第一句,所以这可以不要.
&&&&&&JMP ZC&&;//跳转到主程序,也就是躲开后面中断入口地址.
&&&&&&ORG 0BH&& ;定时器0中断(示波)//定义“AJMP XX”编译后放在地址0BH,不能不要.否则“AJMP XX”编译后紧接放在前面“JMP ZC”后,不能保证放在地址0BH.
&&&&&&AJMP XX&&;//跳转到定时器0中断处理程序,同时也就是躲开后面定时器1中断入口地址.
&&&&&&ORG 1BH&& ;定时器1中断(闪烁及鸣声定时)//定义“AJMP YS”编译后放在地址1BH,
&&&&&&AJMP YS&&;//跳转到定时器1中断处理程序,当然因为定时器1中断处理程序YS本身就紧跟在后面,而且全部程序又没有用1BH以后的中断地址,所以在这里不用跳转也可以.
YS:&& PUSH PSW&& ;1 中断入口//这两句是保存中断现场
&&&&&&PUSH ACC
&&&&&&CLR EA
&&&&&&CLR TR1
&&&&&&MOV A,#1
&&&&&&MOV TL1,A
&&&&&&MOV A,#80H
&&&&&&MOV TH1,A
&&&&&&SETB TR1
&&&&&&SETB EA
&&&&&&INC 7AH
&&&&&&MOV A,7AH
&&&&&&CJNE A,#2,YS3&&;鸣声定时
&&&&&&SJMP YS2
YS3:&&CJNE A,#13,YS1&&;闪烁定时
&&&&&&MOV 7AH,#0
&&&&&&CPL 4
&&&&&&SETB 9&&&&&&;显示标志位
&&&&&&SJMP YS1
YS2:&&CLR P1.3&&&&;鸣声口
&&&&&&JB 2,YS1
&&&&&&CLR TR1&&&&;关闭定时器1中断
YS1:&&NOP
&&&&&&POP ACC&&;//这两句是恢复中断现场,注意对于某个寄存器来说,保存在先恢复在后,保存在后恢复在先,这点搞清堆栈就能明白.
&&&&&&POP PSW
&&&&&&RETI&& ;//中断返回.
&& ORG 100H&&;//定义主程序从地址100H开始,这句可以不要,不要的话主程序就紧接在前面中断程序后面.但如果用这句一定要注意给前面的程序留有充足的ROM空间.
ZC:&& MOV TMOD,#11H&&;主程序入口 定时器方式1, 16位计数器
&&&&&&MOV TCON,#50H&&;开启定时器
&&&&&&MOV IE,#10&&;允许定时器溢出中断
&&&&&&MOV IP,#2&&;定时器0优先中断
&&&&&&MOV SP,#28H&&;堆栈定义
&&&&&&MOV 15,#13H
&&&&&&MOV TL0,15&& ;示波定时低位
&&&&&&MOV 14,#0FEH
&&&&&&MOV TH0,14&&;示波定时高位
&&&&&&MOV 11,#4
&&&&&&MOV R1,#0FCH&&;8279数据口
&&&&&&MOV R0,#058H
&&&&&&CLR A&&&& ;这和下面几句是给RAM清零.
&&&&&&MOV 20H,A
&&&&&&MOV 21H,A
&&&&&&MOV 22H,A
&&&&&&MOV 23H,A
&&&&&&MOV 24H,A
&&下面还有就不写了,跳转到定时器0中断处理程XX还在后面,因为我的主程序不长,所以前面的跳转指令用的是AJMP,如果中间隔的太远就要用LJMP或JMP.
&&从最前几句可看出,开头的和中断入口指令都是用的跳转指令,这样就空开了需要用的中断入口地址.
&&如果还要用其他中断就在中间顺序加上ORG XXH JMP YY.(这里XX表示所要中断的入口地址,YY是此中断处理程序名.
&&中颖的SH69P42没用过,不过汇编语言都大同小异,可以参考.
&&“中断地址是H”
&&你再仔细查查,中断地址不大可能是H,因为一开头和每个中断入口地址至少要有一个跳转指令的空间.你这应该是指“中断0001H~中断0004H”4个中断,具体入口地址再查查.
您好:谢谢,懂了.
再问个问体.方案是这样的,我想用A/D转换控制一个输入口PA0(输入可调电压)控制输出口PWM0(脉宽随输入电压变化).在模拟电路中是用运算放大器,重要的是放大器有二个输入端当一个输入端固定在一个电压值时
,另一个输入端的电压在变化中超过这个固定电压值时输出就不在变了.
A/D转换口设制时一般都同时设制二个口.也是这种功能吗?
越学问体越多.越开心.真是个好行业.
棋手的思路都怪异,特别是你们下围棋的...
哈哈~~~我相信楼主会成为一名MCU的高手!!!
也盼望以后能成为"水手"~~~
虽然我的棋下的不好,但编出来的程序很怪异,连我自己也觉得很惊奇...
好些真是凭感觉在搞科研,有时连鬼子都感觉我很奇怪~~~
给你这个玩玩,看能否考及格
&&看不懂你的问题.
“用A/D转换控制一个输入口PA0”
&&A/D转换是输入模拟电压转换成数字信号传给CPU,与CPU间要么并行(一般是八条线接到单片机数据输入口)要么串行(接到单代机串行输入口).你的“控制一个输入口PA0”是什么意思?
“放大器有二个输入端当一个输入端固定在一个电压值时,另一个输入端的电压在变化中超过这个固定电压值时输出就不在变了. ”
&&运算放大器的输出等于两个输入端的电压差乘以放大倍数,所以不存在“超过这个固定电压值时输出就不在变了. ”,只有在输出接近电源电压、达到饱和才不变了.不知你对运算放大器清楚不清楚.
“A/D转换口设制时一般都同时设制二个口.也是这种功能吗?”
&&如果一个单独(不做在单片机内的)的A/D转换器,一般有这么几个“口”:
&&输入:两条线(脚),一个作为电压输入,一个就是接地.当然地是共用的,也可以认为是一个脚.
&&电压基准:类似输入口,一个脚作电压输入,另一个接地(共用).有的片子内部做了电压基准,也就没有这个脚.
&&输出:并行(一般八个脚)或串行(一个脚,另一个地共用).
&&控制:两个脚以上,用于选通、启动转换、报告转换成功,读信号等,有的片子还有位数选择脚.
&&对于做在单片机内的A/D转换器,与CPU之间联系的口,如输出、控制等就不需要在外部做引脚,都在内部直接联了.当然操作时的控制信号还是要的,只是只体现在软件编程上.不知你的“二个口”是指什么?
兄弟们,算了吧.老实说,我当初让单片机的I/O动起来就花了一个月时间,之后又花了两三个月才学会用A/D,D/A,PWM,UART.可这位大伯连单片机是怎么转的都不知道,就又是A/D又是PWM,看来他是想做超人.我不想再浪费时间了.
&&不要泼冷水嘛,多数人都是这样过来的,包括俺.
&&建议楼主再学学数字电路.
您好:以上各位老师说的很对,您们讲的我明白了,就是我问的方法有点特别(因我水平不行)说的不在谱.不管怎么说.我说了,您回答了,我明白了.万分感谢三天后我要开始编程了.祝大家新年快了技术进步事业有成.
让我门的中华民族兴旺发达.再次向各位老师表示感谢.
我感觉编程序又简单又很复杂好多东西和正常思路不一样,可能我记不住命令有关,不过很好玩,有乐趣.
不用,记命令,用C51,就ok
zbdxdxkj老师:
&&&&你好.想请问一个问题,我想自学单片机,但不知道学那种编程语言最适合我!!
&& 我本人的条件,学习电子声像专业知识,电路基础相当扎实,模拟和数字,计算机硬件都是熟,明白8086的CPU的工作原理,但是就是没有接触到真正的编程,读书时,仅是在“纸上谈兵,没有真正的练过兵.”
&& 想请教一下,请指引一条好的道路,让我少走一点弯路.
&& 联系方式;yllh.
你好:我的基础知识不如你,我只学了汇编语言,有老师说C语言好我没学不知到,但可以编程.关键要实检我学了20天也不太懂,就一个教材(这个网站下的).
说到那里去啦!学高为师,德高为范.在一家韩资公司就职,能够接触到产品的技术规格参数要求,大致的程式模块.此生产的产品全部是单片控制的各种飞机、汽车、船模型核心部件,使用的ATMEGA16、48、88等的芯片.觉得挺高档,但是核心技术全部在韩国,但是作为一个中国人,不想这样子的机会永远都让韩国人占有,中国以后也会生产出来自己的模型核心部件.我了解了一些,C语言可以应用在多个方面去,但是汇编就是应用得较少,但两者都是比较各有各的长处,在这里,也请各位高手,指点一下迷津?
&& 在此多谢啦.
学单片机必须先从汇编语言学起,然后再学C.
奥必须学C语言吗?的用多少时间,是学C还是C++.
**此帖已被管理员删除**
各位好;小弟请教个问题,break 和continue的区别,
#include
void main()
{
for(i=1;i<=10;i++){
c=getchar();
if(c=='\n')
putchar(c);
}
}
这是我运行的程序,break和continue在运行时怎么没有区别?请大虾指点
这个程序书上说是只要满足>10或\N其中一个条件循环就会结束,但是我在运行时却发现只有遇到\N循环才会结束,到底是怎么回事,是不是这道题的真正意思是最多输入10个字符,遇到\N就输出呢,请大虾指点一二,小弟在此多谢了,
{(C语言程序设计)(二),人民邮电出版社,78页习题}
你这个程序有没有运行次数的计数呢..没有的话,可能按照程序来进行是没有进行的啦..程序要进行循环次,满足次数后,就会按你的break,
我没有学习过C语言程式设计,但是了解一点微机的工作方式.
如果,帮不上你,请见谅啦....
循环程序里面好像是有些问题!!满足条件应该是会退出循环.
是啊,应该输入10个字符后循环会结束,但是你就是输入100个字符,他也不会停,搞不清楚为什么,郁闷
把for(i=1;&& i<10&&; i++]{
进行改动一下看看...行不行,再进行通知我一下..
yllh.
谢谢指点,问题已解决,是最多输入10个字符
我觉得是你定义c是一个字符,但输入却是一个字符串,这中间有问题吧,我也是几年没碰C语言了,最近才看一看,不知道说的对不对,请指正
break和continue的区别是
-------------------------
程序处在循环时,当满足某一条件遇到break时,程序将强行退出循环,而遇到continue时程序只退出本次循环,不再执行continue之后的语句.
--------------
您好:请问4K ROM用绘编语言200 多行就满了是吗?好像盛的不多啊,还没写完呢咋办.
看你是什么的什么IC,SONIX 4K的IC用汇编写可以写4096行程序,你说写200多行就满了,我觉得不太可能
是啊,我用的是中颖的SH69P42,ROM是3072乘16位,汇编语言200多行(就满了)和ROM行(3072)不一样吗?
不可能的,哪种单片机都不会只有两百多行,肯定是哪里地址设错了,我没有用过中颖的,也没看过中颖的资料,具体也搞不清哪里的问题
ROM是3072行没错,是不是汇编命令一条要占ROM好几行.我想不通.
问题解决了,我的编程器里有个叫build的功能,我翻译了一下叫建造,把文件用他搞了一下出来好几个文件再往芯片里写就没事了.
各位老师好:我在写程序时迂到十一位二进制占三个寄存器互相交换数据
用什么方式或着命令好呢?
各位老师好:我遇到新问题4位机八位运算和比较大小没有八位寄存器.请指教谢谢.
此帖已被删除
其实单片机不难,不一定要全部弄懂,要多实践多做实验,不要求什么都清清楚楚上网多交流一下可以轻松
各位,这个程序#include
void main()
int i,m,n;
scanf("%d",&m);
for(i=2;i<=n;i++)
if(m%i==0)
if(i>n) printf("yes\n");
else printf("nov\n");
怎么就是不行啊,我到底哪里作错拉,郁闷,请高手指点
主程序或每个任务里都应该是个死循环~~~
各位,这个程序#include
void main()
int i,m,n;
scanf("%d",&m);
for(i=2;i<=n;i++)
if(m%i==0)
if(i>n) printf("yes\n");
else printf("nov\n");
一:#INCLUDE 里没有内容;
二:FOR(I=2;IN) PRINTF("YES\N");内容相矛盾.自己想想怎么会这么没有逻辑呢 ?I<=N的取值怎么会那样呢?前面明明说I值<=N,后面又判断大于的时候的情况,肯定有毛病的嘛.
**此帖已被管理员删除**
大家新年好!我编程成攻了.A/D转换,PWM都用上了很好玩高兴.谢谢帮助我的各位老师.
哈哈~~~估计是做充电器或调速吧~~~
不错,应用在充电器与调速器中,确实是有使用到此PWM的脉宽调节..兄台也是搞这一行的吗??
YLLHPOWER兄,你是搞充电器这一行软件的吗?本人是搞充电器硬件的且现在在自学单片机,希望你能在软件方面指点一下.
没有,我也是搞充电器和调速器硬件的,软件也和你一样,正在学习当中.工作上面有条件的,也是可以自已动手试一下,我们都是正在学习的阶段,只能是切磋,不敢指点!!!!
4位单片机的朴通IO口的4位数据寄存器(不用命令写)从端口输入脉冲是不是和记数器一样从个位开始记数.请指教.谢.
我现在只有 VB的底子,想学单片机;VB是做不到的
只有学汇编才可以;C语言对我来说太难了
大家给我推荐几本比较好入门的书,可以吗
正想学习单片机,不知道怎么学,看了一点资料,还是稀里糊涂,看了你的记录后很受启发,应该多实践多交流才能进步,以后多交流交流,你在哪里?我在北京,我的MSN:,QQ:,
佩服您,这么大年纪还熬几个通宵,感动中!
哈哈~~~菜农今年也48岁了~~~
现在还在编这个~~~命苦呀~~~
500) {this.resized= this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"
onclick="if(!this.resized) {} else {window.open('/bbs/u/51/.gif');}" onmousewheel="return imgzoom(this);">
很服你哦!
其实你只需要知道起作用就可以了
最主要的是用
单片机工作原理就是象一个开关一样
你设置就需要工分了
学那么多也是有用的,刚开始我也以为很难的,但是我用一个萧萧的程序就能搞定一个流水灯之后,我就明白很多原因了...
能搞灯就能搞声音,搞声音就能高点阵式(本人现在已经做好了,学PIC)
对那些变成语言不懂&&我用的是汇编
看样子也要学C了
刚毕业的新人
考研了找工作还难,那小弟我中专没毕业就出来,那不是更惨,请大家多多关照!
各位师傅们!我对电子的软硬件都很爱好,有一点点的了解,现在我想学习单片机,不知从何学起!望给予指教!谢谢
单片机程序执行都是从主函数开始的,对应的是复位时指针指向的flash地址,建议你找个简单的程序配合硬件,一起学习!程序最好有很具体的说明,然后你可以在上面作少量的修改,慢慢的就可以自己编程序了哈
擦这叫学完了吗?
这叫你看完啦一个教程,然后又还给你他们了,没有速成,不实战都是浮云、
& & 这帖很好!继续学习!
这老兄和我一样啊 我56了 ,原来只看看书今年才动手,用STC单片机下手。
主要是下载方便,那些教程大多没什么意义,还是自己动手好,我也是先看汇编,开始也是找不到北,又从C下手,主要是动手结合硬件,做些教程上没有的东西,这样累点,可收获最大,先搞了个PWM控制小电机,后搞了个SPWM,接着做了个电子称。设计了最新实用性温控器。现在搞RF无线控制。从今天3月开始到现在,每天好多时间都磨都想。只有相信自己,多看别人写的程序,找出相同点,规律。其实大多人都是一知半解,真正的程序高手写的最清楚最易懂。学习者都是在上面加了自己的东西,所以从程序上看就能看出水平来,相对开发芯片的人写出的程序最有范。
学会用DEBUG和仿真,反过来明白了汇编。但C还是快一些。硬件还是关键哈,把硬件搞好,软件一定能搞好。如硬件不过,程序总是会出错!!!当你能发现单片机功能上有问题了,你就可以了。单片机也是在进步。
我看咱们搞个老年单片机学习群吧!
一般各种定义在主程序中包含着,当然如果有其他程序定义也可以在其内部,不过主程序中需要到的必须在主程序中定义,无论哪个在前,程序都是从主程序开始执行,.......
Elecinfo版权
增值电信业务经营许可证:津B2-
天津网博互动科技有限公司旗下网站:

我要回帖

更多关于 单片机复习题 的文章

 

随机推荐