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

周期为2S 由P1.0口输出 时钟频率为12MHZ

第1个回答  推荐于2017-12-16
程序采用定时器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 <AT89X51.H>

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();
}本回答被提问者采纳
第2个回答  2011-10-21
用延时方法:
#include <reg51.h>
#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++);
}
}
/******************************************************************************************
* 函数名称 :main
* 功能描述 :主函数
******************************************************************************************/
void main(void)
{
while(1)
{
LED=1;
Delay1(30);
LED=0;
Delay1(10);
}
}
//周期是2S,所以这两个延时加在一起你调为2S就是2S的周期了。占空比是3:1,所以高电平时段延时为1.5S,低电平延时为0.5S就行了。
相似回答