编写一个程序,使得被控制口输出一个占空比为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();
}
;以下为汇编程序
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就行了。
#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就行了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯