xyz543 发表于 2019-5-15 12:29:20

又见到坑了,白鼠们一起来吧!这 Keil C51 v9.60 版来啰 ~~~

详见标题,仅供这 Keil C51 v9.60 版官网下载的链接,请自行入坑。并附上这版的 Release Note,但愿这 Release Note 的截图不会造成侵权!也请各位白鼠们自取用,不用谢。

连结于此 -> C51v9.60 - (95,756K) - (MD5:3C29CCF5B8E7AF3340B3B5C4605CAF6D)


tim 发表于 2019-5-15 13:10:18

谢谢楼主推荐{:loveliness:}

rei1984 发表于 2019-5-15 13:20:39

keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持??

su33691 发表于 2019-5-15 13:28:20

KEILC51 V9.59已经很好了。
看来v9.60又解决了长变量名的问题。
谢谢楼主。{:victory:}

mcu5i51 发表于 2019-5-15 16:19:07

rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...

选编码呀

lisingch 发表于 2019-5-15 16:20:37

多谢楼主,下载了。

rclong 发表于 2019-5-15 16:38:41

高科技是不是还只支持到2020年?{:lol:}

merphy 发表于 2019-5-15 17:11:23

估计2020以后大家就用不到这个软件了,

four_zhg 发表于 2019-5-15 21:38:59

2020年快了,不知有没有大神会放出新的

tt98 发表于 2019-5-16 08:37:05

下载收藏!谢谢楼主{:lol:}

zsenbao 发表于 2019-5-16 08:48:43

正在下载,感谢分享。

天空の城 发表于 2019-5-16 09:06:39

还有半年时间2020   那个高科技有没有进一步发展?
我是觉得 2020年之后我还会用到keil啊   

korren 发表于 2019-5-16 13:24:41

KEIL新版本没有以前版本稳定,很容易崩溃了!

shuimubai 发表于 2019-5-16 15:01:29

一直很好奇现在还有人在用51开发 现在的arm很便宜了‘

jxcrgt35 发表于 2019-5-18 12:47:14

谢谢分享

lswood 发表于 2019-5-18 19:03:18

2020好快

jeep 发表于 2019-5-18 19:32:36

shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘

+1
我又有这个感觉。

laujc 发表于 2019-5-18 19:40:16

shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘

51很多优点的,很多老工程师大学时学的就是51.
51相比arm简单,这个也是优势吧

dukelec 发表于 2019-5-18 20:23:33

laujc 发表于 2019-5-18 19:40
51很多优点的,很多老工程师大学时学的就是51.
51相比arm简单,这个也是优势吧 ...

相反,我覺得 51 的內存佈局不統一,很麻煩,特別是涉及到鏈接腳本的編輯,譬如 IAP 的 bootloader.

security 发表于 2019-5-18 20:53:20

shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘

我最近就在用,领导看中的就是极低的价格。

security 发表于 2019-5-18 20:55:26

dukelec 发表于 2019-5-18 20:23
相反,我覺得 51 的內存佈局不統一,很麻煩,特別是涉及到鏈接腳本的編輯,譬如 IAP 的 bootloader. ...

这确实很扯蛋的地方,导致代码体积大很多。

PICTURE 发表于 2019-5-18 21:11:17

还是关心的是2020的问题,这软件还需要用的

fuze2009 发表于 2019-5-19 01:19:39

2020年后有很多版本应该不能用了

迅得电子 发表于 2019-5-23 11:30:40

请问一下楼主有没有汉化包。英文有点差。谢谢啦

makesoft 发表于 2019-5-23 11:35:01

改进不多,升级的必要性不强。

另外怎么就不见官方支持我们的大STC呢{:lol:}

hefq 发表于 2019-5-23 13:18:07

发现一个小问题,设置了断点,一仿真,断点不见了,再次点上,可以用,退出仿真就恢复到仿真前设置的断点了{:lol:}

hefq 发表于 2019-5-23 13:18:31

再次仿真,断点又不见了{:lol:}

迅得电子 发表于 2019-5-25 09:09:01

下载后,发现没有,crack文件,求那个大佬帮我生成一下New License ID code(LIC):    CID:CLFCQ-UPCHS,谢谢啦{:lol:}

zhanyanqiang 发表于 2019-5-25 11:46:13

rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...

rei1984 发表于 2019-5-25 11:47:06

zhanyanqiang 发表于 2019-5-25 11:46


老铁。。。。可以的

xyz543 发表于 2019-5-29 10:22:04

再来一个新的坑,放出 Keil C51 v9.60a 版官网下载的链接,请赶紧入坑。并附上这版那一点点的 Release Note,也请各位白鼠们自行取用,最后...不用谢!

连结于此 -> C51v9.60a - (96,152K) - (MD5:A77A3700DD44E75FC0C8C235A1BC8F98)


su33691 发表于 2019-5-29 10:48:22

我又改用UV2了,可以用到2025,{:lol:}

su33691 发表于 2019-5-31 12:40:01

一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。

makesoft 发表于 2019-5-31 12:58:47

su33691 发表于 2019-5-31 12:40
一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。 ...

哪个版本开始8位按照16位处理的,还真没注意过

szdy 发表于 2019-5-31 13:13:09

我可用到2029年

su33691 发表于 2019-5-31 13:13:10

makesoft 发表于 2019-5-31 12:58
哪个版本开始8位按照16位处理的,还真没注意过

好像是从V9.24a开始吧。
一个全局变量 u8 data LoopCnt;
if(LoopCnt == 1){...}

if(LoopCnt == (u8)1){...}
看看这两个语句的编译结果就知道了。

makesoft 发表于 2019-5-31 15:30:29

su33691 发表于 2019-5-31 13:13
好像是从V9.24a开始吧。
一个全局变量 u8 data LoopCnt;
if(LoopCnt == 1){...}






可能是个例吧,我用9.59测试没有您说的问题。

icoyool 发表于 2019-5-31 16:33:48

lianglee 发表于 2019-5-18 21:26
2块钱能解决的问题,为什么要用3块钱的?
答案不是很明显么。

买的一定是可持续发展的机会,这一块钱不亏。

armstrong 发表于 2019-5-31 17:47:22

lianglee 发表于 2019-5-18 21:26
2块钱能解决的问题,为什么要用3块钱的?
答案不是很明显么。

除非是很大量的产品,要不然还真不如花3块钱做。

korren 发表于 2019-6-2 17:35:28

Keil C51越来越垃圾了,新版本编译出来的HEX文件比老版本大多了.

carefree1986 发表于 2019-6-2 18:21:06

更新好快啊。不过新得貌似没啥优点

makesoft 发表于 2019-6-2 18:23:57

korren 发表于 2019-6-2 17:35
Keil C51越来越垃圾了,新版本编译出来的HEX文件比老版本大多了.

简单的看HEX没有用的,要看MAP文件里面的实际大小。

korren 发表于 2019-6-3 08:20:53

makesoft 发表于 2019-6-2 18:23
简单的看HEX没有用的,要看MAP文件里面的实际大小。

老大你牛逼,你对比一下新版本同9.54一下版本就知道了。用事实说话。

makesoft 发表于 2019-6-3 08:34:37

korren 发表于 2019-6-3 08:20
老大你牛逼,你对比一下新版本同9.54一下版本就知道了。用事实说话。

也许我的观点是错误的,您有没有可以编译的DEMO工程并且不涉及秘密的可以提供上传,相信您的计算机里面装的是9.54以前的版本吧,试着编译下,把MAP文件传上来对比下。

我也编译您的DEMO,现在计算机安装的是9.59,看看差异到底在什么地方。

machao 发表于 2019-8-21 15:09:52

本帖最后由 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:31:51

本帖最后由 machao 于 2019-8-21 15:33 编辑

su33691 发表于 2019-5-31 12:40
一个8位机的C编译器,非要对8位数据按16位处理,导致代码量增大,我也是醉了。 ...

官方有解释吗?我也发现有些异常,但不明白是如何按16位处理的?
上面帖子我贴了两个不同版本编译产生的汇编,明显在8位比较时,增加了两句汇编,目前看不出什么意思。

machao 发表于 2019-8-21 19:50:25

在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

machao 发表于 2019-8-21 19:57:01

把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)

hmsfeng 发表于 2019-8-21 20:49:38

2020年后,keil该如何使用

myemcu 发表于 2019-10-10 15:14:58

shuimubai 发表于 2019-5-16 15:01
一直很好奇现在还有人在用51开发 现在的arm很便宜了‘

你让Arduino情何以堪。。

minier 发表于 2019-10-10 21:14:13

51有51的优势

hugohehuan 发表于 2019-10-11 03:56:54

rei1984 发表于 2019-5-15 13:20
keil c51 中文还是不能输入, 会变成乱码。。 为什么 keil 那么不重视 中文支持?? ...

uV2选择正确的字体和编码,中文一点问题都没有

hugohehuan 发表于 2019-10-11 03:58:19

51编译器还在更新啊……

makesoft 发表于 2020-10-14 21:57:24

xyz543 发表于 2019-5-29 10:22
再来一个新的坑,放出 Keil C51 v9.60a 版官网下载的链接,请赶紧入坑。并附上这版那一点点的 Release Note ...

还有geng新的吗{:lol:}

xyz543 发表于 2020-10-15 09:06:29

makesoft 发表于 2020-10-14 21:57
还有geng新的吗

-> 没有!

dbwu8280 发表于 2021-4-25 15:16:49

因为缺芯片,不得已来翻C51了。

xuekcd 发表于 2021-4-25 20:40:35

2021年了!

Eworm001 发表于 2022-8-3 17:08:41

Keil5 C51 V9.60a
c51v960a.exe
https://www.keil.com/fid/q9op64w320dj1w1u4yw1mba31r36sy2w9vmud1/files/eval/c51v960a.exe

lcmdw 发表于 2022-8-3 18:51:17

mark      

MYQQ2021 发表于 2022-12-21 10:19:02

又来翻C51了,其实一直在用uv4,没发现有什么不合适;最近手痒痒玩了两天stm32,装的uv5,发现这两个环境没集成到一起去,每次打开项目很麻烦

laujc 发表于 2022-12-21 10:58:29

有更新了。。。
页: [1]
查看完整版本: 又见到坑了,白鼠们一起来吧!这 Keil C51 v9.60 版来啰 ~~~