Labview控制8051輸出PWM

跟Labview控制PLC輸出PWM那篇是姐妹篇

分別做了2個實驗,也證明了PLC的確很方便(但是單價就不能比較了)

8051端程式

#include <regx51.h>

void timer0_initialize(void); //初始化計時器0中斷功能

void initial_uart(void); //初始化UART中斷功能

unsigned int sp=1843; //1個全波dutytime = 100Hz = 9216個機械週期;Ton

unsigned int sn=7373; //Toff低電位比=80%=9216*0.8=7373個機械週期;Toff

//程式到此P1_0腳的波形圖

unsigned int temp; //計時器產生中斷用變數

void initial_uart(void) //初始化UART中斷功能

{

EA=0;

IE|=0x90;

SCON=0x50;

TMOD|=0x20;

TH1=0x0FD;

TR1=1;

}

void Es_int(void) interrupt 4 //UART產生中斷的副程式,在此例中只要PC端Labview傳送資料進來,就會執行以下程式

{

unsigned char a;

if(RI==1)

{

a=SBUF;

sp=a*92;

sn=9216-sp;

RI=0;

return;

}

}

void timer0_initialize(void)

{

EA=0;

IE|=0x82;

TMOD|=0x01;

temp=65536-sp;

TH0=temp/256;

TL0=temp%256;

TR0=1;

P1_0=1;

}

void timer0_isr(void) interrupt TF0_VECTOR using 1

{

if(P1_0==1)

{

TR0=0;

temp=65536-sn;

TH0=temp/256;

TL0=temp%256;

TR0=1;

P1_0=0;

}

else

{

TR0=0;

temp=65536-sp;

TH0=temp/256;

TL0=temp%256;

TR0=1;

P1_0=1;

}

}

main()

{

initial_uart();

timer0_initialize();

while(1);

}

Labview端程式

點圖可以放大

偵測到旋鈕有被轉動過就傳送資料給8051輸出

執行的影片

LED閃動太快了看不太到閃爍,失敗!XD