PICC编译器编译switch语句

[复制链接]
4463|8
 楼主| mugangzhu 发表于 2010-10-21 08:37 | 显示全部楼层 |阅读模式
switch(x)
{
   case 1:..........break;
   case 2:..........break;
     .
     .
     .
   case 45:.........break;
}
编译器PICC9.70,
编译出来功能不正常编译没有提示错误,减少到case 36就正常,是编译器的问题还是怎么回事?芯片用16f883
machunshui 发表于 2010-10-21 08:44 | 显示全部楼层
PICC9.70 不成熟,
建议换PICC9.80或者9.71,
或者更老的版本.
 楼主| mugangzhu 发表于 2010-10-21 08:48 | 显示全部楼层
能否提供一种那种编译软件?谢谢,我的邮箱是976611799@qq.com,谢谢
machunshui 发表于 2010-10-21 09:58 | 显示全部楼层
自己到MICROCHIP网站下载啊
 楼主| mugangzhu 发表于 2010-10-21 11:33 | 显示全部楼层
换了9.71a编译器编译好像也不行的啊
aaa2742 发表于 2010-10-21 15:48 | 显示全部楼层
你判断的太多了吧,用MCC18试试
martin 发表于 2010-10-21 17:43 | 显示全部楼层
PICC Pro 9.80,MPLAB IDE 8.50,PIC16F883测试编译正常,软件模拟正常。附测试代码及反汇编代码:
  1. 1:                 #include <pic.h>
  2. 2:                 
  3. 3:                 unsigned char Index;
  4. 4:                 
  5. 5:                 void main(void)
  6. 6:                 {
  7. 7:                 Index = 0;
  8.    786    01F0     CLRF 0x70
  9. 8:                 PORTC = 0;
  10.    787    0187     CLRF 0x7
  11. 9:                 TRISC = 0;
  12.    788    1683     BSF 0x3, 0x5
  13.    789    0187     CLRF 0x7
  14. 10:                ADCON1 = 0x06;
  15.    78A    3006     MOVLW 0x6
  16.    78B    009F     MOVWF 0x1f
  17. 11:                        while(1)
  18. 12:                        {
  19. 13:                        Index+=1;
  20.    7EA    0AF0     INCF 0x70, F
  21. 14:                        if(Index>45) Index = 0;
  22.    78C    2FEA     GOTO 0x7ea
  23.    78D    01F0     CLRF 0x70
  24.    78E    2FEF     GOTO 0x7ef
  25.    7EB    302E     MOVLW 0x2e
  26.    7EC    0270     SUBWF 0x70, W
  27.    7ED    1803     BTFSC 0x3, 0
  28.    7EE    2F8D     GOTO 0x78d
  29. 15:                        switch(Index)
  30.    002    118A     BCF 0xa, 0x3
  31.    7EF    0870     MOVF 0x70, W
  32.    7F0    3EFF     ADDLW 0xff
  33.    7F1    1C03     BTFSS 0x3, 0
  34.    7F2    2FEA     GOTO 0x7ea
  35.    7F3    0084     MOVWF 0x4
  36.    7F4    302D     MOVLW 0x2d
  37.    7F5    0204     SUBWF 0x4, W
  38.    7F6    1803     BTFSC 0x3, 0
  39.    7F7    2FEA     GOTO 0x7ea
  40.    7F8    3000     MOVLW 0
  41.    7F9    008A     MOVWF 0xa
  42.    7FA    1003     BCF 0x3, 0
  43.    7FB    0D04     RLF 0x4, W
  44.    7FC    3E02     ADDLW 0x2
  45.    7FD    0082     MOVWF 0x2
  46.    7FE    118A     BCF 0xa, 0x3
  47.    7FF    2800     GOTO 0
  48. 16:                                {
  49. 17:                                case 1: PORTC = 1; break;
  50.    78F    3001     MOVLW 0x1
  51.    790    2FE8     GOTO 0x7e8
  52. 18:                                case 2: PORTC = 2; break;
  53.    791    3002     MOVLW 0x2
  54.    792    2FE8     GOTO 0x7e8
  55. 19:                                case 3: PORTC = 3; break;
  56.    793    3003     MOVLW 0x3
  57.    794    2FE8     GOTO 0x7e8
  58. 20:                                case 4: PORTC = 4; break;
  59.    795    3004     MOVLW 0x4
  60.    796    2FE8     GOTO 0x7e8
  61. 21:                                case 5: PORTC = 5; break;
  62.    797    3005     MOVLW 0x5
  63.    798    2FE8     GOTO 0x7e8
  64. 22:                                case 6: PORTC = 6; break;
  65.    799    3006     MOVLW 0x6
  66.    79A    2FE8     GOTO 0x7e8
  67. 23:                                case 7: PORTC = 7; break;
  68.    79B    3007     MOVLW 0x7
  69.    79C    2FE8     GOTO 0x7e8
  70. 24:                                case 8: PORTC = 8; break;
  71.    79D    3008     MOVLW 0x8
  72.    79E    2FE8     GOTO 0x7e8
  73. 25:                                case 9: PORTC = 9; break;
  74.    79F    3009     MOVLW 0x9
  75.    7A0    2FE8     GOTO 0x7e8
  76. 26:                                case 10: PORTC = 10; break;
  77.    7A1    300A     MOVLW 0xa
  78.    7A2    2FE8     GOTO 0x7e8
  79. 27:                                case 11: PORTC = 11; break;
  80.    7A3    300B     MOVLW 0xb
  81.    7A4    2FE8     GOTO 0x7e8
  82. 28:                                case 12: PORTC = 12; break;
  83.    7A5    300C     MOVLW 0xc
  84.    7A6    2FE8     GOTO 0x7e8
  85. 29:                                case 13: PORTC = 13; break;
  86.    7A7    300D     MOVLW 0xd
  87.    7A8    2FE8     GOTO 0x7e8
  88. 30:                                case 14: PORTC = 14; break;
  89.    7A9    300E     MOVLW 0xe
  90.    7AA    2FE8     GOTO 0x7e8
  91. 31:                                case 15: PORTC = 15; break;
  92.    7AB    300F     MOVLW 0xf
  93.    7AC    2FE8     GOTO 0x7e8
  94. 32:                                case 16: PORTC = 16; break;
  95.    7AD    3010     MOVLW 0x10
  96.    7AE    2FE8     GOTO 0x7e8
  97. 33:                                case 17: PORTC = 17; break;
  98.    7AF    3011     MOVLW 0x11
  99.    7B0    2FE8     GOTO 0x7e8
  100. 34:                                case 18: PORTC = 18; break;
  101.    7B1    3012     MOVLW 0x12
  102.    7B2    2FE8     GOTO 0x7e8
  103. 35:                                case 19: PORTC = 19; break;
  104.    7B3    3013     MOVLW 0x13
  105.    7B4    2FE8     GOTO 0x7e8
  106. 36:                                case 20: PORTC = 20; break;
  107.    7B5    3014     MOVLW 0x14
  108.    7B6    2FE8     GOTO 0x7e8
  109. 37:                                case 21: PORTC = 21; break;
  110.    7B7    3015     MOVLW 0x15
  111.    7B8    2FE8     GOTO 0x7e8
  112. 38:                                case 22: PORTC = 22; break;
  113.    7B9    3016     MOVLW 0x16
  114.    7BA    2FE8     GOTO 0x7e8
  115. 39:                                case 23: PORTC = 23; break;
  116.    7BB    3017     MOVLW 0x17
  117.    7BC    2FE8     GOTO 0x7e8
  118. 40:                                case 24: PORTC = 24; break;
  119.    7BD    3018     MOVLW 0x18
  120.    7BE    2FE8     GOTO 0x7e8
  121. 41:                                case 25: PORTC = 25; break;
  122.    7BF    3019     MOVLW 0x19
  123.    7C0    2FE8     GOTO 0x7e8
  124. 42:                                case 26: PORTC = 26; break;
  125.    7C1    301A     MOVLW 0x1a
  126.    7C2    2FE8     GOTO 0x7e8
  127. 43:                                case 27: PORTC = 27; break;
  128.    7C3    301B     MOVLW 0x1b
  129.    7C4    2FE8     GOTO 0x7e8
  130. 44:                                case 28: PORTC = 28; break;
  131.    7C5    301C     MOVLW 0x1c
  132.    7C6    2FE8     GOTO 0x7e8
  133. 45:                                case 29: PORTC = 29; break;
  134.    7C7    301D     MOVLW 0x1d
  135.    7C8    2FE8     GOTO 0x7e8
  136. 46:                                case 30: PORTC = 30; break;
  137.    7C9    301E     MOVLW 0x1e
  138.    7CA    2FE8     GOTO 0x7e8
  139. 47:                                case 31: PORTC = 31; break;
  140.    7CB    301F     MOVLW 0x1f
  141.    7CC    2FE8     GOTO 0x7e8
  142. 48:                                case 32: PORTC = 32; break;
  143.    7CD    3020     MOVLW 0x20
  144.    7CE    2FE8     GOTO 0x7e8
  145. 49:                                case 33: PORTC = 33; break;
  146.    7CF    3021     MOVLW 0x21
  147.    7D0    2FE8     GOTO 0x7e8
  148. 50:                                case 34: PORTC = 34; break;
  149.    7D1    3022     MOVLW 0x22
  150.    7D2    2FE8     GOTO 0x7e8
  151. 51:                                case 35: PORTC = 35; break;
  152.    7D3    3023     MOVLW 0x23
  153.    7D4    2FE8     GOTO 0x7e8
  154. 52:                                case 36: PORTC = 36; break;
  155.    7D5    3024     MOVLW 0x24
  156.    7D6    2FE8     GOTO 0x7e8
  157. 53:                                case 37: PORTC = 37; break;
  158.    7D7    3025     MOVLW 0x25
  159.    7D8    2FE8     GOTO 0x7e8
  160. 54:                                case 38: PORTC = 38; break;
  161.    7D9    3026     MOVLW 0x26
  162.    7DA    2FE8     GOTO 0x7e8
  163. 55:                                case 39: PORTC = 39; break;
  164.    7DB    3027     MOVLW 0x27
  165.    7DC    2FE8     GOTO 0x7e8
  166. 56:                                case 40: PORTC = 40; break;
  167.    7DD    3028     MOVLW 0x28
  168.    7DE    2FE8     GOTO 0x7e8
  169. 57:                                case 41: PORTC = 41; break;
  170.    7DF    3029     MOVLW 0x29
  171.    7E0    2FE8     GOTO 0x7e8
  172. 58:                                case 42: PORTC = 42; break;
  173.    7E1    302A     MOVLW 0x2a
  174.    7E2    2FE8     GOTO 0x7e8
  175. 59:                                case 43: PORTC = 43; break;
  176.    7E3    302B     MOVLW 0x2b
  177.    7E4    2FE8     GOTO 0x7e8
  178. 60:                                case 44: PORTC = 44; break;
  179.    7E5    302C     MOVLW 0x2c
  180.    7E6    2FE8     GOTO 0x7e8
  181. 61:                                case 45: PORTC = 45; break;
  182.    7E7    302D     MOVLW 0x2d
  183.    7E8    1283     BCF 0x3, 0x5
  184.    7E9    0087     MOVWF 0x7
  185. 62:                                }
  186. 63:                        }       
  187. 64:                       
  188. 65:                        }
machunshui 发表于 2010-10-22 10:14 | 显示全部楼层
顶顶!

好多人出了问题,
就到处怀疑,

自己写个验证代码,
什么都明白了!
zdhlixiang2006 发表于 2010-10-24 10:04 | 显示全部楼层
是不是case太多了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

358

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部