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 ,分别表示等待超时,等待间隔,等待信号。