標(biāo)題:
想讓單片機(jī)串口定時(shí)發(fā)送一組數(shù)據(jù) 但結(jié)果是定時(shí)發(fā)送一次,一次發(fā)送幾十遍,怎么改?
[打印本頁]
作者:
明日香
時(shí)間:
2021-1-8 09:33
標(biāo)題:
想讓單片機(jī)串口定時(shí)發(fā)送一組數(shù)據(jù) 但結(jié)果是定時(shí)發(fā)送一次,一次發(fā)送幾十遍,怎么改?
本帖最后由 明日香 于 2021-1-11 19:40 編輯
想實(shí)現(xiàn)的結(jié)果是每隔10s發(fā)送一次,用的是ds1302,已經(jīng)設(shè)置好了second為1s,但運(yùn)行結(jié)果是每隔10s發(fā)送一次,一次發(fā)送了幾十遍,請問應(yīng)該怎么改程序呢?
我嘗試在各個(gè)地方加標(biāo)志位,結(jié)果都是每隔10s發(fā)送一次,一次發(fā)送幾十遍數(shù)據(jù),而不是每隔10s發(fā)送一組數(shù)據(jù).....
以下為源程序:
#include <stc12c5a.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <intrins.h>
#include"ds1302.h"
#define uchar unsigned char
#define uint unsigned int
uchar rec[9];//接收
uchar wind_speed[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};//要發(fā)送的問詢幀
void init();// 初始化函數(shù)
void UART_1send();
int flag2;/傳感器接收標(biāo)志位
int flags;
int i;
void delay(uint z)//延時(shí)函數(shù)1ms
{
uint x,y;
for(x=z;x>0;x--);
for(y=110;y>0;y--);
}
void init() //系統(tǒng)初始化
{
TMOD |=0X20;//定時(shí)器T1,方式2,波特率由PCON寄存器的SMOD決定
SCON=0x50; //REN RI TI,RI為0,TI為0
//串行口1方式1 SCON是串行口1的串行控制寄存器,REN為1,允許接收
PCON=0x00;//各工作方式波特率加倍
TH1=0xfD;//9600bps@11.0592
TL1=0xfD;
TR1=1; //定時(shí)器1中斷打開
EA=1;//cpu總中斷允許位,1為開放中斷
ES=1;// 1允許串行口中斷
}
void main()
{
uchar second;/ds1302秒
flags=1;
flag2=1;
init();//初始化
while(1)
{
delay(1000);
if(second%8==0) //每隔8s讓flag2=0,flags=0
{
flag2=0;
flags=0;
}
if(second%10==0&&flag2==0) //每隔10秒,且flag2=0
{
flag2=1;
delay(1000);
UART_1send(); //串口發(fā)送
delay(1000);
flags=1; //發(fā)送完讓flags=1
}
}
}
void UART_1send() //串口發(fā)送函數(shù)
{
uchar i;
delay(500);
if(flags==0) //如果風(fēng)速標(biāo)志位flags=0,則發(fā)送風(fēng)速問詢幀
{
for(i=0;i<8;i++)
{
SBUF=wind_speed[i];//風(fēng)向數(shù)據(jù)
while(TI==0);
{
} //數(shù)據(jù)發(fā)送結(jié)束時(shí)TI自動置1
TI=0;//清除數(shù)據(jù)傳送標(biāo)志
}
}
}
復(fù)制代碼
作者:
人人學(xué)會單片機(jī)
時(shí)間:
2021-1-8 11:12
STC單片機(jī)串口發(fā)送 不需要while死等 串口接收執(zhí)行軟件復(fù)位
http://www.torrancerestoration.com/bbs/dpj-200927-1.html
我這個(gè)貼子就是串口,趕緊去瞧瞧
作者:
zyztoto
時(shí)間:
2021-1-12 13:45
隨便看了一眼,主函數(shù)定義的局部變量second未賦值,也沒用指針,second的值哪來?如果second是全局變量,不該在main里面定義。
作者:
明日香
時(shí)間:
2021-1-12 20:00
zyztoto 發(fā)表于 2021-1-12 13:45
隨便看了一眼,主函數(shù)定義的局部變量second未賦值,也沒用指針,second的值哪來?如果second是全局變量,不 ...
我用了ds1302模塊,second已經(jīng)設(shè)置成秒了,在另一個(gè)文件里,沒往這里放
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1