1. C語言 單片機
1、您的程序是通過模擬串口接收一個位元組數據的uint8 UART_rev_byte(void)。
2、這部分利用定時器產生波特率。
TR0 = 1;
TL0 = 256 - MCLK/(12*BAUD_RATE)/2;
WAIT_TIME();
WAIT_TIME();
3、RXD應該是模擬串口的接收數據線,看完整的程序應該有定義如sbit RXD=P1.0,這里用P1.0來模擬RXD。
while (len--)
{
dat >>= 1;
if (RXD2)
dat |= 0x80;
WAIT_TIME();
}
這段程序把RXD線上的數據位從高位移入data這個變數,比如收到的數據為C6即1010 0110,串口數據發送是低位在先,所以在RXD數據上的數據位依次為0110 0101
while循環執行過程:
00000000>>=1得到00000000(第一位為0)所以dat=0000 0000--dat>>=1得00000000(第二位RXD=1所以)dat|=0x80即dat=0000 0000|1000 0000=10000000,把數據線上的1移入dat的高位…………如此執行8次,即可以把RXD最先接收的0移到最右邊,RXD接收到的第二個位1移到第二位,………………把數據線上依次接收到的八位二進數據位0110 0101經過八次從高位往低位移入後可以得到1010 0110。
4、最後返回的dat就是返回接收到的位元組數據。
2. 單片機c語言和普通c有什麼驅別
單片機中的C是用來控制各個管腳也即硬體的
所以包含了很多操作相關的寄存器設置
它們一般都包括在include<reg52.h>之類的頭文件中的
你如果沒有看過單片機那麼你看不懂單片機程序很正常
還有單片機的程序運行也和C的不太一樣
單片機可以多線程運行互不幹擾(比如中斷的運行,這和我們純C學的是不太一樣的)
單片機畢竟只是一個幾十個管腳的晶元,因此只用到了C的一部分常用知識。
因此如果想單純考級,就看譚浩強的《C語言程序設計》
如果想看單片機,就看完那本書之後,再看郭天祥的《十天學會單片機教程(視頻)》。
3. 請問單片機所用的C語言,是C還是C++還是C+
單片機分兩種,一種是不帶操作系統的,如51系列,用c和匯編開發,且很多編譯器兩種語言混合使用。另一種帶操作系統,如ARM,把系統移植到單片機後,用c或者c++開發應用程序都可以,具體開系統的
4. 單片機中c/T非是什麼
是單片機特殊功能寄存器TMOD中的一個位(TMOD有兩個C/T,D6、D2 ,分別控制定時器T1 和T0 ),主要用於改變定時/計數器的工作狀態,C/T=1時對外計數,C/T=0是對內定時。
5. C語言單片機
#include<reg51.h> //51單片機
sbit P1_0=P1^0;
void delay(unsigned char i);
void main()
{
P1=0xfe;//給初始化值
while(1)
{
delay(100);
P1<<=1;//左移一位
P1|=0x01;//最後一位補1
if(P1==0x7f)//檢測是否移到最左端?
{
delay(100);//delay
P1=0xfe;
}
}
}
void delay(unsigned char i)
{
unsigned char j,k;
for(k=0;k<i;k++)
for(j=0;j<255;j++);
}
6. C語言與單片機
假設你的輸入模塊接到P1.0上(你可以自己修改程序符合硬體電路)
#include<reg51.h>
#define uchar unsigned char
uchar dat;
sbit p10=P1^0;
bit flag;
main()
{
TMOD=0x20;
TH0=0xfd;
TL0=0xfd;
SCON=0x50;
TR1=1;
while(1)
{
if(flag!=p10)
{
dat=p10;
flag=p10;
SBUF=dat;
while(!TI);
TI=0;
}
}
}
7. 單片機和c有什麼聯系
C語言寫成的程序,經過 編譯器匯編(通常是叫keil的工具),可以形成16進制的機器碼。這樣的機器碼(就是C語言程序編譯形成的)燒錄進單片機里,形成單片機的程序。單片機按照程序進行動作。
同樣也可以用匯編語言來寫程序,經過編譯同樣可以形成機器碼。
不過用於單片機的C語言有些特定格式,包含一些頭文件。在這些文件中定義了單片機的埠等,可以直接引用並對其賦值,而中斷函數也有特定的形式。所以說想要用C語言對單片機進行編程還要對頭文件進行一定的了解。詳細可查詢有關單片機的技術手冊
以上為個人說明 絕非復制黏貼
8. 在單片機匯編語言中c是什麼意思
C為進借位標志位,就是CY
意思是兩數相加(ADDC指令)有進位就置C為1,兩數減(SUBB指令)有借位就置C為1,
上面兩種請況C的置1是系統自動的。
另外還可以自己對C進行操作 指令如下:
MOV C, bit 將bit位地址中的值送PSW中的進位標志位CY
MOV bit, C 將PSW中的進位標志位CY的值送bit位地址中
CLR C 將進位標志位CY清0
SETB C 將進位標志位CY置1
ANL C, bit 將Cy和bit位地址中的值進行與操作後,結果送Cy
ANL C, /bit bit位地址中的值取反後再與Cy進行與操作,結構送Cy
ORL C, bit 將Cy和bit位地址中的值進行或操作後,結果送Cy
ORL C, /bit bit位地址中的值取反後再與Cy進行或操作,結構送Cy
CPL C 將Cy取反
還可以根據C的狀態分別執行轉移指令,如下
JC rel If(C=1)轉移到rel處執行指令
JNC rel If(C=0)轉移到rel處執行指令。
9. c語言單片機
我想先問問發題人為什麼要問這個問題,想用這代碼做什麼,第一:如果非必要盡量不要寫一個平方根的演算法,因為浮點運算對8051開銷太大了,盡量避免浮點運算。第二:涉及到對底層操作用c的話只能嵌入匯編語句。第三:對於這個問題我們完全可以換一個思路,為什麼非要編一個平方根的演算法呢?一共就11個數完全可以先把結果存起來再判斷25H里是什麼數到時候再把對應的數據拉出來就行了!