?? pwm.c
字號:
/*****************************************/
/* Copyright (c) 2005, 通信工程學(xué)院 */
/* All rights reserved. */
/* 作 者:戴 佳 */
/*****************************************/
#include "PWM.h"
/* 定時器0中斷服務(wù)子程序 */
void timer0_int() interrupt 1 using 1
{
TR0 = 0; // 關(guān)閉T0
TH0 = -(20000/256); // 重置20ms定時器的計數(shù)初值
TL0 = -(20000%256);
/* 用8254計數(shù)器發(fā)送第1路PWM信號 */
COMWORD = 0x30;
// 1MHz時鐘作為計數(shù)時鐘,計數(shù)1000次,實現(xiàn)1ms高電平
COUNT0 = 0xE8;
COUNT0 = 0x03;
/* 用8254計數(shù)器發(fā)送第2路PWM信號 */
COMWORD = 0x70;
// 1MHz時鐘作為計數(shù)時鐘,計數(shù)2000次,實現(xiàn)2ms高電平
COUNT0 = 0xD0;
COUNT0 = 0x07;
/* 用8254計數(shù)器發(fā)送第3路PWM信號 */
COMWORD = 0xB0;
// 1MHz時鐘作為計數(shù)時鐘,計數(shù)3000次,實現(xiàn)3ms高電平
COUNT0 = 0xB8;
COUNT0 = 0x0B;
TR0 = 1; // 啟動T0
}
/* 主程序 */
void main()
{
EA = 1; // 開CPU中斷
ET0 = 1; // 開定時器0中斷
TMOD = 0x01; // 定時器0方式1
TH0 = -(20000/256); // 20ms定時器的計數(shù)初值
TL0 = -(20000%256);
/* 向8254控制字寄存器選擇計數(shù)器0,并對其賦初值0 */
COMWORD = 0x30;
COUNT0 = 0; // 先賦低位字節(jié)
COUNT0 = 0; // 再賦高位字節(jié)
/* 向8254控制字寄存器選擇計數(shù)器1,并對其賦初值0 */
COMWORD = 0x70;
COUNT0 = 0; // 先賦低位字節(jié)
COUNT0 = 0; // 再賦高位字節(jié)
/* 向8254控制字寄存器選擇計數(shù)器2,并對其賦初值0 */
COMWORD = 0xB0;
COUNT0 = 0; // 再賦低位字節(jié)
COUNT0 = 0; // 再賦高位字節(jié)
TR0 = 1; // 啟動定時器T0
while(1){} // 無限循環(huán)
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -