单片机C应用程序实例精讲.rar
源代码在线查看: pwm.lst
C51 COMPILER V7.02b PWM 12/10/2005 20:24:09 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN PWM.OBJ
COMPILER INVOKED BY: E:\EDATOOLS\KEILC7.0\C51\BIN\C51.EXE PWM.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************/
2 /* Copyright (c) 2005, 通信工程学院 */
3 /* All rights reserved. */
4 /* 作 者:戴 佳 */
5 /*****************************************/
6
7 #include "PWM.h"
8
9 /* 定时器0中断服务子程序 */
10 void timer0_int() interrupt 1 using 1
11 {
12 1 TR0 = 0; // 关闭T0
13 1
14 1 TH0 = -(20000/256); // 重置20ms定时器的计数初值
15 1 TL0 = -(20000%256);
16 1
17 1 /* 用8254计数器发送第1路PWM信号 */
18 1 COMWORD = 0x30;
19 1 // 1MHz时钟作为计数时钟,计数1000次,实现1ms高电平
20 1 COUNT0 = 0xE8;
21 1 COUNT0 = 0x03;
22 1
23 1 /* 用8254计数器发送第2路PWM信号 */
24 1 COMWORD = 0x70;
25 1 // 1MHz时钟作为计数时钟,计数2000次,实现2ms高电平
26 1 COUNT0 = 0xD0;
27 1 COUNT0 = 0x07;
28 1
29 1 /* 用8254计数器发送第3路PWM信号 */
30 1 COMWORD = 0xB0;
31 1 // 1MHz时钟作为计数时钟,计数3000次,实现3ms高电平
32 1 COUNT0 = 0xB8;
33 1 COUNT0 = 0x0B;
34 1
35 1 TR0 = 1; // 启动T0
36 1 }
37
38
39 /* 主程序 */
40 void main()
41 {
42 1 EA = 1; // 开CPU中断
43 1 ET0 = 1; // 开定时器0中断
44 1 TMOD = 0x01; // 定时器0方式1
45 1 TH0 = -(20000/256); // 20ms定时器的计数初值
46 1 TL0 = -(20000%256);
47 1
48 1 /* 向8254控制字寄存器选择计数器0,并对其赋初值0 */
49 1 COMWORD = 0x30;
50 1 COUNT0 = 0; // 先赋低位字节
51 1 COUNT0 = 0; // 再赋高位字节
52 1
53 1 /* 向8254控制字寄存器选择计数器1,并对其赋初值0 */
54 1 COMWORD = 0x70;
55 1 COUNT0 = 0; // 先赋低位字节
C51 COMPILER V7.02b PWM 12/10/2005 20:24:09 PAGE 2
56 1 COUNT0 = 0; // 再赋高位字节
57 1
58 1 /* 向8254控制字寄存器选择计数器2,并对其赋初值0 */
59 1 COMWORD = 0xB0;
60 1 COUNT0 = 0; // 再赋低位字节
61 1 COUNT0 = 0; // 再赋高位字节
62 1
63 1 TR0 = 1; // 启动定时器T0
64 1
65 1 while(1){} // 无限循环
66 1
67 1 }
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 121 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)