又见到坑了,白鼠们一起来吧!这 Keil C51 v9.60 版来啰 ~~~
详见标题,仅供这 Keil C51 v9.60 版官网下载的链接,请自行入坑。并附上这版的 Release Note,但愿这 Release Note 的截图不会造成侵权!也请各位白鼠们自取用,不用谢。连结于此 -> C51v9.60 - (95,756K) - (MD5:3C29CCF5B8E7AF3340B3B5C4605CAF6D)
谢谢楼主推荐{:loveliness:} keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? KEILC51 V9.59已经很好了。
看来v9.60又解决了长变量名的问题。
谢谢楼主。{:victory:} rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...
选编码呀 多谢楼主,下载了。 高科技是不是还只支持到2020年?{:lol:} 估计2020以后大家就用不到这个软件了, 2020年快了,不知有没有大神会放出新的 下载收藏!谢谢楼主{:lol:} 正在下载,感谢分享。 还有半年时间2020 那个高科技有没有进一步发展?
我是觉得 2020年之后我还会用到keil啊 KEIL新版本没有以前版本稳定,很容易崩溃了!
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘ 谢谢分享 2020好快 shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘
+1
我又有这个感觉。 shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘
51很多优点的,很多老工程师大学时学的就是51.
51相比arm简单,这个也是优势吧 laujc 发表于 2019-5-18 19:40
51很多优点的,很多老工程师大学时学的就是51.
51相比arm简单,这个也是优势吧 ...
相反,我覺得 51 的內存佈局不統一,很麻煩,特別是涉及到鏈接腳本的編輯,譬如 IAP 的 bootloader. shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘
我最近就在用,领导看中的就是极低的价格。 dukelec 发表于 2019-5-18 20:23
相反,我覺得 51 的內存佈局不統一,很麻煩,特別是涉及到鏈接腳本的編輯,譬如 IAP 的 bootloader. ...
这确实很扯蛋的地方,导致代码体积大很多。 还是关心的是2020的问题,这软件还需要用的 2020年后有很多版本应该不能用了 请问一下楼主有没有汉化包。英文有点差。谢谢啦 改进不多,升级的必要性不强。
另外怎么就不见官方支持我们的大STC呢{:lol:} 发现一个小问题,设置了断点,一仿真,断点不见了,再次点上,可以用,退出仿真就恢复到仿真前设置的断点了{:lol:}
再次仿真,断点又不见了{:lol:} 下载后,发现没有,crack文件,求那个大佬帮我生成一下New License ID code(LIC): CID:CLFCQ-UPCHS,谢谢啦{:lol:} rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...
zhanyanqiang 发表于 2019-5-25 11:46
老铁。。。。可以的 再来一个新的坑,放出 Keil C51 v9.60a 版官网下载的链接,请赶紧入坑。并附上这版那一点点的 Release Note,也请各位白鼠们自行取用,最后...不用谢!
连结于此 -> C51v9.60a - (96,152K) - (MD5:A77A3700DD44E75FC0C8C235A1BC8F98)
我又改用UV2了,可以用到2025,{:lol:} 一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。 su33691 发表于 2019-5-31 12:40
一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。 ...
哪个版本开始8位按照16位处理的,还真没注意过 我可用到2029年 makesoft 发表于 2019-5-31 12:58
哪个版本开始8位按照16位处理的,还真没注意过
好像是从V9.24a开始吧。
一个全局变量 u8 data LoopCnt;
if(LoopCnt == 1){...}
if(LoopCnt == (u8)1){...}
看看这两个语句的编译结果就知道了。 su33691 发表于 2019-5-31 13:13
好像是从V9.24a开始吧。
一个全局变量 u8 data LoopCnt;
if(LoopCnt == 1){...}
可能是个例吧,我用9.59测试没有您说的问题。 lianglee 发表于 2019-5-18 21:26
2块钱能解决的问题,为什么要用3块钱的?
答案不是很明显么。
买的一定是可持续发展的机会,这一块钱不亏。 lianglee 发表于 2019-5-18 21:26
2块钱能解决的问题,为什么要用3块钱的?
答案不是很明显么。
除非是很大量的产品,要不然还真不如花3块钱做。 Keil C51越来越垃圾了,新版本编译出来的HEX文件比老版本大多了. 更新好快啊。不过新得貌似没啥优点 korren 发表于 2019-6-2 17:35
Keil C51越来越垃圾了,新版本编译出来的HEX文件比老版本大多了.
简单的看HEX没有用的,要看MAP文件里面的实际大小。
makesoft 发表于 2019-6-2 18:23
简单的看HEX没有用的,要看MAP文件里面的实际大小。
老大你牛逼,你对比一下新版本同9.54一下版本就知道了。用事实说话。 korren 发表于 2019-6-3 08:20
老大你牛逼,你对比一下新版本同9.54一下版本就知道了。用事实说话。
也许我的观点是错误的,您有没有可以编译的DEMO工程并且不涉及秘密的可以提供上传,相信您的计算机里面装的是9.54以前的版本吧,试着编译下,把MAP文件传上来对比下。
我也编译您的DEMO,现在计算机安装的是9.59,看看差异到底在什么地方。 本帖最后由 machao 于 2019-8-21 15:26 编辑
最近在编写教程中,发现有差异存在:下面是例子:
c代码:
9 // time0 中断服务,中断时间为50us, 运行模式12T
10 uchar time_1k_counter,time_100hz_counter,time_10hz_counter;
11 bit time_key_ok;
12
13 void Int_time0(void) interrupt T0_VECTOR
14 {
15 1 IE = 0;
16 1 if(++time_1k_counter >= 10)
17 1 {
18 2 clk_1k = !clk_1k;
19 2 time_1k_counter = 0;
20 2 if (++time_100hz_counter >= 10)
21 2 {
22 3 clk_100hz = !clk_100hz;
23 3 time_100hz_counter = 0;
24 3 time_key_ok = true;
25 3 if (++time_10hz_counter >= 10)
26 3 {
27 4 clk_10hz = !clk_10hz;
28 4 time_10hz_counter = 0;
29 4 }
30 3 }
31 2 }
32 1 IE = 1;
33 1 }
34
==================================================
版本C51 V9.54 编译生成汇编:共27条汇编指令组成
; FUNCTION Int_time0 (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
; SOURCE LINE # 13
; SOURCE LINE # 15
0004 75A800 MOV IE,#00H
; SOURCE LINE # 16
0007 0500 R INC time_1k_counter
0009 E500 R MOV A,time_1k_counter
000B C3 CLR C
000C 940A SUBB A,#0AH
000E 4021 JC ?C0001
; SOURCE LINE # 17
; SOURCE LINE # 18
0010 B2B3 CPL clk_1k
; SOURCE LINE # 19
0012 750000 R MOV time_1k_counter,#00H
; SOURCE LINE # 20
0015 0500 R INC time_100hz_counter
0017 E500 R MOV A,time_100hz_counter
0019 940A SUBB A,#0AH
001B 4014 JC ?C0001
; SOURCE LINE # 21
; SOURCE LINE # 22
001D B2B2 CPL clk_100hz
; SOURCE LINE # 23
001F 750000 R MOV time_100hz_counter,#00H
; SOURCE LINE # 24
0022 D200 R SETB time_key_ok
; SOURCE LINE # 25
0024 0500 R INC time_10hz_counter
0026 E500 R MOV A,time_10hz_counter
0028 940A SUBB A,#0AH
002A 4005 JC ?C0001
; SOURCE LINE # 26
; SOURCE LINE # 27
002C B2B1 CPL clk_10hz
; SOURCE LINE # 28
002E 750000 R MOV time_10hz_counter,#00H
; SOURCE LINE # 29
; SOURCE LINE # 30
; SOURCE LINE # 31
0031 ?C0001:
; SOURCE LINE # 32
0031 75A801 MOV IE,#01H
; SOURCE LINE # 33
0034 D0D0 POP PSW
0036 D0E0 POP ACC
0038 32 RETI
; FUNCTION Int_time0 (END)
========================================
版本C51 V9.60 编译生成汇编:共33条汇编指令组成,多了6条,而且对比后这6条有点莫名其妙的
; FUNCTION Int_time0 (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
; SOURCE LINE # 13
; SOURCE LINE # 15
0004 75A800 MOV IE,#00H
; SOURCE LINE # 16
0007 0500 R INC time_1k_counter
0009 C3 CLR C
000A E500 R MOV A,time_1k_counter
000C 940A SUBB A,#0AH ;此处判断A是否大于10,正常
000E 7480 MOV A,#080H ;;???
0010 9480 SUBB A,#080H ;;???这两条莫名其妙???
0012 4029 JC ?C0001
; SOURCE LINE # 17
; SOURCE LINE # 18
0014 B2B3 CPL clk_1k
; SOURCE LINE # 19
0016 750000 R MOV time_1k_counter,#00H
; SOURCE LINE # 20
0019 0500 R INC time_100hz_counter
001B E500 R MOV A,time_100hz_counter
001D 940A SUBB A,#0AH
001F 7480 MOV A,#080H ;;
0021 9480 SUBB A,#080H ;;???再次这两条莫名其妙???
0023 4018 JC ?C0001
; SOURCE LINE # 21
; SOURCE LINE # 22
0025 B2B2 CPL clk_100hz
; SOURCE LINE # 23
0027 750000 R MOV time_100hz_counter,#00H
; SOURCE LINE # 24
002A D200 R SETB time_key_ok
; SOURCE LINE # 25
002C 0500 R INC time_10hz_counter
002E E500 R MOV A,time_10hz_counter
0030 940A SUBB A,#0AH
0032 7480 MOV A,#080H ;;
0034 9480 SUBB A,#080H ;;???第三次的莫名其妙???
0036 4005 JC ?C0001
; SOURCE LINE # 26
; SOURCE LINE # 27
0038 B2B1 CPL clk_10hz
; SOURCE LINE # 28
003A 750000 R MOV time_10hz_counter,#00H
; SOURCE LINE # 29
; SOURCE LINE # 30
; SOURCE LINE # 31
003D ?C0001:
; SOURCE LINE # 32
003D 75A801 MOV IE,#01H
; SOURCE LINE # 33
0040 D0D0 POP PSW
0042 D0E0 POP ACC
0044 32 RETI
; FUNCTION Int_time0 (END) 本帖最后由 machao 于 2019-8-21 15:33 编辑
su33691 发表于 2019-5-31 12:40
一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。 ...
官方有解释吗?我也发现有些异常,但不明白是如何按16位处理的?
上面帖子我贴了两个不同版本编译产生的汇编,明显在8位比较时,增加了两句汇编,目前看不出什么意思。 在v9.60的 Release Notes 中找到了为什么。主要是避免8位有符号数与无符号数比较出错的问题(在少数情况下会发生)
Corrected: in rare cases a signed compare with unsigned char treated the unsigned char as signed. This happens if the unsigned char value results from a calculated assignment. Example:
char i;
unsigned char uc0 = 254;
char c1 = 0;
void main() {
if (c1 <= (uc0 += c1)) // uc0 is wrongly treated signed => -2 therefore the condition (0 <= -2) is false
i = 1;
else
i = 0;
}
Wrong code was generated:
0000 E500 R MOV A,uc0
0002 2500 R ADD A,c1
0004 F500 R MOV uc0,A
0006 D3 SETB C
0007 6480 XRL A,#080H \
0009 F8 MOV R0,A |
000A E500 R MOV A,c1 |
000C 6480 XRL A,#080H |
000E 98 SUBB A,R0 |
000F 5004 JNC ?C0001 -> signed char compare
0011 750001 R MOV i,#01H
0014 22 RET
0015 ?C0001:
0015 E4 CLR A
0016 F500 R MOV i,A
0018 ?C0003:
0018 22 RET
The correct code is much longer because according to the C standard a cast to int is necessary:
0000 E500 R MOV A,uc0
0002 2500 R ADD A,c1
0004 FF MOV R7,A
0005 F500 R MOV uc0,A
0007 AD00 R MOV R5,c1 \
0009 ED MOV A,R5 |
000A 33 RLC A |
000B 95E0 SUBB A,ACC |
000D FC MOV R4,A -> cast of signed char to int
000E D3 SETB C \
000F ED MOV A,R5 |
0010 9F SUBB A,R7 |
0011 7480 MOV A,#080H +> implicit cast of unsigned char to int
0013 F8 MOV R0,A |
0014 6C XRL A,R4 |
0015 98 SUBB A,R0 |
0016 5004 JNC ?C0001 -> signed int compare
0018 750001 R MOV i,#01H
001B 22 RET
001C ?C0001:
001C E4 CLR A
001D F500 R MOV i,A
001F ?C0003:
001F 22 RET
To generate smaller code the signedness of the values to be compared should be the same:
...
if ((unsigned char)c1 <= (uc0 += c1))
...
0000 E500 R MOV A,uc0
0002 2500 R ADD A,c1
0004 FF MOV R7,A
0005 F500 R MOV uc0,A
0007 E500 R MOV A,c1
0009 D3 SETB C \
000A 9F SUBB A,R7 |
000B 5004 JNC ?C0001 -> unsigned char compare
000D 750001 R MOV i,#01H
0010 22 RET
0011 ?C0001:
0011 E4 CLR A
0012 F500 R MOV i,A
0014 ?C0003:
0014 22 RET 把C代码稍微做些变化: 把比较常量10 ,强制转换成无符号数,其它不变。
13 void Int_time0(void) interrupt T0_VECTOR
14 {
15 1 IE = 0;
16 1 if(++time_1k_counter >= (uchar)10)
17 1 {
18 2 clk_1k = !clk_1k;
19 2 time_1k_counter = 0;
20 2 if (++time_100hz_counter >= (uchar)10)
21 2 {
22 3 clk_100hz = !clk_100hz;
23 3 time_100hz_counter = 0;
24 3 time_key_ok = true;
25 3 if (++time_10hz_counter >= (uchar)10)
26 3 {
27 4 clk_10hz = !clk_10hz;
28 4 time_10hz_counter = 0;
29 4 }
30 3 }
31 2 }
32 1 IE = 1;
33 1 }
==============================
用最新版本C51 V9.60 编译生成汇编,又恢复为原来的27条相同的汇编指令了。
; FUNCTION Int_time0 (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
; SOURCE LINE # 13
; SOURCE LINE # 15
0004 75A800 MOV IE,#00H
; SOURCE LINE # 16
0007 0500 R INC time_1k_counter
0009 E500 R MOV A,time_1k_counter
000B C3 CLR C
000C 940A SUBB A,#0AH
000E 4021 JC ?C0001
; SOURCE LINE # 17
; SOURCE LINE # 18
0010 B2B3 CPL clk_1k
; SOURCE LINE # 19
0012 750000 R MOV time_1k_counter,#00H
; SOURCE LINE # 20
0015 0500 R INC time_100hz_counter
0017 E500 R MOV A,time_100hz_counter
0019 940A SUBB A,#0AH
001B 4014 JC ?C0001
; SOURCE LINE # 21
; SOURCE LINE # 22
001D B2B2 CPL clk_100hz
; SOURCE LINE # 23
001F 750000 R MOV time_100hz_counter,#00H
; SOURCE LINE # 24
0022 D200 R SETB time_key_ok
; SOURCE LINE # 25
0024 0500 R INC time_10hz_counter
0026 E500 R MOV A,time_10hz_counter
0028 940A SUBB A,#0AH
002A 4005 JC ?C0001
; SOURCE LINE # 26
; SOURCE LINE # 27
002C B2B1 CPL clk_10hz
; SOURCE LINE # 28
002E 750000 R MOV time_10hz_counter,#00H
; SOURCE LINE # 29
; SOURCE LINE # 30
; SOURCE LINE # 31
0031 ?C0001:
; SOURCE LINE # 32
0031 75A801 MOV IE,#01H
; SOURCE LINE # 33
0034 D0D0 POP PSW
0036 D0E0 POP ACC
0038 32 RETI
; FUNCTION Int_time0 (END) 2020年后,keil该如何使用 shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘
你让Arduino情何以堪。。 51有51的优势 rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...
uV2选择正确的字体和编码,中文一点问题都没有 51编译器还在更新啊…… xyz543 发表于 2019-5-29 10:22
再来一个新的坑,放出 Keil C51 v9.60a 版官网下载的链接,请赶紧入坑。并附上这版那一点点的 Release Note ...
还有geng新的吗{:lol:} makesoft 发表于 2020-10-14 21:57
还有geng新的吗
-> 没有!
因为缺芯片,不得已来翻C51了。 2021年了! Keil5 C51 V9.60a
c51v960a.exe
https://www.keil.com/fid/q9op64w320dj1w1u4yw1mba31r36sy2w9vmud1/files/eval/c51v960a.exe
mark 又来翻C51了,其实一直在用uv4,没发现有什么不合适;最近手痒痒玩了两天stm32,装的uv5,发现这两个环境没集成到一起去,每次打开项目很麻烦 有更新了。。。
页:
[1]