1 /**************************************************************
2 设计一个时钟程序 使用RTX51 Tiny 系统
3 串口发送显示时间
4 ***************************************************************/
5
6 #include<rtx51tny.h>//记得一定要包括这个头文件
7 #include<sst89x5xxrd2.h>
8
9 #define INIT_0 0 /* 任务号0 INIT_0 */
10 #define chuli_1 1
11 #define UARTSEND_2 2 /* 任务号2 UARTSEND_2 */
12
13 #define u8 unsigned char
14 #define u16 unsigned int
15
16 u8 Time[]={'0','0',':','0','0',':','0','0',' '};//时间格式 00:00:00
17
18 void UARTInt()//串口初始化
19 {
20
21 SCON="0x40"; /* 串口模式1 8位数据 波特率可变*/
22 TMOD="0x21";
23 PCON="0x00";
24 TH1=0xFA; /*定时器1 工作方式2 自动装载 波特率 9600*/
25 TL1=0xFA;
26 ET1=0;
27 TR1=1;
28 }
29
30 void init (void)_task_ INIT_0 //任务0 初始化系统
31 {
32 UARTInt();
33 BB="0";
34 // Timer1_int();
35 os_create_task(chuli_1);//创建任务1
36 os_create_task(UARTSEND_2);//创建任务2
37 os_delete_task(INIT_0);//删除不再执行的任务0
38 }
39
40 void dis (void)_task_ chuli_1//任务1
41 {
42 while(1)
43 {
44 Time[7]=Time[7]++;
45
46 if(Time[7]==0x3A) //秒个位
47 {
48 Time[7]=0x30;
49 Time[6]++; //进位
50 }
51
52 if(Time[6]==0x36) //秒十位
53 {
54 Time[6]=0x30;
55 Time[4]++;
56 }
57
58 if(Time[4]==0x3A) //分个位
59 {
60 Time[4]=0x30;
61 Time[3]++;
62 }
63
64 if(Time[3]==0x36) //分十位
65 {
66 Time[3]=0x30;
67 Time[1]++;
68 }
69
70 if(Time[0]=='2')
71 {
72 if(Time[1]=='4')
73 {
74 Time[1]='0';
75 Time[0]='0';
76 }
77 }
78 if(Time[1]==0x3A) //小时个位
79 {
80 Time[1]=0x30;
81 Time[0]++;
82 }
83
84 if(Time[0]==0x33) //小时十位
85 {
86 Time[0]=0x30;
87 }
88 os_wait(K_IVL,200,0); //等待1s
89 os_send_signal(UARTSEND_2);//发送信号给任务2
90 }
91 }
92
93 void send (void)_task_ UARTSEND_2 //任务2
94 {
95 u8 i;
96 while(1)
97 {
98 os_wait(K_SIG,0,0);//接收信号 才开始执行任务2
99 for(i=0;i<9;i++) //发送时间
100 {
101 SBUF="Time"[i];
102 while(!TI); //等待发送完毕
103 TI="0";
104 }
105 }
106 }
107
108
2 设计一个时钟程序 使用RTX51 Tiny 系统
3 串口发送显示时间
4 ***************************************************************/
5
6 #include<rtx51tny.h>//记得一定要包括这个头文件
7 #include<sst89x5xxrd2.h>
8
9 #define INIT_0 0 /* 任务号0 INIT_0 */
10 #define chuli_1 1
11 #define UARTSEND_2 2 /* 任务号2 UARTSEND_2 */
12
13 #define u8 unsigned char
14 #define u16 unsigned int
15
16 u8 Time[]={'0','0',':','0','0',':','0','0',' '};//时间格式 00:00:00
17
18 void UARTInt()//串口初始化
19 {
20
21 SCON="0x40"; /* 串口模式1 8位数据 波特率可变*/
22 TMOD="0x21";
23 PCON="0x00";
24 TH1=0xFA; /*定时器1 工作方式2 自动装载 波特率 9600*/
25 TL1=0xFA;
26 ET1=0;
27 TR1=1;
28 }
29
30 void init (void)_task_ INIT_0 //任务0 初始化系统
31 {
32 UARTInt();
33 BB="0";
34 // Timer1_int();
35 os_create_task(chuli_1);//创建任务1
36 os_create_task(UARTSEND_2);//创建任务2
37 os_delete_task(INIT_0);//删除不再执行的任务0
38 }
39
40 void dis (void)_task_ chuli_1//任务1
41 {
42 while(1)
43 {
44 Time[7]=Time[7]++;
45
46 if(Time[7]==0x3A) //秒个位
47 {
48 Time[7]=0x30;
49 Time[6]++; //进位
50 }
51
52 if(Time[6]==0x36) //秒十位
53 {
54 Time[6]=0x30;
55 Time[4]++;
56 }
57
58 if(Time[4]==0x3A) //分个位
59 {
60 Time[4]=0x30;
61 Time[3]++;
62 }
63
64 if(Time[3]==0x36) //分十位
65 {
66 Time[3]=0x30;
67 Time[1]++;
68 }
69
70 if(Time[0]=='2')
71 {
72 if(Time[1]=='4')
73 {
74 Time[1]='0';
75 Time[0]='0';
76 }
77 }
78 if(Time[1]==0x3A) //小时个位
79 {
80 Time[1]=0x30;
81 Time[0]++;
82 }
83
84 if(Time[0]==0x33) //小时十位
85 {
86 Time[0]=0x30;
87 }
88 os_wait(K_IVL,200,0); //等待1s
89 os_send_signal(UARTSEND_2);//发送信号给任务2
90 }
91 }
92
93 void send (void)_task_ UARTSEND_2 //任务2
94 {
95 u8 i;
96 while(1)
97 {
98 os_wait(K_SIG,0,0);//接收信号 才开始执行任务2
99 for(i=0;i<9;i++) //发送时间
100 {
101 SBUF="Time"[i];
102 while(!TI); //等待发送完毕
103 TI="0";
104 }
105 }
106 }
107
108
心得:
1、我觉得定义任务的名称也最好加上任务的序号,像任务1 定义为 chuli_1
2、开始一定要建立一个任务,一定要使用至少一个系统函数。
3、每个任务里的程序一定是类似与while(1)循环结构,程序是从任务0开始执行。
4、os_create_task(n); n的范围是0~15 作用的建立一个任务,任务的优先级系统默认全是0,即最低级;
5、os_delete_task(n);是删除一个任务,让它不再执行。
6、os_wait(a,b,c);是个等待函数,a有3中形式,K_TMO,K_IVl,K_SIG ,分别表示等待超时,等待间隔,等待信号。