『壹』 51單片機程序空間大小
AT89C52的程序空間是8KB是確認無疑的,但指的是存放純二進制的機器碼,就是二進制數。而KeilC編譯的HEX代碼文件並不是純二進制數,是以ASCII碼格式存放的文件,而且其中還有一些編譯信息,如地址、校驗和等。所以,不能看HEX文件的大小來確定下載到單片機內的真正的程序空間大小,也就是說HEX文件的大小並不是真正下載的單片機的程序大小。而下載到單片機的代碼空間大小要看Keilc編譯時給出的代碼數的提示,才是真正要下載到單片機內的代碼空間。舉個例子,下圖是一個程序編譯後的提示,真正的二進制代碼是337個位元組,而HEX文件卻是1KB。這里還有一個誤區,你看到的HEX文件的大小是操作系統給出的大小吧,它是取整KB的,就是說HEX文件不足1KB時,也顯示是1KB。
再明確一點說吧,假如編譯後的代碼是750418,用純二進制數(即BIN格式,有些匯編程序的編譯器輸出的就是BIN格式)的代碼保存就是3個位元組,而用HEX格式保存就是6個位元組,因為要用6個ASCII碼來表示。這來算來,HEX文件大小是BIN文件的二倍,加上一些地址信息,是大於二倍的。
好,回到你的問題來,你的HEX文件是19KB,你看一下編譯後的代碼大小提示,肯定是不會超過8KB的,否則編譯時肯定會報錯的。
『貳』 擲骰子游戲該怎麼用單片機做
就是產生一個隨機數,隨機數的產生,可以借用別人的隨機函數代碼,也可以通過高速自加1,中斷采樣的方式產生「偽隨機數」,比如主程序中可以讓一個變數i不停地從1加到6,如果指令周期為1us,那麼一秒內可以加幾十萬次,接一開關,按下後 外部中斷,讀出當時的i值,雖然i值是有規律的變化,不是隨機的,但是你控制不了最後能採到的值,絕對夠「隨機」了。
『叄』 怎麼用單片機模擬剪刀,石頭,布游戲
你說的情況比較特殊,輸入時刻本身就是一個隨機數,所以不需要硬體再產生隨機數了,那麼這種程序就可以有很多寫法了下面寫了一種不是很嚴謹的方法。假設P0.1接高電平為觸發信號,程序採用查詢方法檢測按鍵。
unsignedchar temp=3,i;
do
{
temp++
}while(p0.1==0);
i=temp-3*(temp/3);
i
/*i=1、2、3分別代表剪刀、石頭、布。*/