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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我寫的單片機程序為什么跑不起來?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1040766 發表于 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語言基礎太薄弱了。。希望大佬幫我指出不足 謝謝


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

使用道具 舉報

沙發
ID:68189 發表于 2022-7-28 21:26 | 只看該作者
你的代碼與原代碼只有一處不同,你代碼的53行與原代碼的71行不同,別的語句都相同......
回復

使用道具 舉報

板凳
ID:78901 發表于 2022-7-28 21:51 | 只看該作者
不管能否跑起來,先看編譯能否通過
回復

使用道具 舉報

地板
ID:401113 發表于 2022-7-29 06:01 | 只看該作者
編譯時有沒有報錯?這個教材用的實驗板和你用的是一樣的嗎?如果實驗板不同,那么你的針腳定義是不是弄錯了?
回復

使用道具 舉報

5#
ID:331575 發表于 2022-7-29 09:52 | 只看該作者
看看頭文件,intrins.h,函數,應用于程序設計,一般出C51單片機編程中,一般程序中需要使用到空指令_nop_();字符循環移位指令_crol_等時使用。
回復

使用道具 舉報

6#
ID:1040766 發表于 2022-7-29 16:55 | 只看該作者
wpppmlah 發表于 2022-7-28 21:26
你的代碼與原代碼只有一處不同,你代碼的53行與原代碼的71行不同,別的語句都相同......

感謝 我這里確實寫錯了 我應該調函數得 結果忘了寫 ()了 但是居然沒有報錯。。。。。就是53行那里。。
回復

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线一区 | h视频免费在线观看 | 国产成人福利视频在线观看 | 久久精品—区二区三区 | 粉嫩粉嫩芽的虎白女18在线视频 | 久久国产视频播放 | 蜜桃视频成人 | 亚洲精品乱码8久久久久久日本 | 亚洲一区二区三区视频 | 精品亚洲一区二区三区 | 97av视频| 日韩一区二区福利 | 成人午夜精品 | 91成人免费看 | 大乳boobs巨大吃奶挤奶 | 草比网站 | 青久草视频 | 亚洲精品视频在线 | 亚洲欧美视频 | 欧美一级淫片007 | 成人在线观看免费爱爱 | 日韩av一区二区在线 | 亚洲综合第一页 | 婷婷久久综合 | 久久国 | 亚洲第一在线视频 | 免费视频二区 | 国产精品成人在线 | 你懂的国产 | 久久久久国产精品 | 性欧美精品一区二区三区在线播放 | 欧美午夜一区二区三区免费大片 | 欧美一区2区三区4区公司二百 | 午夜小电影 | 一级毛片视频 | 999久久久久久久久6666 | 91麻豆精品一区二区三区 | 久久久久国产精品免费免费搜索 | 天天爽天天干 | 免费精品 | 成人中文字幕在线观看 |