Robofun 機器人論壇

標題: 有關89s52 一個內部計時器控制2個輸出 [打印本頁]

作者: monozx196    時間: 2014-6-4 23:12
標題: 有關89s52 一個內部計時器控制2個輸出
本帖最後由 monozx196 於 2014-6-8 21:47 編輯

我是想讓P2_1和P2_3都有PWM的效果
但是要如何單獨分開來
這是目前的程式碼  



#include <regx51.h>
void timer0_initialize(void);
//void initial_uart(void);
unsigned int sp=1843; //100Hz===>9216,高電位佔20%=9216*0.2=1843個機械週期
unsigned int sn=7373; //低電位佔80%=9216*0.8=7373個機械週期
unsigned int temp;  //供計時器運算變數
void delay(unsigned char b) //延遲副程式
{
unsigned char i,j;
for(i=0;i<b;i++)
  for(j=0;j<255;j++);
}
void timer0_initialize(void)  //初始化計時器0
{
EA=0;
IE|=0x82;
TMOD|=0x01;
temp=65536-sp;
TH0=temp/256;
TL0=temp%256;
TR0=1;
P2_1=1;
}
void timer0_isr(void) interrupt TF0_VECTOR using 1 // 用計時器0產生PWM波
{
if(P2_1==1)
{
  TR0=0;
  temp=65536-sn;
  TH0=temp/256;
  TL0=temp%256;
  TR0=1;
  P2_1=0;
}
else
{
  TR0=0;
  temp=65536-sp;
  TH0=temp/256;
  TL0=temp%256;
  TR0=1;
  P2_1=1;
}
}
main()
{
timer0_initialize();
P2_1=0;
while(1) //主程式無限迴圈偵測P2_0~P2_5按鈕改變PWM佔空比
{
  delay(10);
  if(P1_0==0)sn=9206; //低電位佔100%,燈全暗                 電壓=0.4V
  if(P1_1==0)sn=7373; //低電位佔 80%,高電位佔20%=燈20%亮   電壓=1.1V
  if(P1_2==0)sn=5530; //低電位佔 60%,高電位佔40%=燈40%亮   電壓=1.8V
  if(P1_3==0)sn=3686; //低電位佔 40%,高電位佔60%=燈60%亮   電壓=2.5V
  if(P1_4==0)sn=1843; //低電位佔 20%,高電位佔80%=燈80%亮   電壓=3.2V
  if(P1_5==0)sn=10;    //高電位佔100%,燈全亮      電壓=3.8V
  sp=9216-sn; //高電位=9216-低電位
}
}




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2