“数”的地方,为什么变成了一个问号?
加一个\XFD就可以解决这个问题:
2.11 Keil软件中因含 OxFD 编码的汉字而出现乱码的问题众所周知,Keil 软件的 8051 和 80251 编译器的所有版本都有一个叫做0xFD 的问题,主要表现在字符串中不能含有带OxFD编码的汉字,否则Keil软件在编译时会跳过OxFD而出现乱码。
关于这个问题,Keil官方的回应是:Oxfd、Oxfe、Oxff这3个字符编码被Keil编译器内部使用,所以代码中若包含有Oxfd的字符串时,Oxfd会被编译器自动跳过。
Keil 官方提供的解决方法:在带有 Oxfd 编码的汉字后增加一个 Oxfd 即可。例如:
printf("数学");printf("数\xfd 学");
//Keil 编译后打印会显示乱码
//显示正常
这里的"\xfd”是标准C代码中的转义字符,"\x”表示其后的1~2个字符为16进制数。"\xfd"
表示将16进制数Oxfd插入到字符串中。
由于“数”的汉字编码是OxCAFD,Keil在编译时会将FD跳过,而只将CA编译到目标文件中,后面通过转义字符手动再补一个Oxfd到目标文件中,就形成完整的OxCAFD,从而可正常显示。关于OxFD的补丁网上有很多,基本只对旧版本的Keil软件有效。打补丁的方法均是在可执行文件中查找关键代码,并修改为,这种修改方法查找的关键代码过于简单,很容易修改到其它无关的地方,导致编译出来的目标文件运行时出现莫名其妙的问题。所以,代码中的字符串有包含如下的汉字时,建议使用 Keil 官方提供的解决方法进行解决GB2312中,包含Oxfd编码的汉字如下:褒饼昌除待谍洱俘庚过糊积箭烬君魁例笼慢谬凝琵讫驱三升数她听妄锡淆旋妖引育札正铸 佚冽邶埤荦蔟摭啐帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞
瘕颀螨籪酏觚鳊鼾
另外,Keil项目路径名的字符中也不能含有带 OxFD 编码的汉字,否则Keil软件会无法正确编译此项目。
到此,借助中断,任务一就圆满完成:
当然,仔细研究,定时器也有很多要深究的地方:
其实是个计数器,从0数到65536就溢出
计数的节奏肯定是来源于系统时钟
控制的开关有几个,对应几个寄存器:
计数满了可以自动重新装载:
计数满了就引起中断:
冲哥详细介绍了0X5B和0X7F的来历:
实际就是91分频
&=,实际就是最高位清零 就是12T模式:
接下来把TMOD的低4位清空:
用内部系统时钟计数
装载是数值计算: