在8051中,已知晶振频率为12MHz,试编程使P1.0和P1.1分别输出周期为2ms和500ms的方波

如题所述

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uint Time_Num_2ms,Time_Num_500ms;

sbit PWM1=P1^0;// 位定义2ms方波输出的端口
sbit PWM2=P1^1;// 位定义500ms方波输出的端口

void InitTimer0(void)
{
TMOD=0x01;//设定定时器0为工作方式1
TH0=(65536-1000)/256;//装初值,1ms初值
TH0=(65536-1000)%256;//装初值,1ms初值
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1; //启动定时器0
}

void T0Timer() interrupt 1
{
TH0=(65536-1000)/256;//重装初值,1ms初值
TH0=(65536-1000)%256;//重装初值,1ms初值
Time_Num_2ms++;
Time_Num_500ms++;
}

void main(void)
{
P1=0xff;
InitTimer0();
while(1)
{
if(Time_Num_2ms==2)
{
Time_Num_2ms=0;
PWM1=~PWM1;
}
if(Time_Num_500ms==500)
{
Time_Num_500ms=0;
PWM2=~PWM2;
}
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

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

...频率为12MHZ,试编程使P1.0和P1.1分别输出周期为20ms和400us的方波...
可用汇编语言、C语言编程。

...请编程使P1.0和P1.1分别输出周期为2ms和500us的方波
T0_INT: ;250us执行一次.CPL P1.1 ;输出周期为500us的方波.INC B MOV C, B.2 MOV P1.0, C ;输出周期为2000us的方波.RETI ;--- END 上述程序,经过了PROTEUS的验证。

fosc=6mhz,周期2ms
试编程由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作 定时初值:所以MOV R2,#04H;R2为“250μs”...

8051单片机的晶振频率为12MHz,试用定时器中断方式编程实现从P1.0引脚...
ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#02 MOV TH0,#6 MOV TL0,#6 SETB TR0 SETB ET0 SETB EA MOV R2,#4 SJMP T0ISR:DJNZ R2,T0E MOV R2,#4 CPL P1.0 T0E:RETI END

...晶振频率12MHz,求在P1.0上输出周期为200ms、占空比为1:1的方波...
include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar cnt;uint num;sbit pluse=P1^0;void t0isr() interrupt 1{TH0=(65536-50000)\/256;TL0=(65536-50000)%256;cnt++;cnt%=2;if(cnt==0) { num++; pluse=~pluse; if(num>=1000)TR0=0; }}mai...

...在单片机的P1.0和P1.1脚分别输出周期为2MS和6MS的方波,用汇编_百度...
ORG00H AJMPMAIN ORG0BH AJMPT0INT ORG30H MAIN:MOVR0,#3 ACALLINIT_INT0 AJMP INIT_INT0:MOV TMOD,#01H MOV TH0,#0FCH MOV TL0,#18H SETB EA SETB ET0 SETB TR0 RET T0INT:MOV TH0,#0FCH MOV TL0,#18H CPLP1.0 DJNZR0,RTI MOVR0,#3 CPLP1.1 RTI:RETI END ...

...频率为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 ...

...频率选择为2MHz,编程使P1.0和P1.1分别输出周期为1ms和500us的方波...
CKCON = 0x20; \/\/定时器2时钟源为系统时钟 P1MDOUT = 0x03;XBR2 = 0x40; \/\/P1.0P1.1推挽。其他不动 OSCXCN = 0x65;for (i = 0; i < 3000; i++); \/\/ Wait 1ms for initialization while ((OSCXCN & 0x80) == 0);OSCICN = 0x08; \/\/启动外部晶振,内部...

设MCS51单片机的晶振频率12MHz,请编程使得P1.0端输出频率为20kHz的方波...
20KHz,周期T=50us,半周期 t=25us;标准51单片机,12MHz晶振,机械周期为 1us,足以满足25us需求。使用定时器定时 25us,每次中断取反输出(P1.0)。小贴士:25us时间短,可以采用定时器的 8位自重装模式,程序就不需要在中断中继续赋初值了。

相似回答