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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

想讓單片機串口定時發送一組數據 但結果是定時發送一次,一次發送幾十遍,怎么改?

[復制鏈接]
跳轉到指定樓層
樓主
ID:796670 發表于 2021-1-8 09:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 明日香 于 2021-1-11 19:40 編輯

想實現的結果是每隔10s發送一次,用的是ds1302,已經設置好了second為1s,但運行結果是每隔10s發送一次,一次發送了幾十遍,請問應該怎么改程序呢?
我嘗試在各個地方加標志位,結果都是每隔10s發送一次,一次發送幾十遍數據,而不是每隔10s發送一組數據.....

以下為源程序:

  1. #include <stc12c5a.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <intrins.h>
  7. #include"ds1302.h"
  8. #define uchar unsigned char
  9. #define uint  unsigned int
  10.         
  11. uchar rec[9];//接收
  12. uchar wind_speed[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};//要發送的問詢幀
  13. void init();// 初始化函數
  14. void UART_1send();

  15. int flag2;/傳感器接收標志位
  16. int flags;
  17. int i;

  18. void delay(uint z)//延時函數1ms
  19. {
  20.         uint x,y;
  21.         for(x=z;x>0;x--);
  22.                 for(y=110;y>0;y--);
  23. }


  24. void init()  //系統初始化
  25. {
  26. TMOD |=0X20;//定時器T1,方式2,波特率由PCON寄存器的SMOD決定
  27. SCON=0x50; //REN RI TI,RI為0,TI為0
  28. //串行口1方式1 SCON是串行口1的串行控制寄存器,REN為1,允許接收
  29. PCON=0x00;//各工作方式波特率加倍
  30. TH1=0xfD;//9600bps@11.0592
  31. TL1=0xfD;
  32. TR1=1; //定時器1中斷打開
  33. EA=1;//cpu總中斷允許位,1為開放中斷
  34. ES=1;// 1允許串行口中斷
  35. }

  36. void main()
  37. {
  38.                 uchar second;/ds1302秒
  39.                 flags=1;
  40.                 flag2=1;
  41.                 init();//初始化
  42.            while(1)
  43.         {               
  44.                 delay(1000);
  45.                 if(second%8==0)  //每隔8s讓flag2=0,flags=0
  46.                 {
  47.                         flag2=0;
  48.                         flags=0;
  49.                 }
  50.           if(second%10==0&&flag2==0) //每隔10秒,且flag2=0
  51.                 {
  52.                          flag2=1;
  53.                         delay(1000);
  54.                         UART_1send();        //串口發送
  55.                          delay(1000);
  56.                          flags=1;     //發送完讓flags=1
  57.                 }
  58.                
  59.         }
  60. }

  61. void UART_1send()  //串口發送函數
  62. {
  63.           uchar i;
  64.           delay(500);
  65.         if(flags==0)        //如果風速標志位flags=0,則發送風速問詢幀
  66.   {
  67.                         for(i=0;i<8;i++)
  68.                   {

  69.                                 SBUF=wind_speed[i];//風向數據
  70.                                 while(TI==0);
  71.                                 {
  72.                                                  }                        //數據發送結束時TI自動置1
  73.                                 TI=0;//清除數據傳送標志
  74.                         }
  75.   }
  76. }
復制代碼

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

使用道具 舉報

沙發
ID:390416 發表于 2021-1-8 11:12 | 只看該作者
STC單片機串口發送 不需要while死等 串口接收執行軟件復位
http://www.zg4o1577.cn/bbs/dpj-200927-1.html
我這個貼子就是串口,趕緊去瞧瞧
回復

使用道具 舉報

板凳
ID:876745 發表于 2021-1-12 13:45 | 只看該作者
隨便看了一眼,主函數定義的局部變量second未賦值,也沒用指針,second的值哪來?如果second是全局變量,不該在main里面定義。
回復

使用道具 舉報

地板
ID:796670 發表于 2021-1-12 20:00 | 只看該作者
zyztoto 發表于 2021-1-12 13:45
隨便看了一眼,主函數定義的局部變量second未賦值,也沒用指針,second的值哪來?如果second是全局變量,不 ...

我用了ds1302模塊,second已經設置成秒了,在另一個文件里,沒往這里放
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看黄色电影 | 欧美黑人国产人伦爽爽爽 | 国产高清视频在线播放 | 成人免费视频久久 | 在线观看视频91 | 91久久久久 | 亚州精品天堂中文字幕 | 成人av免费在线观看 | 91精品国产综合久久香蕉922 | 91大神在线资源观看无广告 | 国产精品毛片在线 | 久久久青草 | 久久男人 | 一区二区在线 | 91av视频在线免费观看 | 欧美在线网站 | 欧美男人天堂 | 日韩欧美中文 | 美女久久久久 | 国产精品视频一区二区三区四区国 | 久久久久久久久淑女av国产精品 | 亚洲免费一 | 国产黄色小视频在线观看 | 国产成人a亚洲精品 | 欧美激情一区二区三区 | 99热在这里只有精品 | 天久久| 五月天综合影院 | 精品欧美乱码久久久久久 | 日本精品一区二区三区在线观看视频 | 欧美一区二区在线观看 | h在线 | av网站在线看 | 超碰在线观看97 | av网址在线 | 国产精品久久精品 | 亚洲综合无码一区二区 | 婷婷久 | 超碰人人在线 | 国产成都精品91一区二区三 | 一级黄色片网站 |