永发信息网

编写一个程序,使得被控制口输出一个占空比为3:1的矩形波 用单片机Keil软件uVision2编程 速求!!!

答案:2  悬赏:20  手机版
解决时间 2021-02-12 16:50
  • 提问者网友:遮云壑
  • 2021-02-12 02:46
编写一个程序,使得被控制口输出一个占空比为3:1的矩形波 用单片机Keil软件uVision2编程 速求!!!
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-02-12 03:09
程序采用定时器T0定时,没有用软件延时。
;以下为汇编程序
org 0000h
jmp start
org 0030h

start:
mov tmod,#01h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
st:
mov r2,#0
lpr2: setb p1.0
call t1500ms
clr P1.0
call t1500ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmp st

t1500ms:
mov r7,#3
loop1: call t500ms
djnz r7,lpr7
ret

t500ms:
mov r7,#100
loop1: call t50ms
djnz r7,lpr7
ret

t50ms:
clr tf0
mov th0,#high(65536-50000)
mov tl0,#low(65536-50000)
setb tr0
jnb tf0,$
clr tf0
ret

jmp $
end

//以下为C语言编程
#include

sbit P10=P1^0;
void delay50ms();
void delay500ms();
void delay1500ms();

main()
{
while(1)
{
P10=1;
delay1500ms();
P10=0;
delay500ms();
}
}

void delay50ms()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(!TF0);
TF0=0;
}

void delay500ms()
{
unsigned char i=10;
while(i--)delay50ms();
}

void delay1500ms()
{
unsigned char i=3;
while(i--)delay500ms();
}
全部回答
  • 1楼网友:山有枢
  • 2021-02-12 04:18
用延时方法:
#include
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
******************************************************************************************/
void Delay1(uint t)
{
uchar a;
while(t-- != 0)
{
for(a = 0; a < 128; a++);
}
}

void main(void)
{
while(1)
{
LED=1;
Delay1(30);
LED=0;
Delay1(10);
}
}
//周期是2S,所以这两个延时加在一起你调为2S就是2S的周期了。占空比是3:1,所以高电平时段延时为1.5S,低电平延时为0.5S就行了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯