查看: 546|回复: 1

KEIL的中断号大于31时编译出错的修复

[复制链接]

1

主题

3

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2022-3-31 20:41:24 | 显示全部楼层 |阅读模式
    目前Keil各个版本的C51和C251编译器均只支持32个中断号(0~31),即中断向量必须小于0100H。在Keil公司没有解决中断号超过32个的问题之前,我们可以采用多种变通的方法临时用着。目前已经有多款STC单片机的中断号超过此数值,比如STC8H8K64U、STC32G12K128单片机。这里介绍了通过修改打补丁实现取消最大中断号31的限制方法。31对应的十六进制为1F,在特定的判断位置更改为其它数值即可取消此限制,类似之前的汉字FD BUG及补丁。具体修改、增加KEIL最大31个中断号的办法为:
分别备份与修改以下两个exe文件:
\KEIL\C51\BIN\C51.exe
\KEIL\C251\BIN\C251.exe

用UltraEdit软件打开这两个文件,搜索十六进制的“F81F76”,改为“F8FF76”即可。

本文不对补丁后可能产生的损失负责,请自行测试。如不正确请指正。
回复

使用道具 举报

1

主题

3

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2022-4-5 18:49:59 | 显示全部楼层
本帖最后由 hefanghua 于 2022-4-5 18:51 编辑

附上“Keil C51汉字显示的bug问题”文章供参考:

一、缘起
    这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序。如程序调用disstr("液晶汉字显示");液晶屏上就会显示“液晶汉字显示”。
二、问题
    但是,花了1天多时间辛辛苦苦改好的程序后,却发现有些汉字显示有问题。比如:
    P1:在第一行显示“实时参数”,第二行显示“工作状态”,实际上“工作状态”却重复显示了,除了在正确的地方显示外,还在“实时参数”后显示了。
    P2:"正"字后若有":",则都显示成乱码。如果后面没有":",则"正"字可正确显示,但是后面却显示了后面的一行字。
    P3:"过"字总显示乱码;
三、求索
    通过调试发现,上述汉字显示不正常的时候,是因为在字库中找不到匹配的汉字。可是,自建的字库中明明有这些汉字,而且"数","正"字在后面无字符的时候是显示正确的啊!
    问题找了好久,怀疑传参类型不对,汉字查找可能溢出等,反复修改,总是无法解决问题,而且从现象来思考,都不应该是这些问题。
    今日灵光一现:为什么不在传递字符串后显示该字符串的变量值呢?
    经过详细研究,西文字符在传递时应该是ACSII值,一个字节,数值小于128;而汉字传递的是其机内码,分高低2个字节,2个字节都大于127,当然并小于256。
    字符串传递参数值一显示,可不得了。其惊人之处有:
    1."数","正","过"正确显示时其传参值为:0xca00,0xd500,0xb900;而其正确的机内码应该是:0xcafd,0xd5fd,0xb9fd。看来其低位字节被无情忽视。
    2."数","正","过"单独显示正确,但是后面带一个字符或汉字就显示乱码了。如"正:"传参的值为:0xd53a,0x0000;"数 "传参的值为:0xca20,0x0000。而":"和" "的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符中去了,机内码只有一个高位字节了。
    3.将传参值直接赋给汉字显示函数,如"过"用"0xb9,0xfd"是显示不了的,只能用"0xb9,0x00"。
    4.比较发现,显示不正常的"数","正","过"三个字的低位字节都是0xfd,而一直显示正确的"一二"等汉字机内码的低位字节都不是0xfd。
    莫非keil跟0xfd有不共戴天之仇?
四、解决
    天涯茫茫寻不到,无奈只有上百度。用"keil c51的汉字显示问题"一搜就找到组织了,泪奔啊。组织的力量大,很快就给出了让我这等底层开发者劳累辛苦的原因:这是万恶的keil存在的一个臭名昭著的bug!伟大的组织同时无私的提供了答案,而且还不止一种哦。以下是从某同志的blog中摘录:
    “解决方法两个:
     ①下个补丁,自己搜一下。
     ②用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。
                   c51.exe位置:Keil安装目录/keil/c51/bin/c51.exe”
    赶紧拿起前辈们提供的武器,向keil 0xfd bug发起猛烈冲锋!……
    待我重新烧录好程序,轻轻的打开电源,液晶屏幕上的一个个汉字显示得整齐而又干净,整个世界清静了…………
————————————————
版权声明:本文为CSDN博主「willhu2008」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/willhu2008/article/details/4482487
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-4-20 18:03 , Processed in 0.316326 second(s), 22 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表