當前位置:首頁 » 編程語言 » c語言實現每隔100ms采樣
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言實現每隔100ms采樣

發布時間: 2022-11-26 10:28:48

『壹』 怎麼實現一個變數的每100毫秒的變化曲線

從你的敘述中我理解為:100mS采樣、比較都不是問題,PLC很容易實現。問題出在和上位機的通訊中。因為通訊周期不可能設定為100mS。我試過自由口通訊,為了保證通訊的可靠性,通訊周期通常需要500mS以上。這樣的話,必須保存每個通訊周期之間的數據。建議你建立一個表格,將數據依次插入,完成通訊任務後重新插入數據。由於通訊中斷的優先順序是最高的,程序中的時序關系一定要理順。

『貳』 單片機定時器T0100ms定時中斷,怎麼用C語言實現

void Init_Timer0(void)
{
TMOD &= 0xF0; /* clear Timer 0 */
TMOD |= 0x1;
TL0 = 0x0; /* value set by user */
TH0 = 0x0; /* value set by user */
ET0 = 1; /* IE.1*/
TR0 = 1; /* TCON.4 start timer */
// PT0 = 1;
}

『叄』 單片機,C語言寫的一小段程序,高手幫看看

這是一個簡單的流水燈實驗,前面的void delay(uint)是一個函數申明,你這一段裡面沒有給delay函數,給的程序不夠清晰。
如果是延遲100ms的話,delay函數應該是這樣的:
void delay(unsigned int x)
{
unsigned int i,j;

for( i =0;i < x;i++ )
{
for( j =0;j<3;j++ );
}
}
給定delay(100)即延遲100ms。

『肆』 51單片機C語言程序,利用定時器1控制LED燈每隔100ms亮一個,並且數碼管上的數每隔200ms加1,加到100清零

#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,time;
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case0:P2=0x02;P0=distab[dat/10];
break;
case1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
voidt1isr()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
if(time%2)P1=_crol_(P1,1);
if(time%4)dat++;
dat%=100;
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time=0;
dat=0;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
P1=0xfe;
while(1);
}

『伍』 在一個由80C51單片機與一片ADC0809組成的數據採集系統中,ADC0809的地址為7FF8H~7FFFFH,

樓主給的條件不足。

簡單編寫如下:

MOV DPTR, #7FF7H
MOV R0, #30H
MOV R2, #8
LP1:
MOVX @DPTR, A
MOVX A, @DPTR
MOV @R0, A

INC DPTR
INC R0
DJNZ R2, LP1

MOV DPTR, #3000H
MOV R0, #30H
MOV R2, #8
LP2:
MOV A, @R0
MOVX @DPTR, A
INC DPTR
INC R0
DJNZ R2, LP2

SJMP $

END

『陸』 C語言,從0開始每隔一秒計數到100,用函數延遲執行,編碼怎麼寫

#include<stdio.h>
#include<windows.h>
int main(void)
{
int a;
for(a = 0; a <= 100; a++)
{
printf("%d\n",a);
sleep(1);
}
return 0;
}
有可能要把sleep裡面的1改成1000,跟你的環境有關,如果1是一閃而過你就換成1000

『柒』 C語言求編程教學

先貼代碼,有興趣的話可以看看下面的原理。

#include<reg52.h>

#defineCO_12_MHZ
/*
*Timing50milliseconds
*/
#defineTH_VALUE(0x3c)
#defineTL_VALUE(0xb0)

#if(definedCO_12_MHZ)
#defineTIME_3_SECOND(60)
#elif(definedCO_6_MHZ)
#defineTIME_3_SECOND(30)
#endif

sbitled=P0^0;
intflag=0;

voidtime_3_second(void)interrupt1{

TH0=TH_VALUE;/**/
TL0=TL_VALUE;/**/
if(++flag==TIME_3_SECOND){
led=~led;
flag=0;
}
}

intmain(void){

led=1;
TMOD=0x01;/*Selectionmode1*/
TH0=TH_VALUE;/*Settimeconstantforhigh8bit*/
TL0=TL_VALUE;/*Settimeconstantforlow8bit*/
TR0=1;/*StartupT0*/
ET0=1;/*EnableT0interrupt*/
EA=1;/*EnableCPUinterrupt*/

while(1);

return0;
}

根據公式 t = Tc * (2^L - TC), t為需要定時的時間,L是計數長度,根據選擇定時的模式而定,Tc為機器周期,所以Tc=12/Fosc, Fosc為晶振頻率,TC是需要求的值;那麼就有:

TC = 2^L - (Fosc * t)/12;

我的板子晶振為12Mhz,所以選擇模式1定時方式,最長定時時間為65.536ms,那麼一次定時顯然不夠,所以每次定時到了之後flag加1,直到flag等於60(s = 60 * 50ms)。如果晶振是6Mhz,也是一樣的方法計算,但是6Mhz的晶振在模式1下的最長定時時間為131.072ms。這里為了方便,如果晶振為6Mhz,那麼選擇定時100ms,這樣剛好TC都為0x3cb0。如果你的板子為6Mhz,那麼只需要把 #define CO_12_MHZ 改成 #define CO_6_MHZ 即可。有用請點一下採納,為了回答這個問題我又重新去翻以前的書來看。

『捌』 求單片機C語言程序,8個發光管來迴流動,第1個管亮100ms

走馬燈的程序到處是吧。給你貼一個杜洋的流水燈,自己參考著改。
/*********************************************************************************************
程序名: 8路流水燈
編寫人: 杜洋
編寫時間:2009年5月13日
硬體支持:STC12C2052內部RC或外部12MHZ晶振
介面說明:8個LED彩燈接P1口
修改日誌:
NO.1-2009年5月14日 在程序前面加入參數定義項
/*********************************************************************************************
說明:
根據參數設置產生流水LED效果。

/*********************************************************************************************/

#include <REG51.h> //51頭文件

/*********************************************************************************************/

#define DY_PORT P1 //設置LED連接的I/O組
#define DY_SPEED 100 //設置每一個明亮級的停留時間(值域:0~65535)

/*********************************************************************************************

bit [自定義名] ; //定義一個位(位的值只能是0或1)例:bit LED
#define [代替名] [原名] //用代替名代替原名(可以方便修改常改或調試的值)例:#define LED P1
sbit [自定義名] = [系統位名] ; //自定義系統位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定義名] ; //定義一個0~255的整數變數.例:unsigned char a;
unsigned int [自定義名] ; //定義一個0~65535的整數變數

/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延時程序
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);//STC單片機在外部晶振為12MHz時i值上限為600
} //AT89C51單片機在外部晶振為12MHz時i值上限為125
}
/*********************************************************************************************/
void main(void){
unsigned int i;
unsigned int temp;
while(1){
temp=0x01;
for(i=0;i<8;i++){ //8個流水燈逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++){ //8個流水燈反向逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++){ //8個流水燈依次全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++){ //8個流水燈依次反向全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
}
}
/*********************************************************************************************/

『玖』 簡單的51單片機問題

C語言程序如下

#include <reg51.h>

#define uchar unsigned char

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰段碼碼

uchar code disb[]={0xfe,0xfd,0xfb,0xf7};//位碼

uchar t0n;//T0定時中斷次數計數

void display(uchar x)//x顯示位

{

P2=disb[x];//輸出位碼

P0=tab[x+1];//輸出段碼

}

void main()

{

uchar x;

TMOD=0x01;

TH0 =0x3C;//晶振12M,定時100ms

TL0 =0xB0;

IE =0x82;

TR0 =1;

display(x);

while(1)

{

if(t0n>=2)//100ms到

{

t0n=0;

x++;

if(x>3)x=0;

display(x);

}

}

}

void T0_int() interrupt 1

{

TH0 =0x3C;

TL0 =0xB0;

t0n++;

}

模擬圖