📄 pwm.c
字号:
/*****************************************/
/* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -