Proteus如何输入方波脉冲,同时用keil怎么编译,能举个例子最好

Proteus如何输入方波脉冲,同时用keil怎么编译,能举个例子最好,第1张

使用单片机的定时器

例如:你输出1ms,占空比为50%的方波;

定时1ms,在定时中断子程序中,flag(P1^1)取反,就可以实现。

c程序如下:

#include<reg52h>

sibt flag=P1^1;

main()

{

TMOD=0X00;//定时器0工作方式定义

TH0=0X1C;//计数初TH0

TL0=0X18;//计数初值TL0

ET0=1;//开定时器0中断

EA=1;//开全局中断

TF0=0;//定时器0中断标志位清0

TR0=1;//定时器0开始计数

while(1);

}

void int0() interrupt 1 using 0//定时器0服务子程序

{

TH0=0X1C;//计数初TH0

TL0=0X18;//计数初值TL0

flag=~flag;

}

void main(void)

{uint temp1,temp2,counter;

initial();

for(;;) //产生周期为1000us的方波

{

TH1=0Xf0; // 重新装载计数初值

TL1=0X0c;

while(!TF1); //你是用查询的方式产生方波,但原程序的这个部分有问题

FB=!FB;

TF1=0;

if(loop1=1)

TR0=1; //开始计数

if(loop2=1) //停止计数

{TR0=0;

temp1=TL0;temp2=TH0;

couter=(temp2<<8)+temp1; //记录计数的次数

}

}

}

不知道500ums是什么单位,理解为500ms吧,占空比40%。这个不重要,理解错误自己改动一下就好了。

;假定晶振12M,机器周期1us

ORG 00H

AJMP GO

ORG 0BH

AJMP TIME0_1

ORG 30H

GO:

MOV SP,#60H

MOV TMOD,#01H

MOV TH0,#0B0H

MOV TL0,#3CH ;50MS

MOV R5,#5 ;中断间隔计次

MOV R6,#2 ;2中断为100MS

MOV R7,#0 ;取表序号数

LOOP:

MOV DPTR,#TAB

MOV A,R7

MOVC A,@A+DPTR

MOV P3,A

AJMP LOOP

TIME0_1:

PUSH ACC

DJNZ R6,RTT

MOV R6,#2 ;2次中断为100ms

INC R7 ;取表加1

DJNZ R5,RTT ;中断间隔次5次,2次为高电平,3次低电平,40%占空比

MOV R5,#5

MOV R7,#0

RTT:

POP ACC

RETI

TAB:

DB 80H,80H,00H,00H,00H

END

占空比为2:5周期为500ums的方波脉冲信号

----

题目写错了。

第一、500ums,不是时间单位。

第二、占空比为2:5,也不是方波。

第三、题目并没有给出晶振频率。

因此,凡是按照题目回答的答案,都是错误的。

以上就是关于Proteus如何输入方波脉冲,同时用keil怎么编译,能举个例子最好全部的内容,包括:Proteus如何输入方波脉冲,同时用keil怎么编译,能举个例子最好、51单片机:T1用作定时器在p1.0产生方波脉冲,输出到T0,T0用作计数器,记录该方波的下降沿个数,如下所述、AT80C51单片机,用汇编语言编写程序,在单片机的P3.7口产生一个占空比为2:5周期为500ums的方波脉冲信号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9708965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存