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