導航:首頁 > 操作系統 > h269a單片機

h269a單片機

發布時間:2022-07-08 03:01:39

⑴ 51單片機intrinsic.h怎麼用

頭文件就相當於一組自定義函數或者一些聲明。其實沒什麼使用方法。你在使用include<aaa.h>時,就如同你把aaa.h中的內容全部復制到添加路徑include<aaa.h>的地方。
具體我們看下面:

/*--------------------------------------------------------------------------
INTRINS.H
IntrinsicfunctionsforC51.
--------------------------------------------------------------------------*/
#ifndef__INTRINS_H__
#define__INTRINS_H__
#pragmaSAVE
#ifdefined(__CX2__)
#pragmaFUNCTIONS(STATIC)
/*,butneedstaticattribute*/
#endif
externvoid_nop_(void);
externbit_testbit_(bit);
externunsignedchar_cror_(unsignedchar,unsignedchar);
externunsignedint_iror_(unsignedint,unsignedchar);
externunsignedlong_lror_(unsignedlong,unsignedchar);
externunsignedchar_crol_(unsignedchar,unsignedchar);
externunsignedint_irol_(unsignedint,unsignedchar);
externunsignedlong_lrol_(unsignedlong,unsignedchar);
externunsignedchar_chkfloat_(float);
#ifdefined(__CX2__)
externintabs(int);
externvoid_illop_(void);
#endif
#if!defined(__CX2__)
externvoid_push_(unsignedchar_sfr);
externvoid_pop_(unsignedchar_sfr);
#endif
#pragmaRESTORE
#endif

以上是intrins.h的具體內容。


逐一分析。
1.#ifndef,#define,#endif
#ifndef __INTRINS_H__
#define __INTRINS_H__
#define qwerty
...
#define tyuio
#endif
這是一組。功能是條件編譯。ifndef是if not defined,如果沒有定義__INTRINS_H__,那咱們就定義吧,下一條就是#define __INTRINS_H__。一直到最後終止endif。
使用目的:如果編譯時,系統已有intrins.h的定義,則不編譯以下內容,若系統沒有定義標識則編譯內容。

例如,我們有一個數據類型,在Windows平台中,應該使用long類型表示,而在其他平台應該使用float表示,這樣往往需要對源程序作必要的修改,這就降低了程序的通用性。可以用以下的條件編譯:

#ifdefWINDOWS
#defineMYTYPElong
#else
#defineMYTYPEfloat
#endif

如果在Windows上編譯程序,則可以在程序的開始加上#define WINDOWS
這樣則編譯命令行:#define MYTYPE long。
如果在這組條件編譯命令之前曾出現以下命令行:#define WINDOWS 0
則預編譯後程序中的MYTYPE都用float代替。這樣,源程序可以不必作任何修改就可以用於不同類型的計算機系統。


(#pragma先略過)
2.extern
Extern用在變數/函數聲明前,表明該變數/函數是在別處定義的。Extern void nop (void)表示其他地方有定義過函數nop(void),此處引用。
首先強調一點。頭文件中的定義都不是全局變數,但是因為一直寫在開頭所以總是被最先編譯。如果在xxx.h中定義int key,想在多個文件中使用A.c,B.h,…,編譯不會通過。因為頭文件中的內容如同照抄在include<xxx.h>處。即:在A和B中都定義了一次這個全局變數key(重復定義)。正確做法是在A.c中定義,在B.h中用extern+A.c中的定義,相反也行。
extern unsigned char _cror_ (unsigned char, unsigned char);表示聲明一個叫_cror_ 的函數,兩個參變數,返回unsigned char型的函數。等等。

_crol_字元循環左移
_cror_字元循環右移
_irol_整數循環左移
_iror_整數循環右移
_lrol_長整數循環左移
_lror_長整數循環右移
_nop_空操作8051NOP指令

說明一下,上面的這些函數雖然是外部定義的。但是很難找到定義的地點。可能在某個系統的dll文件中。使用時不必拘泥過多,直接使用就行。具體函數幹些什麼你也可以自己網路。這里不展開了。


3.#pragma
這是預編譯指令,也可以叫編譯器指令。初學者不必深究。換句話說,即使完全不理解也不影響你單片機的學習。
#pragma SAVE表示把當前設定放入保存堆棧。
#pragma RESTORE一直和SAVE組合使用,吧保存堆棧中的內容存儲起來。他們是一組,一般共同使用。


還有剩餘的一些其實就和上面講的是一個類型。無非就是條件編譯和預編譯指令,和你關系不大這里就不展開了。

綜合一下。看一個例子:

voidhahaha(inta,charb);//實際上你打開一個單片機的project,裡面有reg51.h和intrins.h。這句話就如同intrins.h的功能,僅僅是聲明。
main()
{
hahaha(qwe,rty);
}
voidhahaha(inta,charb);//這句話就如同reg51.h的功能,定義了一些函數。
{
a=a++;
b=b--;
}

當你include<reg51.h>include<intrins.h>後,就如同頭文件的內容全部抄到你自己寫的函數的最上面。

⑵ 設計一個單片機雙機通信系統,並編寫通信程序

串口調試助手是PC端的軟體,用來從PC的串口發送和接收數據的。我們調試PC和單片機之間通訊的時候用來模擬PC端應用軟體給單片機發送數據和接收單片機發送的數據的。你調試的是單片機和單片機之間的通訊,不適合用串口調試助手的。
但是單片機和單片機通訊不容易知道實際通訊的數據,所以存在很大的調試難度。如果條件允許的話,一般是通過單片機連PC串口,讓PC模擬模塊收發數據來驗證串口通訊是否正常(PC端能夠直接看到單片機發送的數據,從而判斷程序是否符合同模塊的通訊要求),再把PC換成模塊進行通訊。這樣調試比較方便。

你和模塊通訊也是單純的串口通訊。
我又仔細分析了一下你的系統,按你的意思應該是拿51單片機做上位機。習慣上我們把PC稱為上位機,所以剛才沒明白。

1、SMOD是用來給串口波特率硬體倍頻的。在串口模式1,2,3下,如果SMOD=0波特率是4800,那麼SMOD=1時波特率是9600。它存在的理由就是:如果要求的波特率非常快,在給定晶振條件下SMOD=0已經滿足不了,才需要SMOD=1倍頻。
比如你11.0592MHZ在SMOD=0時波特率最大28800bps達不到要求的57600bps,所以你要用SMOD=1倍頻才能實現。
你串口要選擇模式1,波特率是可變的,取決於定時器1的溢出速率:
波特率=(2SMOD÷32)×定時器1 溢出速率
通常會使用定時器1 工作在定時器工作模式2下,這時定時值中的TL1 做為計數,TH1 做為自動重裝值 ,這個定時模式下,定時器溢出後,TH1 的值會自動裝載到TL1,再次開始計數,這樣可以不用軟體去干預,使得定時更准確。在這個定時模式2 下定時器1 溢出速率的計算公式如下:
溢出速率=(計數速率)/(256-TH1) ;
計數速率= 11.0592M/12;
算了一下是TH1=255(#0FFH);就是計數器走一個計數周期。

2、你不用關心什麼叫做數據包,只是一種形象的叫法。把一串數據作為一次通訊的內容,這一串數據就是一個包了。那個2位和4位只是寫法上便於你理解的,
如01H +0000H + 01H + 03H + 0005H
對應上面的包格式解釋0000H是地址碼保留字0005H是校驗和。
而串口通訊一幀只能發送一個位元組。發送的時候只能 01H + 00H +00H + 01H + 03H + 00H + 05H 依序發送。
用匯編寫的話流程就是 寫入第一個位元組01H到SBUF,等待直到TI=1,發送第二個位元組00H,等待直到TI=1,發送第三個位元組00H,如此循環直到發送完05H為止。

3、類似發送,應答8181H也是81H+81H兩個位元組回復的。可以用中斷,也可以用查詢。例如2的發送通訊中05H發送完之後就要開始查詢RI直到RI=1,然後就把 SBUF中的位元組讀出來,是81H,清RI後再查詢RI直到RI=1,把 SBUF中的位元組讀出來,是81H,清RI。如果判斷兩個接收的都是81H那就表明收包正確。

4、串口通訊一幀只能發送一個位元組。這個就不是問題了。

+我hi交流,不留Q,不留程序。

⑶ 急求!!!哪位朋友指點下單片機程序題。。

ANL A, #17H; (A)=多少A是怎麼算出來的求解

⑷ 單片機習題解答

39. RC A為循環左移指令(F ) 40.MOV A,30H為立即定址方式( F ) 41.如果發生除法溢出錯誤,則PSW標志位P置1。(F ) 42.如JC rel發生跳轉時,目標地址為當前地址加上偏移量rel( T ) 43..MOV A,@A+DPTR是一條查詢指令( F ) 44.MUL AB的執行結果是高8位在A中,低8 位在B中( F ) 45.離散信號都是數字信號( F ) 46.在A/D變換時,抽樣頻率越高越好( F ) 47.CPU對內部RAM和外部RAM的讀寫速度一樣快( F ) 48.對於8051單片機,當CPU對內部程序存儲器定址超過4K時,系統會自動在外部程序存儲器中定址( F) 49.外加晶振頻率越高,系統運算速度也就越快,系統性能也就越好( F ) 50.(-86)原=11010110 (-86)反=10101001 (-86)補=10101010 ( T )
51.我們所說的計算機實質上是計算機的硬體系統與軟體系統的總稱。 ( T )
52.MCS-51的相對轉移指令最大負跳距是127B。 ( T)
53.MCS-51的特殊功能寄存器分布在60H~80H地址范圍內。( F )
54.要MCS-51系統中,一個機器周期等於1.5μs。( F,1us )
55、片內RAM與外部設備統一編址時,需要專門的輸入/輸出指令。( T )
56、MOV A, R0,這是寄存器定址方式。 ( T )
57、8051單片機的P0口既可以做數據口線又可以做為地址口線 。 ( T)
58、CPU和外設之間的數據傳送方式主要有查詢方式和中斷方式,兩者相比後者的效率更高。 ( T)
59、8051內部有4K的程序存儲器 ( F,8kB )
60、MCS-51單片機共有兩個時鍾XTAL1 和XTAL2 ( T )
61、五個中斷源中優先順序是高的是外部中斷0,優先順序是低的是串列口中斷 ( T如果是8051單片機,8052就不對了 )
62、工作寄存器工作在0區,則R2 所對應的內部數據存儲器的地址是03H 。( F)
63、MOVC A @A +DPTR ,這是條相對定址指令 ( T )
64、8051單片機的P2口只能用作通用I/O 口 ( T )
65、程序存儲器和數據存儲器的作用不同,程序存儲器一般用存放數據表格和程序,而數據存儲器一般用來存放數據 ( T )
66、要進行多機通信,MCS-51串列介面的工作方式應為方式1。 ( F )
67、TMOD中的GATE=1時,表示由兩個信號控制定時器的啟停。 ( T )。
68、MCS-51外擴I/O口與外RAM是統一編址的。 ( F )。
69、使用8751且 =1時,仍可外擴64KB的程序存儲器。( T)
70、8155晶元內具有256B的靜態RAM,2個8位和1個6位的可編程並行I/O口,1個14位定時期等常用部件及地址鎖存器。(T )
71、我們所說的計算機實質上是計算機的硬體系統與軟體系統的總稱。 ( T )
72、.MCS-51上電復位時,SBUF=00H。 ( F )。 SBUF不定。
73、使用可編程介面必須處始化。 ( T )。
74.8155的復位引腳可與89C51的復位引腳直接相連。( 不知道 )
75.MCS-51是微處理器。( F )不是。
76.MCS-51系統可以沒有復位電路。( F)不可以。復位是單片機的初始化操作。
77.要MCS-51系統中,一個機器周期等於1.5μs。( F,12mhZ )若晶振頻率屢8MHz,才可能為1.5μs
78.計算機中常作的碼制有原碼、反碼和補碼( T )
79.若不使用MCS-51片內存器引腳EA必須接地. ( T )

⑸ 單片機學習,請大家幫忙

;已知A=7AH,R0=30H,(30H)=A5H,PSW=80H,請按要求填寫各指令的執行結果(每條指令均按已給定的原始數據進行操作)

;首先 先說一下 PSW寄存器(程序狀態寄存器) 是一個8為特殊寄存器,它的各位包含程序執行後
;的狀態信息 供程序查詢或判別之用;
; 分別是是 CY(借,進) AC(鋪進) F0 (用戶標定) RS1 (寄存器選擇)
; RS0 (寄存器選擇) OV (溢出) - (保留) P (奇/偶)
;OV(PSW.2) 溢出標志位 。當進行補碼運算時 如果有溢出。即超出-128~127的范圍時
;或者 進行加減運算時 超過 8位二進制(255)
;OV由硬體自動置一,無溢出時為0
ORG 0000H
MOV A ,#7AH ;OV=0;
MOV R0,#30H ;0V=0;
MOV 30H,#0A5H ;OV=0;
MOV PSW,#80H ;(OV=0) CY=1;J進位為1;
ADD A,R0 ;(OV=(1) CY=0;07AH+30H=AAH (十進制=170) 故 A=AAH因為有溢出

ADD A,30H ;(OV=1) CY=1; AAH+A5H=14F (335) 現在A=14F(335)已經超過8位最大值FFH(255)
;故 A有溢出 OV=1; A=14FH(335)-FFH(255)-CY=4FH(79);
ADD A,#30H ;;(OV=0) 因為現在 A=4FH(79)+30H (48)=7FH(127) 小於FFH(255) OV=0; CY=0
ADDC A,30H ; (OV=0) CY=1 ;7FH(127)+A5H=123H(291)-FFH(255)=24H()
SUBB A,30H ; (OV=0) A=7EH
SUBB A,#30H ; (OV=0) A=4DH
SJMP $

end

⑹ 單片機中 A=4EH,B=5DH,MUL AB 怎麼計算的結果是AB=1C56H怎麼來的

列算式就可以知道怎麼得到的了:
01001110 ;A=4EH,
01011101 ;B=5DH,
------------------------;x;MUL AB
01001110
00000000
01001110
01001110
01001110
00000000
01001110
00000000
---------------------------------------------
0001110001010110
四位一組 0001 1100 0101 0110B,即1C56H。
其實乘法就是移位再累加。

⑺ 單片機 ORL C,/H是什麼意思

單片機中 ORL C,/H的意思是將借位C與「位變數」H取反後進行「邏輯或」運算。
布爾操作指令ORL 為邏輯或的意思
C是狀態寄存器PSW的PSW.7位,借位或進位標志
/H,是用戶自定義的位變數,地址為是20H~2FH中的某一位。

⑻ 單片機原理,"ANL A , # 0F H "這條"與"指令的作用

這條指令的作用是將累加器A的高四位屏蔽掉,保留低四位。

⑼ 單片機,10000H-7DH怎麼計算的求詳細計算過程

1

2

3

51

單片機

C

語言程序(二)定時

/

計數器

中斷

程序一

利用定時

/

計數器

T0

P1.0

輸出周期為

1s

的方波,

讓發光二極體以

1HZ

閃爍,

#include<reg52.h>

//52

單片機頭文件

#include<intrins.h>//

包含有左右循環移位子函數的庫

#defineuintunsignedint

//

宏定義

#defineucharunsignedchar

//

宏定義

sbitP1_0=P1^0;

uchartt;

voidmain()

//

主函數

{

TMOD=0x01;//

設置定時器

0

為工作方式

1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//

開總中斷

ET0=1;//

開定時器

0

中斷

TR0=1;//

啟動定時器

0

while(1);//

等待中斷產生

}

單片機系統開發,2021最新報價!立即圍觀!

廣告單片機系統開發意法半導體包含廣泛產品線包含低成本8位單片機和具備豐富外設選擇的單片機系統開發單片機。查看詳情 >

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==20)

{

tt=0;

P1_0=~P1_0;

}

}

程序二

利用定時

/

計數器

T1

產生定時時鍾

,

P1

口控制

8

個發光二極體

,

使

8

個指示燈依次一個一個閃動,

閃動頻率為

10

/

(8

個燈依次亮一遍為一個周期

)

,循環。

#include<reg52.h>

//52

單片機頭文件

#include<intrins.h>//

包含有左右循環移位子函數的庫

#defineuintunsignedint

//

宏定義

#defineucharunsignedchar

//

宏定義

華清遠見c語言單片機,新手入門-實戰教學,嵌入式開發

廣告c語言單片機,華清遠見自主研發,軟硬體結合教學,畢業相當於擁有1-3年工作經驗。查看詳情 >

sbitP1_0=P1^0;

uchartt,a;

voidmain()

//

主函數

{

TMOD=0x01;//

設置定時器

0

為工作方式

1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//

開總中斷

ET0=1;//

開定時器

0

中斷

TR0=1;//

啟動定時器

0

a=0xfe;

while(1);//

等待中斷產生

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==2)

{

tt=0;

網路安全OTA-專業,可靠的單片機ota,初創企業免費申領

廣告2萬台設備OTA額度面向初創企業【免費開放】,為企業降低OTA成本,提高設備安全系數。查看詳情 >

P1=a;

a=_crol_(a,1);

}

}

程序三

同時用兩個定時器控制蜂鳴器發聲,

定時器

0

控制頻率,定時器

1

控制同個

頻率持續的時間,間隔

2s

依次輸出

1

10

50,100

200,400,800,

1k

hz

)的方波

#include<reg52.h>

//52

單片機頭文件

#include<intrins.h>//

包含有左右循環移位子函數的庫

#defineuintunsignedint

//

宏定義

#defineucharunsignedchar

//

宏定義

sbitbeep=P2^3;

uchartt;

uintfre,flag;

voidmain()

//

主函數

{

fre=50000;

活字格-企業級低代碼開發平台,軟博會獲獎產品

廣告可視化設計,快速開發企業Web應用,幫助用戶快速構建支持移動端的企業級應用程序,滿足企查看詳情 >

beep=0;

TMOD=0x11;//

設置定時器

0,

定時器

1

為工作方式

1

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;//

開總中斷

ET0=1;//

開定時器

0

中斷

ET1=1;

TR1=1;

TR0=1;//

啟動定時器

0

while(1);//

等待中斷產生

}

voidtimer0()interrupt1

//

定時器

0

中斷

{

TR0=0;

//

進中斷後先把定時器

0

中斷關閉,防止內部程序過

多而造成中斷丟失

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

tt++;

if(flag<40)

//

以下幾個

if

分別用來選取不同的頻率


等,希望以上內容能對你有所幫助、。

閱讀全文

與h269a單片機相關的資料

熱點內容
文件夾變成了 瀏覽:558
linuxpython綠色版 瀏覽:431
怎麼下載小愛同學音箱app 瀏覽:554
python佔位符作用 瀏覽:76
javajdbcpdf 瀏覽:541
php網頁模板下載 瀏覽:192
python試講課pygame 瀏覽:409
安居客的文件夾名稱 瀏覽:677
家裡伺服器如何玩 瀏覽:449
網站源碼使用視頻 瀏覽:746
stc89c52單片機最小系統 瀏覽:452
郵件安全證書加密 瀏覽:416
雲伺服器如何訪問百度 瀏覽:279
常州電信伺服器dns地址 瀏覽:839
用小方塊製作解壓方塊 瀏覽:42
圖像壓縮編碼實現 瀏覽:68
特色功能高拋低吸線副圖指標源碼 瀏覽:71
西方哲學史pdf羅素 瀏覽:874
python最常用模塊 瀏覽:184
溫州直播系統源碼 瀏覽:112