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

標題: 我寫的單片機程序為什么跑不起來? [打印本頁]

作者: woshixy1    時間: 2022-7-28 01:37
標題: 我寫的單片機程序為什么跑不起來?
個位前輩好
我最近在學習51單片機
發現 我寫得 程序幾乎和教材給的程序一樣 但就是跑不來

希望前輩能幫我指點一下 謝謝

感謝大家得指點 確實 是我的程序 寫錯了。。
我應該調函數得 結果忘了寫 ()了 但是居然沒有報錯。。。。。就是53行那里。。居然可以生產hex文件。。。。。


先放我寫得
  1. #include "xpt2046.h"

  2. void xpt2046_write_data(u8 dat)//寫入8位串行數據 先寫高位 上升沿發送
  3. {
  4.     u8 i=0;
  5.     xpt2046_DCLK=0;//時序先置0
  6.     _nop_();
  7.     for(i=0;i<8;i++)//發送8位串行數據
  8.     {
  9.         xpt2046_DIN=dat>>7;// 串行數據線=最高位
  10.         dat<<=1;//此高位推至高位方便下次發送
  11.         xpt2046_DCLK=0;//時序置0 方便下次產生上升沿
  12.         _nop_();
  13.         xpt2046_DCLK=1;// 時序置1 產生上升沿
  14.         _nop_();   
  15.     }
  16. }

  17. u16 xpt2046_read_data(void)
  18. {
  19.     u8 i=0;
  20.     u16 xpt2046_data=0;
  21.    
  22.     xpt2046_DCLK=0;//
  23.     _nop_();   
  24.     for(i=0;i<12;i++)
  25.     {
  26.         xpt2046_data<<=1;
  27.         xpt2046_DCLK=1;//
  28.         _nop_();   
  29.         xpt2046_DCLK=0;//產生下降沿 方便下次循環讀取數據
  30.         _nop_();
  31.         xpt2046_data|=xpt2046_DOUT;//或上數據得最低位 為了保證不改變已有數據        
  32.     }
  33.     return xpt2046_data;
  34. }   


  35. u16 xpt2046_read_adc_value(u8 cmd)
  36. {
  37.     u16 adc_value=0;
  38.     u8 i=0;
  39.    
  40.     xpt2046_CS=0;//使能低電平有效
  41.     xpt2046_DCLK=0;
  42.    
  43.     xpt2046_write_data(cmd);
  44.   for(i=6; i>0; i--);//等待
  45.     xpt2046_DCLK=1;
  46.     _nop_();
  47.     xpt2046_DCLK=0;
  48.     _nop_();   
  49.     adc_value=xpt2046_read_data;
  50.     xpt2046_CS=1;
  51.     return     adc_value;
  52. }
復制代碼
然后再放上官方得
  1. #include "xpt2046.h"
  2. #include "intrins.h"

  3. /*******************************************************************************
  4. * 函 數 名       : xpt2046_wirte_data
  5. * 函數功能                 : XPT2046寫數據
  6. * 輸    入       : dat:寫入的數據
  7. * 輸    出             : 無
  8. *******************************************************************************/
  9. void xpt2046_wirte_data(u8 dat)
  10. {
  11.         u8 i;

  12.         CLK = 0;
  13.         _nop_();
  14.         for(i=0;i<8;i++)//循環8次,每次傳輸一位,共一個字節
  15.         {
  16.                 DIN = dat >> 7;//先傳高位再傳低位
  17.                 dat <<= 1;//將低位移到高位
  18.                 CLK = 0;//CLK由低到高產生一個上升沿,從而寫入數據
  19.                 _nop_();        
  20.                 CLK = 1;
  21.                 _nop_();
  22.         }
  23. }

  24. /*******************************************************************************
  25. * 函 數 名       : xpt2046_read_data
  26. * 函數功能                 : XPT2046讀數據
  27. * 輸    入       : 無
  28. * 輸    出             : XPT2046返回12位數據
  29. *******************************************************************************/
  30. u16        xpt2046_read_data(void)
  31. {
  32.         u8 i;
  33.         u16 dat=0;

  34.         CLK = 0;
  35.         _nop_();
  36.         for(i=0;i<12;i++)//循環12次,每次讀取一位,大于一個字節數,所以返回值類型是u16
  37.         {
  38.                 dat <<= 1;
  39.                 CLK = 1;
  40.                 _nop_();
  41.                 CLK = 0; //CLK由高到低產生一個下降沿,從而讀取數據
  42.                 _nop_();
  43.                 dat |= DOUT;//先讀取高位,再讀取低位。        
  44.         }
  45.         return dat;        
  46. }

  47. /*******************************************************************************
  48. * 函 數 名       : xpt2046_read_adc_value
  49. * 函數功能                 : XPT2046讀AD數據
  50. * 輸    入       : cmd:指令
  51. * 輸    出             : XPT2046返回AD值
  52. *******************************************************************************/
  53. u16 xpt2046_read_adc_value(u8 cmd)
  54. {
  55.         u8 i;
  56.         u16 adc_value=0;

  57.         CLK = 0;//先拉低時鐘
  58.         CS  = 0;//使能XPT2046
  59.         xpt2046_wirte_data(cmd);//發送命令字
  60.         for(i=6; i>0; i--);//延時等待轉換結果
  61.         CLK = 1;
  62.         _nop_();
  63.         CLK = 0;//發送一個時鐘,清除BUSY
  64.         _nop_();
  65.         adc_value=xpt2046_read_data();
  66.         CS = 1;//關閉XPT2046
  67.         return adc_value;
  68. }
復制代碼

我反復看了好幾遍 不知道為什么 可能是我C語言基礎太薄弱了。。希望大佬幫我指出不足 謝謝



作者: wpppmlah    時間: 2022-7-28 21:26
你的代碼與原代碼只有一處不同,你代碼的53行與原代碼的71行不同,別的語句都相同......
作者: fsj5098    時間: 2022-7-28 21:51
不管能否跑起來,先看編譯能否通過
作者: 海洋漁業    時間: 2022-7-29 06:01
編譯時有沒有報錯?這個教材用的實驗板和你用的是一樣的嗎?如果實驗板不同,那么你的針腳定義是不是弄錯了?
作者: 15942379927    時間: 2022-7-29 09:52
看看頭文件,intrins.h,函數,應用于程序設計,一般出C51單片機編程中,一般程序中需要使用到空指令_nop_();字符循環移位指令_crol_等時使用。
作者: woshixy1    時間: 2022-7-29 16:55
wpppmlah 發表于 2022-7-28 21:26
你的代碼與原代碼只有一處不同,你代碼的53行與原代碼的71行不同,別的語句都相同......

感謝 我這里確實寫錯了 我應該調函數得 結果忘了寫 ()了 但是居然沒有報錯。。。。。就是53行那里。。
作者: pdwdzz    時間: 2022-7-31 22:22
woshixy1 發表于 2022-7-29 16:55
感謝 我這里確實寫錯了 我應該調函數得 結果忘了寫 ()了 但是居然沒有報錯。。。。。就是53行那里。。

當編譯器檢查寬松時,adc_value=xpt2046_read_data是沒有錯的。造成的結果是把xpt2046_read_data函數地址賦到adc_value,相當于adc_value一直賦入一個常數。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人在线视频免费看 | 国产一区 | 成年人在线视频 | 精品国产乱码久久久久久牛牛 | 黄色大片在线 | 国产偷录叫床高潮录音 | 华丽的挑战在线观看 | 99久久婷婷国产综合精品 | 欧美日韩综合一区 | 涩涩视频网站在线观看 | 国产在线97 | 国产精品免费看 | 欧美成人精品二区三区99精品 | 亚洲欧美国产毛片在线 | 亚洲 中文 欧美 日韩 在线观看 | 中文字幕一区在线观看视频 | 欧美三区 | 99热播放 | 欧美日韩亚洲国产 | 午夜视频在线免费观看 | 四虎永久免费在线 | 久草福利 | 最新毛片网站 | 国产一区二区麻豆 | 日韩中文字幕在线不卡 | 国产成人高清 | 午夜精品导航 | 欧美淫| 97超碰成人 | 国产精品夜色一区二区三区 | 久久久久1| 人人干人人干人人 | 亚洲另类视频 | 亚洲国产成人在线观看 | 国产精品电影在线观看 | 91秦先生艺校小琴 | 亚洲精品视频在线播放 | 国产成人精品久久二区二区 | 91偷拍精品一区二区三区 | 99re国产| 伊人激情网 |