📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 03/02/2009 08:07:58 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Output-files\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main\main.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\List-files\main.lst) OB
-JECT(.\Output-files\main.obj)
line level source
1 #include "..\ucos-ii\includes.h"
2
3
4 static INT16U count_t2=2000; //定时2的1000次 就是1秒/亮
5 static INT16U count_prit=20; //在任务6中用着调试print用的参数。
6
7 sbit LED_GRE=P2^0;
8 sbit LED_RED=P2^1;
9
10 //start/alarm /sec /min /hour /day /week /month /year
11 INT8U code Clock_buf[9]={0x01, 0x00, 0x10,0x40,0x08, 0x1B, 0x05, 0x02, 0x09};
12
13 void TaskStart(void* ppdata) reentrant;
14 void Task_GRE(void* ppdata) reentrant;
15 void Task_RED(void* ppdata) reentrant;
16
17 OS_STK TaskStkStart[MaxStkSize]; //MaxStkSize=100
18 OS_STK TaskStk_GRE[MaxStkSize];
19 OS_STK TaskStk_RED[MaxStkSize];
20
21 void TMR2_ISR(void) reentrant;
22
23
24 /*******************结构体定义************************/
25 struct real_time
26 {
27 INT8U year;
28 INT8U month;
29 INT8U day;
30 INT8U hour;
31 INT8U min;
32 INT8U sec;
33
34 }R_time;
35
36 void main(void)
37 {
38 1
39 1 config(); //要关看门狗
40 1 OSInit();
41 1
42 1 OSTaskCreate(TaskStart, (void *)0, TaskStkStart,5);
43 1 EA=1;
44 1
45 1 OSStart();
46 1 }
47
48 void TaskStart(void* ppdata) reentrant
49 {
50 1 // INT8U k;
51 1 char SFRPAGE_SAVE;
52 1 SFRPAGE_SAVE = SFRPAGE;
53 1
54 1
C51 COMPILER V8.08 MAIN 03/02/2009 08:07:58 PAGE 2
55 1 ppdata=ppdata;
56 1
57 1
58 1 InitTimer0();
59 1 ET0=1;
60 1
61 1 I2cInit();
62 1 // PCF8563_init();
63 1
64 1
65 1
66 1 OSTaskCreate(Task_GRE, (void *)0,TaskStk_GRE,6);
67 1 // OSTaskCreate(Task_RED, (void *)0, TaskStk_RED,7);
68 1 for(;;)
69 1 {
70 2
71 2 LED_RED=~LED_RED;
72 2 /* PCF8563_Read();
73 2
74 2 SFRPAGE = UART0_PAGE;
75 2
76 2 printf("******YEAR: 20%d\n",R_time.year);
77 2 printf("******MONTH: %d\n",R_time.month);
78 2 printf("******DAY: %d\n",R_time.day);
79 2 printf("******MINITUE: %d\n",R_time.min);
80 2 printf("******SECOND: %d\n",R_time.sec);
81 2
82 2
83 2 SFRPAGE =SFRPAGE_SAVE;
84 2 */
85 2 OSTimeDly(OS_TICKS_PER_SEC);
86 2 }
87 1 }
88
89 void Task_GRE(void* ppdata) reentrant
90 {
91 1 char SFRPAGE_SAVE;
92 1 SFRPAGE_SAVE = SFRPAGE;
93 1
94 1 ppdata=ppdata;
95 1
96 1 for(;;)
97 1 {
98 2 //LED_GRE=~LED_GRE;
99 2 SFRPAGE = UART1_PAGE;
100 2 count_prit--;
101 2 printf("******number of task_entering: %d\n",count_prit);
102 2 if(count_prit==10)
103 2 {
104 3 count_prit=20;
105 3 }
106 2
107 2
108 2 SFRPAGE =SFRPAGE_SAVE ;
109 2 OSTimeDly(OS_TICKS_PER_SEC);
110 2 }
111 1
112 1
113 1 }
114
115 void Task_RED(void* ppdata) reentrant
116 {
C51 COMPILER V8.08 MAIN 03/02/2009 08:07:58 PAGE 3
117 1 ppdata=ppdata;
118 1 for(;;)
119 1 {
120 2 //LED_RED=~LED_RED;
121 2 OSTimeDly(12);
122 2 }
123 1 }
124
125 void TMR2_ISR(void) reentrant
126 {
127 1 char SFRPAGE_SAVE;
128 1
129 1 SFRPAGE_SAVE = SFRPAGE; // Preserve SFRPAGE
130 1 SFRPAGE = TMR2_PAGE;
131 1 count_t2--;
132 1 if(count_t2==0)
133 1 {
134 2 count_t2=2000;
135 2 LED_GRE=~LED_GRE;
136 2 }
137 1
138 1 TF2=0;
139 1 SFRPAGE =SFRPAGE_SAVE ;
140 1
141 1
142 1 }
143
144
145 /****************************************************************************
146 * 功 能:读取PCF8563时钟芯片内寄存器数据
147 *---------------------------------------------------------------------------*
148 * 入口参数:nil
149 * 出口参数:nil
150 ****************************************************************************/
151
152 void PCF8563_Read(void) reentrant
153 {
154 1
155 1 R_time.year=I2C_ReadData(0x08,0xff); //读取year,屏蔽高7~5位(7~5无效)
156 1
157 1 R_time.month=I2C_ReadData(0x07,0x1f); //读取month,屏蔽高7~5位(7~5无效)
158 1
159 1 R_time.day=I2C_ReadData(0x05,0x3f); //读取day,屏蔽高7-6位(7-6无效)
160 1
161 1 R_time.hour=I2C_ReadData(0x04,0x3f); //读取小时,屏蔽高7-6位(7-6无效)
162 1
163 1 R_time.min=I2C_ReadData(0x03,0x7f); //读取分钟,屏蔽高7位(7无效)
164 1
165 1 R_time.sec=I2C_ReadData(0x02,0x7f); //读取秒,屏蔽高7位(7无效)
166 1
167 1 }
168
169 INT8U I2C_ReadData(INT8U reg,INT8U mark) reentrant
170 {
171 1 INT8U cur_tmr;
172 1
173 1 cur_tmr=SM_Receive(PCF_R_ADD, reg,SINGLE_ADD) &mark;
174 1 cur_tmr=Bcd2Decimal(cur_tmr);//转换为十进制
175 1
176 1 return cur_tmr;
177 1
178 1 }
C51 COMPILER V8.08 MAIN 03/02/2009 08:07:58 PAGE 4
179
180 INT8U Bcd2Decimal(INT8U bcd_dat) reentrant
181 {
182 1 INT8U num1,num2;
183 1
184 1 num1=bcd_dat/16;
185 1 num2=bcd_dat%16;
186 1
187 1 return (num1*10+num2);
188 1 }
189
190 void PCF8563_init(void) reentrant
191 {
192 1 INT8U i=0;
193 1
194 1 i=SM_Receive(PCF_R_ADD, 0x00,SINGLE_ADD);
195 1
196 1 if(i!=0x01) //没有初始化
197 1 {
198 2 //start/alarm /sec /min /hour /day /week /month /year
199 2
200 2 for(i=0;i<9;i++)
201 2 {
202 3 SM_Send(PCF_W_ADD, i,SINGLE_ADD, Clock_buf[i]); //启动时钟
203 3 OSTimeDly(3);//delay 30ms
204 3 }
205 2 //设置报警及定时器中断,定时器中断为脉冲形
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -