㈠ 單片機的一些題目 求助
控制步進電機好辦,你要做產品,步進電機一般肯定要用步進電機控制器的,所以發脈沖和方向信號就可以控制其運動了。至於壓力感測器的信號肯定要做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); //四間盤檢測
}
}