?? ex1.lst
字號:
C51 COMPILER V7.06 EX1 03/04/2005 14:28:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE EX1
OBJECT MODULE PLACED IN ex1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "..\uc_os_II\includes.h"
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 sbit LED1=P1^3;
6 sbit LED2=P3^2;
7 sbit LED3=P2^4;
8 sbit LED4=P2^3;
9 sbit CLK=P1^4;
10 sbit DAT=P1^5;
11 uchar code seg[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19};
12 uchar disp[6];//顯示緩沖區
13 unsigned char count1;
14 struct {unsigned char h;
15 unsigned char m;
16 unsigned char s;
17 }run_time={0,0,0};
18
19 OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE];
20 OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE];
21 void SendTime(void) reentrant
22 {TI=0;
23 1 SBUF=run_time.h;
24 1 while(TI==0);
25 1 TI=0;
26 1 SBUF=run_time.m;
27 1 while(TI==0);
28 1 TI=0;
29 1 SBUF=run_time.s;
30 1 while(TI==0);
31 1
32 1 }
33 void delay(int t)//延時子程序
34 {int i,j;
35 1 for(i=0;i<t;i++)
36 1 for (j=0;j<100;j++);
37 1 }
38
39
40
41 void Moni_Send(uchar dsdata)
42 {uchar i,temp=0;
43 1
44 1 CLK=0;
45 1 for(i=0;i<=7;i++)
46 1 {
47 2 temp=dsdata&0x01;
48 2 dsdata=dsdata>>1;
49 2 if(temp==0)
50 2 DAT=0;
51 2 else
52 2 DAT=1; //置數據在端口上
53 2
54 2 CLK=1; //發出移位脈沖
55 2 CLK=0;
C51 COMPILER V7.06 EX1 03/04/2005 14:28:22 PAGE 2
56 2 }
57 1
58 1 }
59 void disp_num(uchar num)
60 {disp[0]=seg[num%10]; //ge wei
61 1 disp[1]=seg[num/10]; //shi wei
62 1 Moni_Send(disp[1]);
63 1 Moni_Send(disp[0]);
64 1
65 1 }
66
67 void Task1(void xdata * ppdata) reentrant
68 {
69 1 ppdata = ppdata;
70 1 while(1)
71 1 {
72 2 OSTimeDly(50);
73 2 count1++;
74 2 if(count1>5)
75 2 {count1=0;
76 3 LED4=~LED4;
77 3
78 3 }
79 2 if(run_time.s>=59)
80 2 {run_time.s=0;
81 3 if(run_time.m>=59)
82 3 {run_time.m=0;
83 4 if(run_time.h>=23)run_time.h=0;
84 4 else run_time.h++;
85 4 }
86 3 else
87 3 { run_time.m++;
88 4 }
89 3 }
90 2 else
91 2 { run_time.s++;
92 3 }
93 2
94 2 // LED3=~LED3;
95 2 disp_num(run_time.h);
96 2 disp_num(run_time.m);
97 2 disp_num(run_time.s);
98 2 printf("\nTASK1 IS ACTIVE");
99 2 }
100 1 }
101
102 void Task2(void xdata * ppdata) reentrant
103 {
104 1 ppdata = ppdata;
105 1 while(1)
106 1 {
107 2 OSTimeDly(50);
108 2 OS_ENTER_CRITICAL();
109 2 SendTime();
110 2 OS_EXIT_CRITICAL();
111 2 LED1=~LED1;
112 2 printf("\n TASK2 IS ACTIVE");
113 2 }
114 1 }
115 void SerialInitial()
116 {
117 1 /* set TI to 1, set TR1 to 1 */
C51 COMPILER V7.06 EX1 03/04/2005 14:28:22 PAGE 3
118 1 SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */
119 1 TMOD = 0x20;/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */
120 1 TH1 = 0xE6; /* TH1=E6 4800bit/s when at 24MHz,TH1=F3,9600bit/s,24MHz */
121 1 PCON = 0x80;
122 1 TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */
123 1 }
124 void InterruptInitial()
125 {
126 1 /* set timer. 50ms, THTL = 3caf when cpu at 12MHz */
127 1 TMOD |= 0x01;
128 1 TH0 = 0x70;
129 1 TL0 = 0x00;
130 1 /* TR0 is set in OSStart() */
131 1 ET0 = 1;
132 1 }
133 main()
134 {
135 1 SerialInitial();
136 1 InterruptInitial();
137 1 OSInit();
138 1 printf("\nstart");
139 1 OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2);
140 1 OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3);
141 1 OSStart();
142 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 378 ----
CONSTANT SIZE = 52 ----
XDATA SIZE = 496 ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -