在8051单片机的时钟频率为12MHz,用T0定时,试编程使P1.0和P1.1分别输出周期为2ms和500ms的方波

如题所述

有很多方法的,第一种是用模拟PWM,设置好占空比为1/2,根据周期设定好频率就可以了,你这个不需要变动的话,不用PWM也可以,可以这样写:
#define T0_delay 1000
sbit P10=P1^0;
sbit P11=P1^1;
unsigned int Pwm_Count=0;
void Timer0_init();
void main()
{
Timer0_init();
while(1);//空循环
}
void Timer0_init()
{
TMOD |=0x01; //采用16位定时器
TH0 = (65536-T0_delay)/256; //定时器装初值1000
TL0 = (65536-T0_delay)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0 = (65536-T0_delay)/256; //装初值1000,1ms中断一次
TL0 = (65536-T0_delay)%256;
P10=~P10;//取反,1ms后电平变换,输出周期为2ms的方波
Pwm_Count++;//计数
if(Pwm_Count==250)
{
Pwm_Count=0;//归零,下次重新从零开始累加计数
P11=~P11;//取反,250ms电平转换一次,输出方波
}
}
要采用模拟PWM函数的话,可以这样写:
定时器装1ms的初值(同上)
#define LED_ON 1
#define LED_OFF 0
主要代码如下:
P10=~P10;
//---------------------------------------------------------------------
Pwm_Count_500 ++;
if(Pwm_Count>500)
{
Pwm_Count_500 =0;
}
(Pwm_Count _500< 250)?(P11= LED_ON):(P11= LED_OFF);//问号语句来代替if语句,更为 简洁一点,实效上测试两者耗时相同,多路时耗时比if更短,代码占有空间在多路PWM时问号语句明显可以占更少空间。这些方面也许是标准C库函数在实现比较两个数大小时采用问号语句的原因之一。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-14
以前回答过这样的问题:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/110ca42d0a1ee8e18b1399d4.html本回答被网友采纳
第2个回答  2010-12-14
void <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar q;
sbit a=P0^0;
sbit b=P0^1;
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
b=1;
for(q=24;q>0;q--)
{
a=1;
delay(2);
a=0;
delay(2);
}
b=0;
for(q=24;q>0;q--)
{
a=1;
delay(2);
a=0;
delay(2);
}

}
}

在8051单片机的时钟频率为12MHz,用T0定时,试编程使P1.0和P1.1分别输出...
(Pwm_Count _500< 250)?(P11= LED_ON):(P11= LED_OFF);\/\/问号语句来代替if语句,更为 简洁一点,实效上测试两者耗时相同,多路时耗时比if更短,代码占有空间在多路PWM时问号语句明显可以占更少空间。这些方面也许是标准C库函数在实现比较两个数大小时采用问号语句的原因之一。

...用T0在单片机的P1.0和P1.1脚分别输出周期为2MS和6MS的方波,用汇编...
T0INT:MOV TH0,#0FCH MOV TL0,#18H CPLP1.0 DJNZR0,RTI MOVR0,#3 CPLP1.1 RTI:RETI END

8051单片机的晶振频率为12MHz,试用定时器中断方式编程实现从P1.0引脚...
SJMP T0ISR:DJNZ R2,T0E MOV R2,#4 CPL P1.0 T0E:RETI END

...请编程使P1.0和P1.1分别输出周期为2ms和500us的方波
MOV TL0, #6 ;定时250us@12MHz SETB TR0 ;启动T0 MOV IE, #82H ;允许T0中断.SJMP $ ;等待中断.;--- T0_INT: ;250us执行一次.CPL P1.1 ;输出周期为500us的方波.INC B MOV C, B.2 MOV P1.0, C ;输出周期为2000us的方波.RETI ;--- END 上述程序,经过...

...单片机的时钟频率为12MHz,利用定时器T1和P1.0输出矩形脉冲,其波形图...
MOV TL1, #206 ;定时时间50us@12MHz MOV IE, #10001000B ;开放总中断和T1中断.SETB TR1 ;启动T1 MOV R2, #3 ;周期是3×50us SJMP $ ;等着吧.T1_INT:SETB P1.0 ;输出高.DJNZ R2, T1_END ;R2-1 CLR P1.0 ;减到0,就输出低电平.MOV ...

fosc=6mhz,周期2ms
已知89C51单片机的fosc=12MHz,用T1定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。解:采用模式0作定时初值:所以MOVR2,#04H;R2为“250μs”计数器,置入初值4CLRP1... 已知89C51单片机的fosc=12MHz,用T1定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。解:采用模式0作 定时...

...用定时器在p1.0管脚上产生一周期为2ms的方波,时钟频率为12MHz...
1、定时器工作方式0,1,2,3的TMOD=0x00,0x11,0x22,0x33 2、#include <reg51.h> sbit out=P1^0; \/\/定义方波输出脚 void main( void) \/\/主函数 { out=0; \/\/ P1.0输出为0 TMOD=0x01; \/\/工作方式1,16位计数 TH0=0x03; \/\/给定时器初值,周期为2ms,则半个...

...频率为6MHz,请编程使P1.0和P1.1分别输出周期为2S和0.5S的方波_百度...
ET0 SETB EA MOV R2, #5 MOV A, #0 CLR P1.0 CLR P1.1 SJMP T0_INT:MOV TH0, #9EH MOV TL0, #58H ;50ms@6MHz DJNZ R2, T0_END MOV R2, #5 INC A MOV C, ACC.0 MOV P1.1, C MOV C, ACC.2 MOV P1.0, C T0_END:RETI END ...

...周期为2ms的方波,设系统时钟为12mhz,请用定时器T0的方式..._百度知...
我看这好像是51单片机外部晶振12M!需要12分频的吧,如果是,下面的代码 include <reg51.h> sbit PWM=P1^0;void Init0(void){ TMOD = 0x01;TH0 = 0xfc;TL0 = 0x17;EA = 1;ET0 = 1;TR0 = 1;} void INT0()interrupt 1 using 1 {EA=0;PWM=~PWM;TH0 = 0xfc;TL0 = 0x17;...

设MCS-51单片机的晶振频率为12MHZ,使用定时器1工作方式1中断方式在P1...
;ORG 0000H SJMP START ORG 0001BH MOV TH1, #(65536 - 50000) \/ 256 MOV TL1, #LOW(65536 - 50000)CPL P1.0 RETI START:MOV TMOD, #10H MOV TH1, #(65536 - 50000) \/ 256 MOV TL1, #LOW(65536 - 50000)SETB TR1 MOV IE, #88H SJMP END ...

相似回答