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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何把一個固定的值,用單片機IO口發送出來.具體請看帖子內容

[復制鏈接]
跳轉到指定樓層
樓主
  如題, 比如我把789這個數值. 通過IO口一高低電平的方式發送出來. 然后我用邏輯分析儀來抓波形, 通過波形的高低,來確定這個數值是不是我想要的數值, 中斷定時200US.如果有愿意幫主的老哥, 您給我一個模塊就可以了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-8-19 22:29 | 只看該作者
可以借鑒紅外編碼方法,直接發出來似乎不可能,因為二進制位數太多
回復

使用道具 舉報

板凳
ID:283954 發表于 2020-8-20 03:00 | 只看該作者
先寫一個串口副程式,把要看的數值往串口送,打開下載ISP軟件的“串口助手”,把“下載后自動打開串口”打勾,就可以看到你要的數值了。
回復

使用道具 舉報

地板
ID:213173 發表于 2020-8-20 07:17 | 只看該作者

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;

  5. sbit sign= P2^0;    //觀察標記
  6. sbit SER = P2^1;    //數據輸出

  7. /**功能:串行發送兩個字節的數據**/
  8. void Serial(uint Data)
  9. {
  10.         uchar i;   
  11.         sign= 1;
  12.         for(i=0;i<16;i++)//由高位到低位發送16位數據
  13.         {
  14.                 Data<<=1;      
  15.                 SER = CY;                //溢出位賦值數據輸出端
  16.         }  
  17.         _nop_();
  18.         _nop_();
  19.         _nop_();
  20.         _nop_();
  21.         _nop_();
  22.         _nop_();
  23.         SER = 0;
  24.         sign= 0;
  25.         _nop_();
  26. }

  27. void main()
  28. {         
  29.         uint num=789;//0000 0011 0001 0101
  30.         SER = 0;                //初始化數據輸入端
  31.         sign= 0;                //起始標記
  32.         while(1)                //循環周期200us
  33.         {
  34.                 Serial(num);
  35.         }
  36. }
復制代碼



回復

使用道具 舉報

5#
ID:213173 發表于 2020-8-20 07:21 | 只看該作者
說明:程序是按晶振頻率12MHz編寫
回復

使用道具 舉報

6#
ID:420836 發表于 2020-8-20 07:43 | 只看該作者
如果十進制數可以用8位二進制數表示,則首先將十進制數轉換為二進制數,然后將二進制數發送到IO端口,例如P1.0-P1.7,每一位都有其 相應的IO引腳。 最后,在將二進制數發送給端口后,讀取端口并將其與已知的十進制數進行比較。
回復

使用道具 舉報

7#
ID:548551 發表于 2020-8-20 08:46 | 只看該作者
csmyldl 發表于 2020-8-19 22:29
可以借鑒紅外編碼方法,直接發出來似乎不可能,因為二進制位數太多

最好的方法是紅外的,但是不知道怎么把十進制的轉化為二進制,比如789的二進制是1100010101.我直接在IO口輸出高低就行了. 因為我要用邏輯分析儀抓波形出來, 我要根據波形的高低來轉換成十進制,高低相對應的就是二進制的1和0
回復

使用道具 舉報

8#
ID:401564 發表于 2020-8-20 09:17 | 只看該作者
數值在單片機內部就是以二進制形式保存的,不用轉換
如果你要通過一個IO發送出去,那就像寫入24C01那種樣子發送出去就可以了呀
延時可以適當的延長,一秒延時就能肉眼看到發送的是什么了
但最好是再用另外一個端口來提示時鐘
回復

使用道具 舉報

9#
ID:548551 發表于 2020-8-20 10:55 | 只看該作者

感謝老哥的解答, 但是我有點看不懂.SER=CY;  這是什么意思? 是把CY的這個二進制的1和0通過SER這個IO口輸出來了么?還有就是前面的Data<<=1;這條指令是不是就是相當于一個十進制的數據,被轉換成了二進制,只是系統自己去轉換去了, 是這意思么?  
回復

使用道具 舉報

10#
ID:548551 發表于 2020-8-20 11:05 | 只看該作者
感覺各位大佬的回復,感謝 . 我最開始沒有表述清楚是我的錯誤, 我現在再詳細的說一下我的需求, 我的IC 是八腳的,都被用完了.我采集出來的AD在線看不了,那么我想通過模擬紅外波形的方式通過IO口把這個AD值比如789這個AD值,他的二進制是1100010101.通過IO口發送1100010101.這樣的波形出來. 那么我通過邏輯分析儀,來接收,分析波形,根據波形的高低排列再轉換成789這個十進制的數值. 定時是200US ,比如最高位為1,那么中斷到了以后我就IO口輸出1,下一個中斷來的時候,我還是輸出1,反之如果是0我就輸出0  .這樣能行得通么?
回復

使用道具 舉報

11#
ID:147710 發表于 2020-8-20 12:06 | 只看該作者
xqleft 發表于 2020-8-20 11:05
感覺各位大佬的回復,感謝 . 我最開始沒有表述清楚是我的錯誤, 我現在再詳細的說一下我的需求, 我的IC 是八 ...

用模擬串口,可以在任意端口輸出數據,串口助手顯示數據:


  1. ////測試工作頻率為11.0592MHz
  2. #include "stc15.h"
  3. sbit TXD1 = P3 ^ 1; // 定義模擬串口發送腳
  4. void delay104us(void); //軟件延時STC15W  11.0592M
  5. void Tx1Send(unsigned char dat); //9600,N,8,1                發送一個字節
  6. unsigned char HEX2ASCII(unsigned char dat); //十六進制轉ASCII函數
  7. void Uart_Service(void);
  8. void PrintHex(unsigned char hex); // 發送一hex
  9. void PrintString(unsigned char code * puts); // 發送一串字符串
  10. //
  11. void delay104us(void) {  //(軟件延時STC15W  11.0592M  i=1,j=2,k=140)
  12.         unsigned char i,j,k;
  13.         for (i = 1; i > 0; i--) // 注意后面沒分號(   6M     i=1,j=3,k=49)
  14.                 for (j = 2; j > 0; j--) // 注意后面沒分號(11.0592M  i=1,j=2,k=140)
  15.                         for (k = 140; k > 0; k--); // 注意后面有分號(22.1184M  i=1,j=3,        k=189)
  16. }
  17. //
  18. //模擬串口發送
  19. void Tx1Send(unsigned char dat) //9600,N,8,1                發送一個字節
  20. {
  21.         unsigned char i;
  22.         EA = 0;
  23.         TXD1 = 0;
  24.         delay104us();
  25.         for (i = 0; i < 8; i++) {
  26.                 if (dat & 1)
  27.                         TXD1 = 1;
  28.                 else
  29.                         TXD1 = 0;
  30.                 dat >>= 1;
  31.                 delay104us();
  32.         }
  33.         TXD1 = 1;
  34.         EA = 1;
  35.         delay104us();
  36.         delay104us();
  37. }
  38. //
  39. // 發送hex,如果8位,則0xXX,16位,0xXXXX
  40. void PrintHex(u16 hex)
  41. {
  42.         PrintString("0x");
  43.         if(hex>0xff)
  44.         {
  45.                 Tx1Send(HEX2ASCII(hex>> 12)); // 用戶碼高字節的低半字節
  46.                 Tx1Send(HEX2ASCII(hex>> 8)); // 用戶碼高字節的低半字節
  47.         }
  48.         Tx1Send(HEX2ASCII(hex >> 4)); // 用戶碼高字節的低半字節
  49.         Tx1Send(HEX2ASCII(hex)); // 用戶碼高字節的低半字節
  50. }
  51. //十六進制轉ASCII函數
  52. unsigned char HEX2ASCII(unsigned char dat) {
  53.         dat &= 0x0f;
  54.         if (dat <= 9)
  55.                 return (dat + '0'); //數字0~9
  56.         return (dat - 10 + 'A'); //字母A~F
  57. }
  58. //
  59. // 發送一串字符串
  60. void PrintString(unsigned char code * puts)
  61. {
  62.         for (;  * puts != 0; puts++)
  63.                 Tx1Send( * puts); // 遇到停止符0結束
  64. }
  65. //


  66. void main()
  67. {
  68.                 u32 i=0;
  69.                 unsigned int ui_number=0x6789;       
  70.                 P3M1=P3M0=0;
  71.                 P1M1=P1M0=0;
  72.     while (1)
  73.                 {
  74.                         i++;
  75.                         if(i>150000)
  76.                         {
  77.                                 i=0;
  78.          PrintHex(ui_number);
  79.                                 P33=!P33;
  80.                                 PrintString(" ");
  81.                         }
  82.                 }
  83. }

  84. ///
復制代碼



回復

使用道具 舉報

12#
ID:548551 發表于 2020-8-20 15:34 | 只看該作者
XTXB 發表于 2020-8-20 12:06
用模擬串口,可以在任意端口輸出數據,串口助手顯示數據:

謝謝大佬的指點. 我先研究一下
回復

使用道具 舉報

13#
ID:592807 發表于 2020-8-20 15:52 | 只看該作者
ASCII碼了了解下
回復

使用道具 舉報

14#
ID:469932 發表于 2020-8-20 16:59 | 只看該作者
過于天真,串口有發射與接收協議,你就想用邏輯分析儀的波形看去你的值,那別人的代碼讓你這樣一看都得破解了!
回復

使用道具 舉報

15#
ID:592807 發表于 2020-8-22 08:40 | 只看該作者
xqleft 發表于 2020-8-20 11:05
感覺各位大佬的回復,感謝 . 我最開始沒有表述清楚是我的錯誤, 我現在再詳細的說一下我的需求, 我的IC 是八 ...

不能,應為ADC是專門的外設,他的信號轉換時間是固定的,很快的,你IO口手動切換,再快也不肯能和他一致
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线观看 | 国产欧美一区二区三区久久 | 91色站| 国产精品99久久久久久宅男 | 久久久久久九九九九 | 欧美日本韩国一区二区 | 成年人在线视频 | 亚洲高清久久 | 国产成人精品一区二区三区网站观看 | 精品久久国产 | 欧美一区二区三区在线观看 | 91美女视频 | 三级黄色大片网站 | 国产福利在线播放麻豆 | 青久草视频 | 欧美精品久久久久 | 成人天堂| 国产视频精品免费 | 在线欧美视频 | 婷婷免费视频 | 国产一区二区三区色淫影院 | 成人在线看片 | 国产精品视频一区二区三区 | 亚洲劲爆av | 免费精品视频 | 中文字幕爱爱视频 | 国产福利视频 | 国产精品欧美一区二区 | 日本一区二区不卡 | 亚洲人va欧美va人人爽 | 久久久久99 | 天天夜天天操 | 亚洲日韩欧美一区二区在线 | www.日韩| 精品视频www | 欧美不卡| 国产精品久久久亚洲 | 欧美二区三区 | 91精品国产乱码久久久久久久久 | 天天看天天爽 | 国产日韩欧美 |