Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3868|回復: 0
打印 上一主題 下一主題

有關89s52 一個內部計時器控制2個輸出

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-6-4 23:12:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 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-低電位
}
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-29 17:25 , Processed in 0.199130 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表