在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个回答  2019-10-05
你好!
以前回答过这样的问题:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/110ca42d0a1ee8e18b1399d4.html
打字不易,采纳哦!

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

...为12MHZ,试编程使P1.0和P1.1分别输出周期为20ms和400us的方波_百度...
可用汇编语言、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 ...

设单片机的fosc=12MHz,要求在P1.0脚上输出周期为2ms的.如下程序,怎么...
TH0=(65536-1000)\/256; \/\/装载计数初值 TL0=(65536-1000)%256;把上面两行的1000改为周期 的 微秒数的一半 例如 周期改为4ms=4000us, 4000\/2=2000, 那两处的1000改为 2000

相似回答