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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5143|回復: 25
打印 上一主題 下一主題
收起左側

想請問各位大佬,為什么單片機程序會燒不進去芯片里?

  [復制鏈接]
跳轉到指定樓層
樓主
之前拿焊好的板燒程序一直燒不進去,之后拿最小系統那個模塊來燒程序也不行,期間換了好幾塊芯片來試都不行,一直顯示正在檢測目標單片機。請問這是程序的問題嗎?還是其他原因?
單片機源程序如下:
  1. /************************************
  2. *********STC89C52**********
  3. **********12MHz晶振*********/

  4. #include "reg51.h"
  5. #include<stdio.h>
  6. #include<intrins.h>
  7. #define uint8 unsigned char
  8. #define uint16 unsigned int
  9. #define uchar unsigned char
  10. #define uint unsigned int





  11. uint16 cnt2ms;        //10ms計時器
  12. uint8 cnt1s;        //1秒計數器

  13. //電阻--------------------------------
  14. #define        Z1 13700053.00
  15. #define        Z2 3685279.00


  16. float RZ=0;
  17. unsigned long   RX=0;
  18. unsigned long   RX2=0;
  19. unsigned long   RX3=0;
  20. unsigned long   RX4=0;
  21. unsigned long   RX5=0;
  22. unsigned long   RX6=0;
  23. unsigned long   RX7=0;
  24. unsigned long   RX8=0;
  25. unsigned long   RX9=0;



  26. //電感--------------------------------
  27. float LZ=0;
  28. #define        C1 0.1461

  29. //電容--------------------------------
  30. float CZ=0;
  31. float CX=0;
  32. #define        R1 42874

  33. uint8 KL=0;        //
  34. unsigned int Pulsecnt=0;        //脈沖個數
  35. unsigned int Pulsenum;        //脈沖個數
  36. uint8 start=0;        //
  37. uint16 PulseTime;        //10ms計數器
  38. uint16 Pulse;        //10ms計數器
  39. bit flag=0;
  40. uint8 CH=0;        //
  41. unsigned long x;
  42. void Init_Extint(void);
  43. void TimerInitProc();

  44. void Init_System(void);
  45. void Display(uint8 chose_dat, uint8 dat);
  46. void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s);
  47. void DelayMs(uint8 Ms);
  48. uint8 Pulse_FLAG=0;
  49. uint8 Pulse_5=0;
  50. /********************************按鍵*****************************************/
  51. sbit    K1=P1^3;
  52. sbit    K2=P1^4;
  53. sbit    K3=P1^5;

  54. sbit    A0=P2^1;
  55. sbit    A1=P2^0;

  56. sbit    RED=P3^6;
  57. sbit    YEW=P3^4;
  58. sbit    GRE=P3^3;
  59. /********************************LCD液晶**************************************/
  60. #define LCD_Data P0           //LCD的數據口
  61. sbit    LCD_BF=LCD_Data^7;    //LCD的忙信號位
  62. sbit    LCD_RS=P1^0;
  63. sbit    LCD_RW=P1^1;
  64. sbit    LCD_EN=P1^2;



  65. #define LCD_GO_HOME               0x02         //AC=0,光標、畫面回HOME位

  66. //輸入方式設置
  67. #define LCD_AC_AUTO_INCREMENT     0x06         //數據讀、寫操作后,AC自動增一
  68. #define LCD_AC_AUTO_DECREASE      0x04         //數據讀、寫操作后,AC自動減一
  69. #define LCD_MOVE_ENABLE           0x05         //數據讀、寫操作,畫面平移
  70. #define LCD_MOVE_DISENABLE        0x04         //數據讀、寫操作,畫面不動

  71. //設置顯示、光標及閃爍開、關
  72. #define LCD_DISPLAY_ON            0x0C         //顯示開
  73. #define LCD_DISPLAY_OFF           0x08         //顯示關
  74. #define LCD_CURSOR_ON             0x0A         //光標顯示
  75. #define LCD_CURSOR_OFF            0x08         //光標不顯示
  76. #define LCD_CURSOR_BLINK_ON       0x09         //光標閃爍
  77. #define LCD_CURSOR_BLINK_OFF      0x08         //光標不閃爍

  78. //光標、畫面移動,不影響DDRAM
  79. #define LCD_LEFT_MOVE             0x18         //LCD顯示左移一位
  80. #define LCD_RIGHT_MOVE            0x1C         //LCD顯示右移一位
  81. #define LCD_CURSOR_LEFT_MOVE      0x10         //光標左移一位
  82. #define LCD_CURSOR_RIGHT_MOVE     0x14         //光標右移一位

  83. //工作方式設置
  84. #define LCD_DISPLAY_DOUBLE_LINE   0x38         //兩行顯示
  85. #define LCD_DISPLAY_SINGLE_LINE   0x30         //單行顯示
  86. /*定義子程序*/
  87. void LCD_ClrAll(void);              //清屏
  88. void Judge_LCD_busy(void);           //檢測是否忙碌
  89. void LCD_Write(uchar WriteData);     //寫控制字
  90. void LCD_write_data(uchar LCD_data); //寫數據顯示
  91. void LCD_cursor(uchar x);    //光標起始地址
  92. void LCD_printc(unsigned char lcd_data) ;  //輸出一個字符
  93. void LCD_prints(unsigned char *lcd_string);//輸出一個字符串



  94. /*LCD1602忙碌判斷子程序*/
  95. void Judge_LCD_busy(void)   //判斷LCD1602是否忙狀態
  96. {
  97. while(1)
  98.   {
  99.    LCD_EN=0;
  100.    LCD_RS=0;
  101.    LCD_RW=1;
  102.    LCD_Data=0xff;
  103.    LCD_EN=1;   //EN 是1-0 使能
  104.    if(!LCD_BF)break; //LCD_BF=1表示忙碌,需要等待
  105.   }
  106.    LCD_EN=0;
  107. }
  108. /******LCD清屏***************/
  109. void LCD_ClrAll(void)
  110. {

  111. Judge_LCD_busy();   //判斷是否忙碌
  112. LCD_RS=0;
  113. LCD_RW=0;
  114. LCD_Data=0x01;
  115. LCD_EN=1;
  116. LCD_EN=0;

  117. }
  118. /*******LCD寫數據定義各種模式*********/
  119. void LCD_Write(uchar WriteData)   //寫指令到LCD
  120. {
  121. Judge_LCD_busy();
  122. LCD_RS=0;
  123. LCD_RW=0;

  124. P0=WriteData; //把WriteDate的數據送到數據口
  125. LCD_EN=1;
  126. LCD_EN=0;
  127. }
  128. /********LCD顯示數據***********/
  129. void LCD_write_data(uchar LCD_data)      //輸入一個字節數據到LCD
  130. {
  131. Judge_LCD_busy();
  132. LCD_RS=1;
  133. LCD_RW=0;

  134. P0=LCD_data;
  135. LCD_EN=1;
  136. LCD_EN=0;
  137. }
  138. /****光標位置的確定***/
  139. void LCD_cursor(uchar x)            //LCD光標定位到x處
  140. {
  141. LCD_Write(0x80+x);                       //第一行地址是0x80

  142. }
  143. /*輸入一個字符*/
  144. void LCD_printc(unsigned char lcd_data)
  145. {
  146. LCD_write_data(lcd_data);
  147. }

  148. /*輸出字符串*/
  149. void LCD_prints(unsigned char *lcd_string)
  150. {
  151. unsigned char i=0;
  152. while(lcd_string[i]!=0x00)
  153.   {
  154.    LCD_write_data(lcd_string[i]);
  155.    i++;
  156.   }
  157. }

  158. /*初始化程序*/
  159. void LCD_initial(void)                        //初始化LCD
  160. {
  161. LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
  162. LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
  163. LCD_Write(LCD_DISPLAY_DOUBLE_LINE);
  164. LCD_ClrAll();

  165. }

  166. /****延時******/
  167. void delay_1ms(uint x)
  168. {
  169. uint j;
  170. uchar i;
  171. for(j=0;j<x;j++)
  172. {
  173. for(i=0;i<120;i++);
  174. }
  175. }
  176. void Key_SM(void){

  177.         if(K3==0){
  178.              delay_1ms(5);
  179.             if(K3==0){
  180.                 YEW=1;RED=0;
  181.                 GRE=1;                  
  182.                 LCD_cursor(0x00);
  183.                 LCD_prints("   MEASURE Lx   ");  
  184.                 //----電感檔-------
  185.                 A0=0;
  186.                 A1=1;
  187.                 CH=2;//電感檔

  188.                 while(K3==0){}
  189.                      
  190.                  }
  191.             }

  192.         if(K2==0){
  193.              delay_1ms(5);
  194.             if(K2==0){
  195.                 GRE=1;YEW=0;
  196.                 RED=1;                  
  197.                 LCD_cursor(0x00);            
  198.                 LCD_prints("   MEASURE Rx   ");  
  199.                //----電阻檔-------
  200.                 A0=1;
  201.                 A1=0;
  202.                 CH=1;//電阻檔   
  203.                  
  204.                 while(K2==0){}
  205.                      }

  206.                 }
  207.        if(K1==0){
  208.              delay_1ms(5);
  209.             if(K1==0){
  210.                YEW=1;GRE=0;RED=1;
  211.                LCD_cursor(0x00);
  212.                LCD_prints("   MEASURE Cx   ");  
  213.                //----電容檔-------
  214.                 A0=0;
  215.                 A1=0;
  216.                 CH=3;//電容檔                     
  217.                while(K1==0){}
  218.                        }

  219.                 }


  220. }

  221. void  Value_to_ASCII(unsigned long value,uchar add)
  222. {
  223.     unsigned char temp[] = "0000.000K ";
  224.     temp[0] = value/1000000 + 0x30;//數值改成字符,液晶顯示需要ASCII碼
  225.     value = value%1000000;
  226.     temp[1] = value/100000 + 0x30;
  227.     value = value%100000;
  228.     temp[2] = value/10000 + 0x30;
  229.     value = value%10000;
  230.     temp[3] = value/1000 + 0x30;
  231.     value = value%1000;
  232.     temp[5] = value/100 + 0x30;
  233.     value = value%100;
  234.     temp[6] = value/10 + 0x30;
  235.     value = value%10;
  236.     temp[7] = value + 0x30;  
  237.    
  238. LCD_cursor(add);   //光標起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f
  239. LCD_prints(temp);
  240. }

  241. void  Value_to_ASCIIL(unsigned long value,uchar add)
  242. {
  243.     unsigned char temp[] = "000000uH ";
  244.     temp[0] = value/100000 + 0x30;
  245.     value = value%100000;
  246.     temp[1] = value/10000 + 0x30;
  247.     value = value%10000;
  248.     temp[2] = value/1000 + 0x30;
  249.     value = value%1000;
  250.     temp[3] = value/100 + 0x30;
  251.     value = value%100;
  252.     temp[4] = value/10 + 0x30;
  253.     value = value%10;
  254.     temp[5] = value + 0x30;  
  255.    
  256. LCD_cursor(add);   //光標起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f
  257. LCD_prints(temp);
  258. }
  259. void  Value_to_ASCIIC(unsigned long value,uchar add)
  260. {
  261.     unsigned char temp[] = "00000.0pF ";
  262.     temp[0] = value/100000 + 0x30;
  263.     value = value%100000;
  264.     temp[1] = value/10000 + 0x30;
  265.     value = value%10000;
  266.     temp[2] = value/1000 + 0x30;
  267.     value = value%1000;
  268.     temp[3] = value/100 + 0x30;
  269.     value = value%100;
  270.     temp[4] = value/10 + 0x30;
  271.     value = value%10;
  272.     temp[6] = value + 0x30;  
  273.    
  274. LCD_cursor(add);   //光標起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f
  275. LCD_prints(temp);
  276. }
  277. //--------------------主程序--------------------------------
  278. void main()
  279. {
  280.    
  281.       TMOD=0x51;                 //設置定時器0,方式1::1位定時器
  282.       TH1=0;
  283.       TL1=0;
  284.       TH0=(65536-2100)/256; //設定定時周期
  285.       TL0=(65536-2100)%256;
  286.       TR0=1;
  287.       TR1=1;
  288.       ET1=1;
  289.       ET0=1;
  290.       EA=1;
  291. //----電阻檔-------
  292.       A0=1;
  293.       A1=0;
  294.     LCD_initial();
  295.           delay_1ms(50);
  296.     LCD_initial();
  297.           delay_1ms(50);
  298.     LCD_cursor(0x00);
  299.                
  300.     LCD_prints("   MEASURE Rx   ");
  301.     GRE=1;
  302.         YEW=0;
  303.           RED=1;
  304.     LCD_cursor(0x45);
  305.     CH=1;
  306.    
  307.         while(1)
  308.         {

  309.      Key_SM();
  310.     if(flag==1){

  311.         flag=0;

  312.         x=Pulsenum*65536+TL1;//計算1s內的脈沖個數,頻率=脈沖個數
  313. if(CH==1){

  314.         RZ=(Z1/x);//測量100到1000
  315.         RX=RZ-1000;
  316.         RX=RX>>1;

  317. if(RX>=100){
  318.         RX=RX+100;
  319.     }else{RX=0;}

  320.     if(x==0){RX=0;RX2=0;RX3=0;RX4=0;RX5=0;RX6=0;RX7=0;RX8=0;RX9=0;}
  321.   if(RX>1000000){RX=1000000; }
  322.             
  323.               RX2=(RX+RX3+RX4+RX5+RX6+RX7+RX8+RX9)>>3;//求平均提高精度

  324. RX9=RX8;RX8=RX7;RX7=RX6;RX6=RX5;RX5=RX4;RX4=RX3;RX3=RX;
  325.               //保存上一次的阻值
  326.             
  327.          Value_to_ASCII(RX2,0x44);//更新阻值顯示



  328. }
  329. if(CH==2){

  330.       
  331.         LZ=(x*39*C1)/100000;
  332.         LZ=LZ*x;
  333.         LZ=1000000/LZ;
  334.     if(x==0)LZ=0;
  335.   if(LZ>999999)LZ=999999; //限制最高值
  336.          Value_to_ASCIIL(LZ,0x44);//更新電感值顯示
  337. }
  338. if(CH==3){

  339.        CZ=660000/x;
  340.     if(x==0||x>30500)CZ=0;
  341.   if(CZ>999999)CZ=999999;  //限制最高值
  342.          Value_to_ASCIIC(CZ,0x44);//更新電容值顯示
  343. }
  344.          cnt2ms=0;
  345.          Pulsenum=0;
  346.          TH1=0;
  347.          TL1=0;
  348.          TR1=1;
  349.         
  350.     }
  351.         
  352.         }
  353. }
  354. /*******************************************************************************
  355. * 函數名:Extio interrupt
  356. * 函數功能:/TO引腳下降沿進入中斷
  357. * 入口參數:無
  358. * 返    回:無
  359. *******************************************************************************/
  360. void T1_interrupt(void) interrupt 3 using 0
  361. {
  362.    
  363.   Pulsenum++;        //保存測得脈沖值  
  364.         
  365. }
  366. /********************************************************************
  367. 函數功能:定時器/計時器1中斷處理
  368. 入口參數:null
  369. 返    回:null
  370. 備    注:null
  371. ********************************************************************/
  372. void Timer0IntProc() interrupt 1 using 0 //2ms
  373. {
  374.   TH0=(65536-2000)/256;
  375.   TL0=(65536-2000)%256;
  376.     cnt2ms++;

  377.         if(cnt2ms==500)        //1s計時到
  378.         {              
  379.                 cnt2ms = 0;
  380.             
  381.         flag=1;
  382.         }

  383. }
復制代碼


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

使用道具 舉報

沙發
ID:96682 發表于 2021-6-17 14:09 來自觸屏版 | 只看該作者
操作問題,這跟所使用的下載器有關。插拔,上電等步驟得按部就班操作才行,不然會讓你抓狂
回復

使用道具 舉報

板凳
ID:938885 發表于 2021-6-17 14:41 | 只看該作者
驅動,操作,下載器,或者電腦有點問題都是有可能的  多試幾下試試
回復

使用道具 舉報

地板
ID:57657 發表于 2021-6-17 15:47 | 只看該作者
請用示波器或萬用表的頻率檔,檢測晶振是否正常。
回復

使用道具 舉報

5#
ID:829782 發表于 2021-6-17 16:43 | 只看該作者
lyh122 發表于 2021-6-17 14:41
驅動,操作,下載器,或者電腦有點問題都是有可能的  多試幾下試試

都試過了,不行
回復

使用道具 舉報

6#
ID:829782 發表于 2021-6-17 16:49 | 只看該作者
npn 發表于 2021-6-17 15:47
請用示波器或萬用表的頻率檔,檢測晶振是否正常。

可我單獨使用最小系統模塊燒入程序也不行,大佬可還有其他原因導致的嗎?
回復

使用道具 舉報

7#
ID:829782 發表于 2021-6-17 16:51 | 只看該作者
wc86110 發表于 2021-6-17 14:09
操作問題,這跟所使用的下載器有關。插拔,上電等步驟得按部就班操作才行,不然會讓你抓狂

真的抓狂了,按照步驟走試了好多次都不行,大佬可還有其他解決辦法嗎?
回復

使用道具 舉報

8#
ID:829782 發表于 2021-6-17 16:53 | 只看該作者
lyh122 發表于 2021-6-17 14:41
驅動,操作,下載器,或者電腦有點問題都是有可能的  多試幾下試試

大佬覺得可能還有其他什么原因導致的嗎?
回復

使用道具 舉報

9#
ID:94031 發表于 2021-6-17 16:59 | 只看該作者
一直顯示正在檢測目標單片機,這時只要斷一下板子供電,就可以往下進行了。
回復

使用道具 舉報

10#
ID:829782 發表于 2021-6-17 17:11 | 只看該作者
xuyaqi 發表于 2021-6-17 16:59
一直顯示正在檢測目標單片機,這時只要斷一下板子供電,就可以往下進行了。

這個也試過了,斷電后再供電還是依然在顯示正在檢測目標單片機,大佬覺得還有其他原因嗎?
回復

使用道具 舉報

11#
ID:94031 發表于 2021-6-17 17:18 | 只看該作者
木槿w 發表于 2021-6-17 17:11
這個也試過了,斷電后再供電還是依然在顯示正在檢測目標單片機,大佬覺得還有其他原因嗎?

那估計你的板子硬件有問題
回復

使用道具 舉報

12#
ID:678280 發表于 2021-6-17 17:39 | 只看該作者
我也曾經遇到這事,后來改了對應芯片型號就能成功燒寫了,芯片后綴也不能差。


回復

使用道具 舉報

13#
ID:829782 發表于 2021-6-17 18:06 | 只看該作者
一片一城 發表于 2021-6-17 17:39
我也曾經遇到這事,后來改了對應芯片型號就能成功燒寫了,芯片后綴也不能差。

嗚嗚嗚,后綴改了也不行
回復

使用道具 舉報

14#
ID:94031 發表于 2021-6-17 19:56 | 只看該作者
木槿w 發表于 2021-6-17 16:49
可我單獨使用最小系統模塊燒入程序也不行,大佬可還有其他原因導致的嗎?

會不會你的下載線有問題
回復

使用道具 舉報

15#
ID:939589 發表于 2021-6-17 20:37 | 只看該作者
型號,波特率換換
回復

使用道具 舉報

16#
ID:748788 發表于 2021-6-17 21:15 | 只看該作者
rx、tx有沒有交叉?
回復

使用道具 舉報

17#
ID:372579 發表于 2021-6-17 21:53 | 只看該作者
可能存在的問題如下
1、電平轉換芯片MAX232燒壞
2、單片機P3.0(RXD)和P3.1(TXD)燒壞
3、復位電路有問題,RST端一直被置為高電平,正常情況下不復位時RST端為低電平
4、PC端的RXD對應MAX232上的TXD,不知道你有沒有換過串口線
5、電腦的串口或者是串口線壞了
6、是不是對應芯片型號,能不能基本上就是這些問題吧,你可以參考參考

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

18#
ID:939657 發表于 2021-6-17 23:06 | 只看該作者
可以參考我之前遇到過的情況:
1、燒錄軟件不對,就去找度娘了解清楚我所使用的的芯片適應的燒錄軟件
2、串行口接觸不良,多把開關按幾遍,USB線多次重復插進去,再燒錄
3、選的芯片類型不對,一般普中單片機是stc89Cxx(new)這個類型
4、波特率過低,可以試一下波特率調到最高

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

19#
ID:938846 發表于 2021-6-18 00:16 | 只看該作者
每一步驟都要細致地去執行,而且要多嘗試幾次
回復

使用道具 舉報

20#
ID:690831 發表于 2021-6-18 01:45 | 只看該作者
確定晶振正常
把兩根電源線,以及TX,RX直接接到單片機的管腳上,以排除虛焊或跳線設置錯誤。
把P1.0和P1.1接地試試

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

21#
ID:592807 發表于 2021-6-18 08:35 | 只看該作者
木槿w 發表于 2021-6-17 16:43
都試過了,不行

斷電斷的不徹底
回復

使用道具 舉報

22#
ID:524818 發表于 2021-6-18 08:44 | 只看該作者
用的什么下載線?
回復

使用道具 舉報

23#
ID:879348 發表于 2021-6-18 13:37 | 只看該作者
初學者的通病,當年也經常燒錄不進去,一個好的燒錄工具很重要

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

24#
ID:938893 發表于 2021-6-19 13:40 | 只看該作者
重新編譯,型號選擇;蛘呔W上弄一個程序檢查一下硬件問題
回復

使用道具 舉報

25#
ID:742483 發表于 2021-6-19 14:17 | 只看該作者
如果生成了HEX文件,燒不進去就不會是程序的問題,可能是軟件那兒出的錯誤
回復

使用道具 舉報

26#
ID:923669 發表于 2021-6-19 18:17 來自觸屏版 | 只看該作者
逐步檢查一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人日韩 | a黄视频 | 一区二区日韩 | 网页av| 午夜小视频在线播放 | 欧美亚洲在线 | 亚洲第1页| 久久精品国产一区二区电影 | 亚洲人成人一区二区在线观看 | 一二区视频| 国产一区二区三区日韩 | 欧美a区| 亚洲成人中文字幕 | 午夜影院在线观看免费 | 久久精品亚洲 | 羞羞网站在线观看 | 日韩一区不卡 | 久久草在线视频 | 亚洲成人精品在线 | 日韩电影a | 精品亚洲一区二区三区四区五区 | 久久伊人免费视频 | 激情福利视频 | 久久久av中文字幕 | 天堂在线中文 | 欧美一区精品 | 欧美久久不卡 | 黄色片视频| 久久久国产精品视频 | 色综合中文 | 91在线精品一区二区 | 成人一区二区三区 | 亚洲成人av| 中文字幕一区二区三区四区不卡 | 欧美日韩在线观看一区 | 欧美精品久久久 | 国产中文字幕在线观看 | 一级黄色影片在线观看 | 在线观看国产www | 毛片a级 | 欧美一级在线 |