在51单片机上输出一个周期是20ms,占空比为75%的矩形波

			ORG 0000H
			LJMP START
			ORG 0100H
	START:	MOV TMOD,#01H		;T0工作在方式1
	LOOP:	MOV TL0,#68H		;定时15ms。
			MOV TH0,#0C5H
			SETB TR0			;定时器TO工作			
	WAIT:	JNB TF0,WAIT		;等待定时结束
			CLR TF0            ;记住清零标志位,我们没有使用中断服务子程序,所以也别指望它自动清零TF0
			CLR TR0				;关闭T0
			CPL P1.0			;输出低电平
			MOV TL0,#78H		;定时5ms
			MOV TH0,#0ECH	
			SETB TR0
	WAIT1:	JNB TF0,WAIT1
			CLR TF0
			CLR TR0
			SETB P1.0
			SJMP LOOP
			END

程序使用了定时器T0,工作在模式1下。当然程序输出的波形并不是非常精准的,因为定时器开始工作之前还需要执行一些指令。不过在要求不是非常非常严格的情况下,这个程序是可行的。

仿真图如下:

从图中可以看到,示波器显示的结果符合要求。

您好,要在Keil5基于STM32输出占空比75%的方波,可以按照以下步骤进行操作: 1. 打开Keil5,创建一个新项目,选择相应的STM32芯片型号。 2. 在项目文件中新建一个.c文件,命名为main.c。 3. 在main.c中添加下列代码: ``` #include "stm32f10x.h" void delay(uint32_t nCount) { for(; nCount != 0; nCount--); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 49151; // 占空比75% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_Cmd(TIM3, ENABLE); while(1) { delay(0xFFFFF); } } ``` 4. 进入工程选项卡,选择“C/C++”选项,在“Preprocessor Symbols”一栏中添加“STM32F10X_HD”。 5. 编译并下载程序到STM32芯片上。 6. 打开Proteus,选择相应的STM32芯片型号,将其引脚与Keil中的程序中设置的引脚连接。 7. 在Proteus中添加一个形发生器和示器,将形发生器的输出连接到STM32的引脚上,示器连接到另一端。 8. 设置形发生器的输出方波,频率为适当的值。 9. 运行仿真,在示器中可以观察到占空比75%的方波信号。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值