pwm.c

来自「51.rar」· C语言 代码 · 共 85 行

C
85
字号
/*****************************************/
/* Copyright (c) 2005, 通信工程学院      */
/* All rights reserved.                  */
/* 作    者:戴 佳		        		 */
/*****************************************/

#include "PWM.h"

/* 定时器0中断服务子程序 */
void timer0_int() interrupt 1 using 1
{
	TR0 = 0;						// 关闭T0

  	TH0 = -(20000/256);				// 重置20ms定时器的计数初值
  	TL0 = -(20000%256); 

	/* 用8254计数器发送第1路PWM信号 */
	COMWORD = 0x30;
	// 1MHz时钟作为计数时钟,计数1000次,实现1ms高电平
	COUNT0 = 0xE8; 
	COUNT0 = 0x03;

	/* 用8254计数器发送第2路PWM信号 */
	COMWORD = 0x70;
	// 1MHz时钟作为计数时钟,计数2000次,实现2ms高电平
	COUNT0 = 0xD0;
	COUNT0 = 0x07;

	/* 用8254计数器发送第3路PWM信号 */
	COMWORD = 0xB0;
	// 1MHz时钟作为计数时钟,计数3000次,实现3ms高电平
	COUNT0 = 0xB8;
	COUNT0 = 0x0B;

  	TR0 = 1;  						// 启动T0
}


/* 主程序 */
void main()
{ 
	EA = 1;							// 开CPU中断
	ET0 = 1;						// 开定时器0中断
	TMOD = 0x01;					// 定时器0方式1
	TH0 = -(20000/256);				// 20ms定时器的计数初值
  	TL0 = -(20000%256); 

	/* 向8254控制字寄存器选择计数器0,并对其赋初值0 */
	COMWORD = 0x30;
	COUNT0 = 0;						// 先赋低位字节
	COUNT0 = 0;						// 再赋高位字节

	/* 向8254控制字寄存器选择计数器1,并对其赋初值0 */
	COMWORD = 0x70;
	COUNT0 = 0;						// 先赋低位字节
	COUNT0 = 0;						// 再赋高位字节

	/* 向8254控制字寄存器选择计数器2,并对其赋初值0 */
	COMWORD = 0xB0;
	COUNT0 = 0;						// 再赋低位字节
	COUNT0 = 0;						// 再赋高位字节

	TR0 = 1;						// 启动定时器T0

	while(1){}						// 无限循环
  	
}		


	
  	
	

	










⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?