久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 867|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

16位有符號(hào)數(shù)據(jù)排序成功 16位無符號(hào)和32位長整型數(shù)據(jù)排序不行?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:91150 發(fā)表于 2024-9-17 11:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
   網(wǎng)上抄來例程  16位有符號(hào)數(shù)據(jù) 快速排序 成功,而16位無符號(hào)和32位長整型數(shù)據(jù)排序不能通過。
請(qǐng)各位指教,哪里沒有弄好,應(yīng)該怎么辦?  謝謝

單片機(jī)源程序如下:
  1. #include "STC32G.h"
  2. #include "stdio.h"
  3. #include "intrins.h"

  4. typedef     unsigned char      u8;
  5. typedef     unsigned int       u16;
  6. typedef     unsigned long int  u32;

  7. #define  SYSCLK    132710400UL/6  //13....M/6=22.1184M
  8. #define  BRT      (65536 - SYSCLK/4/19200)    //  


  9. bit busy;
  10. u8  i;
  11. int aaa[6]={8,2,3,1,7,0};
  12. int bbb[6];
  13. //int AQ[5] = {123,1,521,400,619};
  14. //int arry[12] = {123,1,501,8,2,400,3,1,7,0,400,319};
  15. int arry[12] = {123,1,31501,8,2,400,3,1,7,0,21400,319};
  16. //u8 arry[12] = {123,1,201,8,2,200,3,1,7,0,100,219};
  17. //u32 arry[12] = {123,1,95201,8,10000,200,3,1,7,0,100,109219};
  18. //u16 arry[12] = {123,1,25201,8,10000,200,3,1,7,0,100,9219};

  19. /*=======延時(shí)函數(shù)  大約1mS===========*/
  20. void  delay_ms(u16 ms)
  21. { u16 i;
  22.         do
  23.          {i = SYSCLK / 6000;   
  24.                 while(--i)        ;
  25.    }while(--ms);
  26. }



  27. /*****Uart1Init********************************/
  28. void Uart1Init(void)                //19200bps@22.1184MHz
  29. { SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  30.         AUXR |= 0x01;                //串口1選擇定時(shí)器2為波特率發(fā)生器
  31.         AUXR |= 0x04;                //定時(shí)器時(shí)鐘1T模式
  32.         T2L = 0xE0;                        //設(shè)置定時(shí)初始值
  33.         T2H = 0xFE;                        //設(shè)置定時(shí)初始值
  34.         AUXR |= 0x10;                //定時(shí)器2開始計(jì)時(shí)
  35.         ES=1;
  36.         EA=1;
  37. }
  38. /*=======發(fā)字節(jié) ===========        */
  39. void Uart1Send(u8 dat)
  40. {   while (busy);
  41.     busy = 1;
  42.     SBUF = dat;
  43. }
  44. /******************/
  45. #pragma FUNCTIONS (reentrant) //F1幫助里: C251 generates reentrant CODE
  46. //void quiksort(u16 a[],u16 low,u16 high)//reentrant
  47. //void quiksort(u8 a[],int low,int high)//reentrant
  48. //void quiksort(u32 a[],u32 low,u32 high)//reentrant
  49. void quiksort(int a[],int low,int high)//reentrant
  50. {   int i = low;
  51.     int j = high;  
  52.     int temp = a[i];
  53.     //u32 i = low;
  54.     //u32 j = high;  
  55.     //u32 temp = a[i];   
  56.     //u16 i = low;
  57.     //u16 j = high;  
  58.     //u16 temp = a[i];   
  59.           if( low < high)
  60.      {while(i < j)
  61.        {while((a[j] >= temp) && (i < j))
  62.          {j--;
  63.          }
  64.         a[i] = a[j];
  65.         while((a[i] <= temp) && (i < j))
  66.          {i++;    //Uart1Send(0x1A);
  67.          }  
  68.         a[j]= a[i];
  69.        }
  70.      a[i] = temp;
  71.      quiksort(a,low,i-1);
  72.      quiksort(a,j+1,high);
  73.     }
  74. }


  75. void main()
  76. {   WTST = 0x00;
  77.     P_SW2 = 0x80;
  78.     EAXFR = 1; //擴(kuò)展寄存器(XFR)訪問使能
  79.     CKCON = 0; //提高訪問XRAM速度
  80.     P0M0 = 0x00; P1M0 = 0x00; P2M0 = 0x00; P3M0 = 0x00;
  81.           P0M1 = 0x00; P1M1 = 0x00; P2M1 = 0x00; P3M1 = 0x00;
  82.           P4M0 = 0x01; P5M0 = 0x00; P6M0 = 0x00; P7M0 = 0x00;
  83.           P4M1 = 0x00; P5M1 = 0x00; P6M1 = 0x00; P7M1 = 0x00;
  84.         Uart1Init();  
  85.   Uart1Send(0x1A);Uart1Send(0x2A);Uart1Send(0x3A);Uart1Send(0x4A);
  86.   while (1)
  87.    {         delay_ms(550);
  88.                          Uart1Send(0xAA);Uart1Send(0xAA);
  89.     for(i=0;i<12;i++)
  90.     //{Uart1Send((u8)((int)(arry[i])>>8)); //
  91.                 // Uart1Send((u8)((int)(arry[i])   ));
  92.      {Uart1Send((u8)((u16)(arry[i])>>8)); //
  93.                   Uart1Send((u8)((u16)(arry[i])   ));
  94.    //{Uart1Send((u8)((u16)(arry[i])>>8)); //
  95.                 //{        Uart1Send((arry[i])   );
  96.     // {Uart1Send((u8)((arry[i])>>16)); //
  97.                 //  Uart1Send((u8)((arry[i])>>8 ));
  98.                 //  Uart1Send((u8)((arry[i])    ));
  99.      }
  100.                          Uart1Send(0xCC);Uart1Send(0xCC);//quiksort(arry,0,4);
  101.                 //----???----------------
  102.                 quiksort(arry,0,11);
  103.                 //----???----------------
  104.                          delay_ms(550);
  105.                          Uart1Send(0xBB);Uart1Send(0xBB);
  106.     for(i=0;i<12;i++)
  107.      //{Uart1Send((u8)((int)(arry[i])>>8)); //
  108.                         //Uart1Send((u8)((int)(arry[i])   ));
  109.                  {Uart1Send((u8)((u16)(arry[i])>>8)); //
  110.                         Uart1Send((u8)((u16)(arry[i])   ));
  111.      //{Uart1Send((u8)(u32)(arry[i])>>16)); //
  112.                  // Uart1Send((u8)(u32)(arry[i])>>8 ));
  113.                  // Uart1Send((u8)(u32)(arry[i])    ));
  114.                  }         
  115.   }
  116. }
  117. /******************************************* */
  118. void Uart1Isr() interrupt 4
  119. {  if (TI)               
  120.     {   TI = 0;         
  121.         busy = 0;
  122.     }
  123.    if (RI)
  124.     {RI = 0;

  125.     }
  126. }
復(fù)制代碼



pai_xu0求教.rar

1.57 KB, 下載次數(shù): 0

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:844772 發(fā)表于 2024-9-17 20:01 來自手機(jī) | 只看該作者
我在用手機(jī)看,32位排序每次都不能成功嗎?這是八位機(jī),你這種超過八位的運(yùn)算不要開中斷
回復(fù)

使用道具 舉報(bào)

板凳
ID:744809 發(fā)表于 2024-9-18 09:09 | 只看該作者
你quiksort函數(shù)的入?yún)⒍际莍nt類型的,51里面int類型是16位有符號(hào)數(shù),范圍是-32768到32767;而16位無符號(hào)數(shù)是0-65535,32位無符號(hào)數(shù)就更大了,所以你排序肯定是失敗的。如果想排序16位無符號(hào)數(shù)可以把入?yún)㈩愋透臑閡nsigned int,排序32位無符號(hào)數(shù)可以把入?yún)㈩愋透臑閡32
回復(fù)

使用道具 舉報(bào)

地板
ID:91150 發(fā)表于 2024-9-18 15:29 | 只看該作者
謝謝先生們指教。
在keil 5 C251下試驗(yàn)  對(duì)應(yīng)變量數(shù)據(jù)類型在子函數(shù)里相同都是u16或
u32,排序不成功。程序文本寫了不同類型 屏蔽和去除屏蔽很方便
請(qǐng)?jiān)O(shè)置到u16或u32,試一下,看能否找到不成功的原因。
8位機(jī)應(yīng)該能處理16、32位數(shù)據(jù),int類型(-32768~ +32767)就是16位
它就可以排序。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 超碰人人爱| 欧美精品在线播放 | 粉嫩一区二区三区性色av | 国产精品视频在线观看 | 久久婷婷香蕉热狠狠综合 | 国产偷自视频区视频 | 男女免费在线观看视频 | 成人在线视 | 日韩精品久久一区 | 在线伊人 | 91免费版在线观看 | 黄色大片在线免费观看 | 亚洲精品高清视频 | 国产精品久久久久久久久免费相片 | 国产98色在线 | 日韩 | 欧美色999 | 殴美成人在线视频 | 欧美精品福利视频 | 特黄毛片视频 | 91成人免费观看 | av色噜噜 | 91在线资源| 在线视频一区二区三区 | 欧美美女爱爱 | 欧美群妇大交群中文字幕 | 91精品国产92| 久久99精品久久久久久狂牛 | 国产精品欧美一区二区三区不卡 | 久久精品欧美一区二区三区不卡 | 亚洲精品欧美 | 国产重口老太伦 | 久久精品亚洲欧美日韩久久 | 久久久久国产一区二区 | 欧美日韩在线精品 | 看a网站| 久久综合一区 | 一区在线观看视频 | 成人在线精品视频 | 一级毛片在线播放 | 亚洲不卡视频 | 日韩午夜电影 |