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