📄 ex7-5c.lst
字号:
C51 COMPILER V8.18 EX7_5C 11/27/2009 21:48:50 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE EX7_5C
OBJECT MODULE PLACED IN ex7-5c.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex7-5c.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "stc12c5a.h" //包含STC12C5A60S2寄存器定义文件
2
3 sbit LED_1s=P1^6;
4 unsigned char cnt; //中断计数变量
5
6 void main (void)
7 {
8 1 cnt=200; //设置COUNTER计数器初值
9 1 CMOD=0x80; //#10000000B 空闲模式下停止PCA计数器工作
10 1 //选择PCA时钟源为fOSC/12,禁止PCA计数器溢出时中断
11 1 CCON=0; //清0 PCA计数器溢出中断请求标志位CF
12 1 //CR = 0, 不允许 PCA 计数器计数;清0 PCA 各模块中断请求标志位CCFn
13 1 CL=0; //清0 PCA 计数器
14 1 CH=0;
15 1 CCAP0L=0; //给PCA模块0的CCAP0L置初值
16 1 CCAP0H=0x1e; //给PCA模块0的CCAP0H 置初值
17 1 CCAPM0=0x49; //设置PCA模块0为16位软件定时器
18 1 //ECCF0=1允许PCA模块0中断
19 1 //当[CH,CL]=[CCAP0H,CCAP0L]时,CCF0=1,产生中断请求
20 1 EA=1; //开整个单片机所有中断共享的总中断控制位
21 1 CR=1; //启动PCA计数器(CH,CL)计数
22 1 while(1); //等待中断
23 1 }
24 void PCA_ISR(void) interrupt 7 //PCA中断服务程序
25 {
26 1 union{ //定义一个联合,以进行16位加法
27 1 unsigned int num;
28 1 struct{ //在联合中定义一个结构
29 1 unsigned char Hi,Lo;
30 1 }Result;
31 1 }temp;
32 1 //每5ms中断一次
33 1 temp.num=(unsigned int)(CCAP0H<<8)+CCAP0L+0x1e00;
34 1 CCAP0L=temp.Result.Lo; //取计算结果的低8位
35 1 CCAP0H=temp.Result.Hi; //取计算结果的高8位
36 1 CCF0=0; //清 PCA 模块0 中断标志
37 1 cnt--; //修改中断计数
38 1 if(cnt==0)
39 1 {
40 2 cnt=200; //恢复中断计数初值
41 2 LED_1s =!LED_1s; //在P1.6输出脉冲宽度为1秒钟的方波
42 2 }
43 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 94 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -