|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
各位大虾(电脑圈圈...)如果知道的请帮帮忙,谢谢! |
作者:fzj 栏目:单片机 |
case 1: PORTB=leddisp1[s1]; timebit1=1; break; //对应的反汇编: 163: case 1: 164: PORTB=leddisp1[s1]; 0007A5 3000 MOVLW 0 0007A6 08A MOVWF 0xa //上面2句是垃圾没用的怎么才能去掉?请熟悉PICC的高手帮我分析一下谢谢! 0007A7 82A MOVF 0x2a, W 0007A8 2015 CALL 0x15 0007A9 086 MOVWF 0x6 165: timebit1=1; 0007AA 1707 BSF 0x7, 0x6 166: break; 0007AB 008 RETURN |
2楼: | >>参与讨论 |
作者: fzj 于 2006/1/14 20:11:00 发布:
是不是我编译器的缘故呀? 怎么每个CASE下都要2句垃圾代码,占用ROM不说还浪费了我一个宝贵的RAM,怎么搞也不行,我的编译软件是PICC8.05版本!希望各位能帮帮我谢谢拉! |
3楼: | >>参与讨论 |
作者: computer00 于 2006/1/14 20:57:00 发布:
抱歉,没用过PIC单片机,所以不知道那几个汇编代码是什么意思 纠正你一个概念: 那几个代码是由C语言编译出来的汇编代码。所以应该就叫做编译后的汇编代码,不能叫做反汇编。 反汇编是指从二进制文件(或者hex文件,其实hex文件是二进制文件的另一种编码方式而已),生成汇编代码的过程。 相反的,由汇编代码生成二进制文件的过程,就叫做汇编。由高级语言生成汇编代码的过程,叫做编译。 |
4楼: | >>参与讨论 |
作者: FZJ 于 2006/1/15 8:17:00 发布:
哦,不能叫反汇编??C语言反变成汇编呀,呵呵! 没关系,谢谢您, movlw 0 movwf 0xa //意思是将地址为0XA单元经W寄存器中转后送入0也就是0XA单元清0。我的CASE下每句都有这两条语句,没用的。看看: /***********************************************************************/ void scan_led (void) //数码管显示扫描 { static unsigned CHAR i; PORTC=0X00; if (i>=9) i=0; SWITCH (i) { case 0: PORTB=leddisp1[s1]; timebit1=1; break; case 1: PORTB=leddisp1[s2]; timebit2=1; break; case 2: PORTB=leddisp1[s3]; timebit3=1; break; case 3: PORTB=leddisp1[s4]; timebit4=1; break; /*---------------------------------------------------------------------*/ case 4: PORTB=leddisp1[j1]; countbit1=1; break; case 5: PORTB=leddisp1[j2]; countbit2=1; break; case 6: PORTB=leddisp1[j3]; countbit3=1; break; case 7: PORTB=leddisp1[j4]; countbit4=1; break; /*----------------------------------------------------------------------*/ case 8: PORTB=leddisp2[led_py]; break; } ++i; } 176: /***********************************************************************/ 177: void scan_led (void) //数码管显示扫描 178: { 179: static unsigned CHAR i; 180: PORTC=0X00; 79D 0183 CLRF 0x3 79E 0187 CLRF 0x7 181: if (i>=9) i=0; 79F 3009 MOVLW 0x9 7A0 0223 SUBWF 0x23, W 7A1 1C03 BTFSS 0x3, 0 7A2 2FE3 GOTO 0x7e3 7A3 01A3 CLRF 0x23 182: SWITCH (i) 7A4 2FE3 GOTO 0x7e3 7E3 0823 MOVF 0x23, W 7E4 1903 BTFSC 0x3, 0x2 7E5 2FA5 GOTO 0x7a5 7E6 3A01 XORLW 0x1 7E7 1903 BTFSC 0x3, 0x2 7E8 2FAC GOTO 0x7ac 7E9 3A03 XORLW 0x3 7EA 1903 BTFSC 0x3, 0x2 7EB 2FB3 GOTO 0x7b3 7EC 3A01 XORLW 0x1 7ED 1903 BTFSC 0x3, 0x2 7EE 2FBA GOTO 0x7ba 7EF 3A07 XORLW 0x7 7F0 1903 BTFSC 0x3, 0x2 7F1 2FC1 GOTO 0x7c1 7F2 3A01 XORLW 0x1 7F3 1903 BTFSC 0x3, 0x2 7F4 2FC8 GOTO 0x7c8 7F5 3A03 XORLW 0x3 7F6 1903 BTFSC 0x3, 0x2 7F7 2FCF GOTO 0x7cf 7F8 3A01 XORLW 0x1 7F9 1903 BTFSC 0x3, 0x2 7FA 2FD6 GOTO 0x7d6 7FB 3A0F XORLW 0xf 7FC 1903 BTFSC 0x3, 0x2 7FD 2FDD GOTO 0x7dd 183: { 184: case 0: 185: PORTB=leddisp1[s1]; 7A5 3000 MOVLW 0 7A6 008A MOVWF 0xa 7A7 082B MOVF 0x2b, W 7A8 2015 CALL 0x15 7A9 0086 MOVWF 0x6 186: &nbs |
5楼: | >>参与讨论 |
作者: RobertJ 于 2006/1/27 9:28:00 发布:
好久沒用了, 0xa 是不是TRISB?(現在機上沒有Maplab看不見,) 若不是,則去掉優化選項則可 |
6楼: | >>参与讨论 |
作者: 未来是梦 于 2006/2/2 21:10:00 发布:
那两句是涉及到跨页调用程序的问题 0xa正是pclath,接下来是call,调用的程序在页0。 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |