‘壹’ 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分别代表剪刀、石头、布。*/