最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請各位分析下面的程序為什么會出現(xiàn)這樣結(jié)果?

作者:querli_wjh 欄目:單片機
請各位分析下面的程序為什么會出現(xiàn)這樣結(jié)果?
請各位高手分析下面的程序,編譯后第<0063>行程序:
(0063)    j=j&0x3f;
    0075 738F      ANDI    R24,0x3F
    0076 2EA8      MOV    R10,R24
    
    為什么不是:  MOV R24,R10
        ANDI R24,0X3F
        MOV R10,R24
--------------------------------------------------------

#include "iom8v.h"
const unsigned CHAR tabel[]={0x02,0xe3,0x11,0x41,0xe0,0x48,0x08,0x63,0x00,0x40,0xfb};
          /*     顯示緩沖區(qū)       */
unsigned CHAR ledbuff[]={0x07,0x08,0x09,0x04,0x05,0x06};
void port_init(void)//端口初始化
{
  DDRD=0xfb;
  DDRB=0x33;
  PORTD=0xff;
  PORTB=0x33;
  DDRC=0x30;
  PORTC=0x30;
}
void delay_1ms(void)
{
    unsigned CHAR a, b;
    for (a = 1; a<0x90; a++)
        for (b = 1; b<0x30; b++)
            ;
}

void DISPLAY(void)//六路動態(tài)掃描顯示電路
{
unsigned CHAR h,i,j,k;
for (i=0;i<3;i++)
  {
   j=ledbuff[i];
   k=tabel[j];
   j=k&0x3f;
   h=PIND&0xc4;
   PORTD=h|j;
   h=PINB&0xde;
   //j=k&0xc0;
   asm("mov r0,%j\n" "bst r0,6\n" "bld r0,0\n" "bst r0,7\n" "bld r0,5\n" "mov %j,r0");
   j=j&0x3f;
   k=h|j;
   PORTB=k;
   if ((i==0)||(i==4)||(i==5)) PORTB|=(1<<4);
   else PORTB&=~0X10;
   if ((i==0)||(i==2)) PORTC|=(1<<5);
   else PORTC&=~0X20;
   if ((i==3)||(i==5)) PORTC|=(1<<4);
   else PORTC&=~0x10;
   delay_1ms();     //每一位顯示保持一定時間
   }
}

void main(void)
{
unsigned CHAR i;
port_init();
while(1)
   {
    DISPLAY();
   }
}
-----------------------------------------------------------
部分ICCAVR6.31編譯后的程序

(0061)    j=k&0xc0;
    006D 2F86      MOV    R24,R22
    006E 7C80      ANDI    R24,0xC0
(0062)    asm("mov r0,%j\n" "bst r0,6\n" "bld r0,0\n" "bst r0,7\n" "bld r0,5\n" "mov %j,r0");
    006F 2C0A      MOV    R0,R10
    0070 FA06      BST    R0,6
    0071 F800      BLD    R0,0
    0072 FA07      BST    R0,7
    0073 F805      BLD    R0,5
    0074 2CA0      MOV    R10,R0
(0063)    j=j&0x3f;
    0075 738F      ANDI    R24,0x3F
    0076 2EA8      MOV    R10,R24

2樓: >>參與討論
querli_wjh
諸位是怎么處理在線匯編程序中調(diào)用c局部變量?
  我覺得造成這種錯誤結(jié)果是由于編譯器自作聰明將變量j優(yōu)化了,如果j是全局變量(volatile unsigned CHAR j)    
其結(jié)果就是對的,請看下面的程序,其編譯結(jié)果是正確的,如果將29行改寫為:k=j;又會出現(xiàn)上面的錯誤。
1    #include "iom8v.h"
2    #pragma data:code
3    const unsigned CHAR tabel[]={ 0x02,0xe3,0x11,0x41,0xe0,0x48,0x08,0x63,0x00,0x40,0xfb};
          /*     顯示緩沖區(qū)       */
4    #pragma data:data
5    unsigned CHAR ledbuff[]={0x01,0x02,0x03,0x04,0x05,0x06};

6    void port_init(void)//端口初始化
7       {
8          DDRD=0xfb;
9          DDRB=0x33;
10         PORTD=0xff;
11         PORTB=0x33;
12         DDRC=0x30;
13         PORTC=0x30;
14       }
15    void delay_1ms(void)
16      {
17         unsigned CHAR a, b;
18           for (a = 1; a<0x90; a++)
19        for (b = 1; b<0x30; b++)
20           ;
21      }
22
23    void DISPLAY(void)//六路動態(tài)掃描顯示電路
24    {
25     unsigned CHAR i,j,k;
26     for (i=0;i<6;i++)
27      {
28       j=tabel[ledbuff[i]];
29       k=tabel[ledbuff[i]];
30         k=k&0x3f;
31         PORTD &=0xc4;
32         PORTD |=k;
33        j=j&0xc0;
34         asm("mov r0,%j\n" "bst r0,6\n" "bld r0,0\n" "bst r0,7\n" "bld r0,5\n""mov %j,r0");
35         j=j&0x3f;
36        PORTB &=0xde;
37         PORTB |=j;
38        if ((i==0)||(i==4)||(i==5)) PORTB|=(1<<4);
         else PORTB&=~0X10;
         if ((i==0)||(i==2)) PORTC|=(1<<5);
         else PORTC&=~0X20;
         if ((i==3)||(i==5)) PORTC|=(1<<4);
         else PORTC&=~0x10;
         delay_1ms();     //每一位顯示保持一定時間
      }
    }

3樓: >>參與討論
querli_wjh
諸位有無好的解決方法
ICCAVR 編譯器只有兩種優(yōu)化設(shè)置(基本優(yōu)化和代碼壓縮優(yōu)化)且必須選擇一種,如果選擇代碼壓縮優(yōu)化,問題就能解決,可有些書上說選擇代碼壓縮優(yōu)化可能會引起一些奇怪的問題,請問諸位有無好的解決方法。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
AVR下載電纜,雙龍?zhí)猓。?/a>
STK500_M8再次更新,現(xiàn)在是V2.0[新建個貼子]
Mega16,22元,還是有點貴,如果到15元更好,其實總線基本不用
利用U盤為存儲媒體可直接播放U盤的MP3播放器
誰玩過AVR做MP3播放器嗎
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號