學過匯編沒有?好像是MOVE P1,0FDH ,然後move可以查出代表的二進制命令是什麼,P1可以查到代表的二進制地址,0FDH 也可以寫成二進制格式,然後就上面那句話就變成三個 二進制的代碼了。不知道把這些代碼寫成二進制文件燒進去行不行,沒試過,嘿嘿。
⑵ 請問怎麼用51單片機編程將2進制數轉化為ASCII碼,並且在1602上顯示出來
如果是ascii碼表內的符號值,那麼ascii值本身就可以認為是
16進制的(因為進制只是給人看的,單片機只有2進制,沒有ascii
和
hex
之分),但如果是hex值,經過ascii發送後,需要接收解出數值,那麼可以用這個函數:
uchar
ascii_tohex(uchar
ascii_data)
//ascii
轉
hex
函數
{
uchar
hex_data=0;
//定義
hex變數存儲轉換結果
if(ascii_data>='0'
&&
ascii_data<='9')
hex_data=ascii_data-'0';
//若
轉換內容為
字元'0-9',則轉成對應數字0-9
else
if(ascii_data>='a'
&&
ascii_data<='f')
hex_data=ascii_data-'a'+10;
//若
轉換內容為
字元'a-f',則轉成數字10-15
else
if(ascii_data>='a'
&&
ascii_data<='f')
hex_data=ascii_data-'a'+10;
//若
轉換內容為
字元'a-f',則轉成數字10-15
return
hex_data;
//返回轉換結果,非以上字元,不在hex(0-f)范圍內,默認0
}//
⑶ 51單片機的編程問題
1:C51編譯器如何區分位地址和位元組地址
是靠預定義實現的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者聲明了P0埠地址位於0x80,後者說明了P0埠的bit0,即P0.0位於位地址空間0x80處。這2個0x80具有完全不同的含義,靠關鍵字sfr和sbit來區別。這樣當程序被編譯時,編譯器會依此編譯成相應的匯編語言。例如:
C51語句: P0 = 1;
P0聲明為sfr,因此編譯成:mov 80h,01h,將把0x01數據送入0x80單元,由於0x80單元物理上對應P0埠,因此,P0.0腳將輸出高電平(其實是呈現高阻態,P0口獨有的),其他.1-.7腳輸出低電平。
C51語句: P0_0 = 1;
P0_0聲明為sbit,因此編譯成:setb 80h,這將把位地址空間的0x80地址的bit的值置1。這個位正是P0口的bit0,執行後,P0.0將輸出高阻態。而P0.1-.7不會變化。
2:C51為什麼要嵌套匯編
51單片機一個顯著優點就是指令執行時間固定,因此可以適應時序要求嚴格的場合。例如符合ISO7816協議的cpu卡的讀寫,對時序要求比較嚴格。其實就是用io腳做出來的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來組織,但是由於c編譯的不確定性,必須把底層程序封裝成匯編語言模塊嵌入到工程中。這就帶來幾個問題:如何聲明函數、參數如何傳遞等。限於篇幅,不能說得很細。下面舉例:
匯編程序單獨保存一個文件,加入到工程中,函數如下:
_proc_a:
mov a, r7
inc a
mov r7, a
ret
用c語言在.h文件中聲明: extern unsigned char proc_a(unsigned char val);
調用時形如: retvalue = proc_a(0x11);
說明:
a:匯編程序如果帶參數,則需要在匯編程序前多加一個下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。
b:函數的形參中第一參數用R7傳遞,函數返回值用R7返回,這是C51的通用規范。其他參數都有相應規定。函數可以返回一個位,用psw的c位返回。c:上面的語句,執行順序是把0x11給R7,然後跳轉子程序,子程序將它加1後送回。
d:函數跳轉到匯編程序時,本區的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調用後是否要恢復這些常規資源。上例中,A的值被函數使用了,編程者不必恢復調用前的值。
⑷ 怎樣給單片機編程
看你用的是什麼類型的單片機,一般來說51系列的是入門級的也很好用,資料很多。你把編的程序經過編譯後,形成一個最終的二進制文件,然後利用編程器寫入單片機晶元中,然後把寫了程序的晶元安裝或焊接在電路中進行測試,最好的辦法是用一些學習板或開發測試板,因為那樣可以免去焊來焊去之苦。
當然你用STC(宏晶)片子,也可以事先做好電路,然後用STC下載線把你編制的程序寫到晶元中。
另外,對於單片機技術,你不僅會編程,還要會電路設計,因為不同的電路設計有不同的程序與之對應,單片機編程與電路設計是分不開的。
⑸ 單片機中二進制怎麼表示
單片機編程 匯編中 十進制 後面加D ,十六進制後邊加H, 二進制後面加B。 比如 10進制 35D, 16進制 23H, 二進制 0010 0011B.
c語言中 十進制 不加前綴, 十六進制前邊加 0x , 8進制前邊加0 , 二進制不能直接表示(比較麻煩), 如 10進制 15 , 16進制 0x25 , 8進制 025
⑹ 單片機怎麼處理一個多位的二進制數據,怎麼存儲呢。我舉例說明。
你好!
8位的單片機,long型變數也只有32位,你說是一次收到一個bit的數據,共40bit的數據?每8個bit存為一個byte,
共折在五個byte不就存下了么
僅代表個人觀點,不喜勿噴,謝謝。
⑺ 單片機十進制轉二進制的程序
#include<stdio.h>
#define MAX 32
int main(void)
{
int i=0,n,a[MAX];
printf("請輸入一個十進制整數:\n");
scanf("%d",&n);
while (n>0) //循環過程的始終,判斷n是否能被2除盡
{
a[i] = n%2; //用數組存儲每次除以2之後的余數,即斷定奇偶性,對應二進制位上數值
i = i+1;
n = n/2;
}
printf("十進制整數轉換為二進制數是:\n");
for(; i > 0; i--)
printf("%d",a[i-1]);
printf("\n");
return 0;
}
⑻ 8051單片機編程時,怎麼把二進制數變成十進制數
這個就是16進制轉10進制。
看你的數據范圍了。
只有一個位元組的話,最簡單就是 循環減10。
多位元組的話,減起來就太慢了。
可以用位權來加。移位判斷,是1就加,0不加,第0位加1,第1位加2,第3位4,這樣。
⑼ 單片機如何燒錄二進制的機器代碼
一是用編程器,二是有在線編程功能的如STC12系列,AVR單片機等等可以用相應的下載軟體直接在線編程。
⑽ 單片機二進制數怎麼用數組表示
十六進製表示即可(BM1,BM2,BM3,BM4,BM5,BM6,BM7,BM8),如果BM1是低位,BM8是高位,只用6個位,那麼1100 0000 = 0xC0 等等等等
把要用的16進制寫到數組裡面 unsigned char arr[]={0xC0, 0xE0};要寫多少隨你自己了
兩個埠比較麻煩,例如做一個函數,可以輸入數組參數,把參數分別賦值給P4,P2