㈠ 单片机的一些题目 求助
控制步进电机好办,你要做产品,步进电机一般肯定要用步进电机控制器的,所以发脉冲和方向信号就可以控制其运动了。至于压力传感器的信号肯定要做AD处理才能接入到单片机了。
㈡ 单片机 汇编语言 求助。
ORG 0000H ;汇编标志,伪指令,就是单片机不执行
;的,表示汇编时从程序地址0000H开始
RESET:AJMP MAIN ;跳转到MAIN
ORG 000BH ;同上,从000BH开始
AJMP ITOP ;跳转到ITOP,不要用LCALL
ORG 0100H ;继续伪指令...从0100H开始
MAIN: MOV SP,#60H ;堆栈从61H开始
MOV TMOD,#01H ; 定时器0在16位方式下工作
ACALL PTOMO ;调用PTOMO
HERE: AJMP HERE ;跳转到HERE
PTOMO:MOV TLO,#0CH ;这句打错了,是TL0
MOV THO,#0FEH ;也错了,是TH0
;这两句是给T0赋初值
SETB TR0 ;启动定时器T0
SETB ET0 ;允许T0中断
SETB EA ;中断使能
RET ;返回
ITOP:MOV TLO,#0CH ;和PTOMO的前两句是一样的
MOV TH0,#0FEH ;这个就打对了呢~~
CPL P1.0 ;P1.0取反
RETI ;中断返回
定时器的内容就看书吧~
RET
调用返回,弹出堆栈顶的两字节作为PC值,然后转向这个地址
RETI
中断返回,除了RET的功能外,还会改变一些其它寄存器的值,比如中断优先标志等等...
PC
指向当前执行语句的下一条语句
单片机执行一条指令可以分为两个阶段:取指令 、执行指令
在取指令阶段PC会自动增加,增加值为当前要执行指令字节数
跳转、调用、返回指令会在执行阶段改变PC内容
假设
ACALL这句地址为 0104H,
HERE为0106H,
PTOMO 为0108H,
ITOP为XXXXH
执行过程如下:
首先从0000H开始
AJMP MAIN 取指时PC=0002H 执行后PC=0100H,下一条执行MAIN
MAIN执行到MOV TMOD,#01H这句时 PC=0104H
到ACALL ... 的时候,先取指令,PC=0106H,再执行ACALL
ACALL执行时,先将PC值0106H压栈,然后将PC改为PTOMO这句的值,也就是PC=0108H
接下来到PTOMO这句,取指,PC增加,执行......直到RET
执行RET时,取指阶段后PC=XXXXH,然后执行时将0106H弹回PC
于是到HERE这句,取指,PC=0108H, 执行,将PC改为0106H
响应中断时,先将当前PC压栈,然后机器内部自动执行一条调用指令,执行000BH地址的指令
然后又是转移,去执行ITOP,直到RETI
如果单片机是在执行完HERE这句响应中断,会返回到HERE处
否则,也可能返回到PTOMO这句...
此外,我猜测,PTOMO、ITOP中的O可能也是0,不过这个就无所谓了~
================ 以上
㈢ 单片机原理…程序段分析…求助
第一行:SP=51H,(51H)=F0H,因为这一句是将ACC压栈,也就是被压进了(51H)中;
第二行:SP=52H,(52H)=0FH,因为这一句是把B压栈,压进了(52H)中;
第三行:SP=51H,A=0FH,这一句是出栈到ACC中,也就是把刚才(52H)的内容出栈到ACC;
第四行:SP=50H,B=F0H,这一句是出栈到B中,也就是把刚才(51H)的内容出栈到B。
这个小程序段就是练习如何利用栈来高效率地交换数据或者重排数据。
㈣ 北京市应届毕业生单片机就业方向求助
先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很
大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,
不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,
而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那
些管脚的电平什么时候输出高,什么时候输出低。由这些高低电平的变化来控制你的系统板,实现我们需要
的各个功能。
至于看书,只需大概了解单片机各管脚都是干什么的?能实现什么样的功能?第一次,第二次
你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天的就够了,看小说你一天能看五六本,看单片机你两三天看两三遍就够了,可以不用仔细的看。推荐一本书,就这一本就足够,书名是《新编MCS-51单片机应用设计》,是哈尔滨工业大学出版社出的的,作者是张毅刚。大概了解一下书上的内容,然后实践,这是非常关键的,如果说学单片机你不实践那是不可能学会的,关于实
践有两种方法你可以选择,一种方法:你自己花钱买一块单片机的学习板,不要求功能太全的,对于初学者
来说你买功能非常多的那种板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘
、矩阵键盘、AD或DA(原理一样)、液晶、蜂鸣器,这就差不多了。如果上面我提到的这些,你能熟练应用
,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。只要过
了第一关,后面的路就好走多了,万事开头难,大家可能都听过。方法二:你身边如果有单片机方面的高手
,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板只需要一分钟的时
间,而对于初学者可就难多了,因为只有对硬件了解了,才能熟练运用。而如果你身边没有这样的高手,又
找不到可以帮助你的人,那我劝你最好是自己买上一块,毕竟自己有一块要方便的多,以后做单片机类的小
实验时都能用得上,还省事。
有了单片机学习板之后你就要多练习,最好是自己有台电脑,一天少看电影,少打游戏,把学习板和电脑连
好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个
流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在
学习知识,而是在玩,当你编写的程序按你的意愿实现时你比做什么事都开心,你会上瘾的,真的。做电子
类的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了,你已经开始考虑你这辈子要
走哪一行了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人
,当得到解答后你会记住一辈子的,知识必须用于现实生活中,解决实际问题,这样才能发挥它的作用,你
自己好好想想,上了这么多年大学,天天上课,你在课堂上学到了什么?是不是为了期末考试而忙碌呢?考
完得了90分,哈哈哈好高兴啊,下学期开学回来忘的一干二净,是不是?你学到什么了?但是我告诉你单片
机一旦学会,永远不会忘了。另外我再说说用汇编和C语言编程的问题。很多同学大一二就开设了C语言的课
,我也上过,我知道那时天天就是几乘几,几加几啊,求个阶乘啊。学完了有什么用?让你用C语言编单片
机的程序你是不是就傻了?书上的东西我们必须要会运用。单片机编程用C语言或汇编语言都可以,但是我
建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C
语言也挺简单,只是一门工具而已,我劝你最好学会,将来肯定用得着,要不你以后也得学,你一点汇编都
不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。汇编写程序代码效率高,但相对难度较大,而
且很罗嗦,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完
全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写
的任何代码,C语言的资料又多又好找,将来可移植性非常好,只需要变一个IO口写个温度传感器的程序在
哪里都能用,所以我劝大家用C语言。
总结上面,只要你有信心,做事能坚持到底,有不成功不放弃的强烈意志,那学个单片机来说就是件非常容
易的事。
步骤:1.找本书大概了解一下单片机结构,大概了解就行。不用都看懂,又不让你出书的。(三天)
2.找学习板练习编写程序,学单片机就是练编程序,遇到不会的再问人或查书。我当初就是买了一块开发板
(http://www.kaifaban.com/html/2006111423012559.html),二十天就搞定了。
3.自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。 (十天)
4.自己完全设计具有个人风格的电路,产品,。。。你已经是高手了。 。。。。
看到了吗?下功夫一个多月你就能成为高手,我就讲这么多了,学不学得会,下不下得了功夫就看你的了
回答者:匿名 3-3 20:33
提问者对于答案的评价:谢谢你!看了你的手写,我信心大曾,相信我一定能学会它,可以留个QQ号么
㈤ 简单的单片机程序求助(c语言)
我来好了,很简单:
#include<reg52.h>
sbit key1=P1^0;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit light1=P3^2;
sbit light1=P3^3;
sbit light1=P3^4;
sbit light1=P3^5;
#define uchar unsigned char
#define uint unsigned int;
display(uchar );
delay(uchar);
uchar scan();
void main()
{
while(1)
{
display(scan());
}
}
delay(uchar x) //延时小程序
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
uchar scan()
{
if(key1==0)
{
delay(50); //去抖动
if(key1==0)
P3^2=0; //段选你自己控制显示多少吧,在上一句加上
while(!key1);
}
if(key2==0)
{
delay(50);
if(key2==0)
P3^3=0; //段选你自己控制显示多少吧,在上一句加上
while(!key2);
}
if(key3==0)
{
delay(50);
if(key3==0)
P3^4=0; //段选你自己控制显示多少吧,在上一句加上
while(!key3);
}
if(key4==0)
{
delay(50);
if(key4==0)
P3^5=0; //段选你自己控制显示多少吧,在上一句加上
while(!key4); //四间盘检测
}
}