📄 yy1.lst
字号:
22 =2 //**********************************************************************************
23 =2 //使用方法:(此范例自包含,独立于其他程序。)
24 =2 // 1.开头加入#include <reg51.h>语句,一定要有。
25 =2 // 2.初始化串口 InitSerial();//本例中为20MHz晶体,300波特率,模式2初始化
26 =2 // 3.初始化串口缓冲区 InitSerialBuffer();
27 =2 // 4.使用显示字节,字,长字,字符,字符串,清屏函数。
28 =2 //**********************************************************************************
29 =2 //波特率计算公式:
30 =2 // TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
31 =2 // 其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
32 =2 // 本例中,SMOD=0;Fosc=20*10E6;Bound=300,所以TH1=0x52。
33 =2 //**********************************************************************************
34 =2 //书写风格:
35 =2 // 1.带yy前缀标志的函数为杨屹改写的等效C库函数。
36 =2 // 2.单个单词用小写,yy定义为前缀,不算一个单词。
37 =2 // 3.多个单词(2个及以上),每个单词首字母大写。(有时变量名第一个单词首字母小写)
38 =2 // 4.采用内缩风格,每次缩进8个空格。
39 =2 //**********************************************************************************
40 =2
41 =2 void InitSerial() reentrant;//串口初始化
42 =2 void InitSerialBuffer(void) reentrant;//串口缓冲区初始化
43 =2 bit yygetch(unsigned char *ch) reentrant;//从串口缓冲区读1字节数据
44 =2 void PrintChar(unsigned char ch) reentrant;//显示字符
45 =2 void PrintCh(unsigned char ch) reentrant;//内部使用,不建议用户使用。
46 =2 void PrintByte(unsigned char Byte) reentrant;//以十六进制格式显示1个字节数据
47 =2 void PrintWord(unsigned int Word) reentrant;//以十六进制格式显示1个字数据
48 =2 void PrintLong(unsigned long LongWord) reentrant;//以十六进制格式显示1个长字数据
49 =2 void PrintStr(unsigned char *str) reentrant;//显示字符串
50 =2 void clrscr() reentrant;//清屏
51 =2
52 =2 void serial(void) reentrant;//串口中断服务子程序
53 =2
54 =2 //收发缓冲区长度
C51 COMPILER V8.02 YY1 03/10/2008 11:50:50 PAGE 13
55 =2 #define LenTxBuf 2000 //Don't too small,because it will cause display abnormal.
56 =2 #define LenRxBuf 50
57 =2
58 =2 #define MaxLenStr 100 /*buf[MaxLenStr+1] for '\0'*/
59 =2
60 =2 #define TABNum 4 //TAB键移动长度
61 =2
25 =1 #include <reg51.h>
1 =2 /*--------------------------------------------------------------------------
2 =2 REG51.H
3 =2
4 =2 Header file for generic 80C51 and 80C31 microcontroller.
5 =2 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =2 All rights reserved.
7 =2 --------------------------------------------------------------------------*/
8 =2
9 =2 #ifndef __REG51_H__
10 =2 #define __REG51_H__
11 =2
12 =2 /* BYTE Register */
13 =2 sfr P0 = 0x80;
14 =2 sfr P1 = 0x90;
15 =2 sfr P2 = 0xA0;
16 =2 sfr P3 = 0xB0;
17 =2 sfr PSW = 0xD0;
18 =2 sfr ACC = 0xE0;
19 =2 sfr B = 0xF0;
20 =2 sfr SP = 0x81;
21 =2 sfr DPL = 0x82;
22 =2 sfr DPH = 0x83;
23 =2 sfr PCON = 0x87;
24 =2 sfr TCON = 0x88;
25 =2 sfr TMOD = 0x89;
26 =2 sfr TL0 = 0x8A;
27 =2 sfr TL1 = 0x8B;
28 =2 sfr TH0 = 0x8C;
29 =2 sfr TH1 = 0x8D;
30 =2 sfr IE = 0xA8;
31 =2 sfr IP = 0xB8;
32 =2 sfr SCON = 0x98;
33 =2 sfr SBUF = 0x99;
34 =2
35 =2
36 =2 /* BIT Register */
37 =2 /* PSW */
38 =2 sbit CY = 0xD7;
39 =2 sbit AC = 0xD6;
40 =2 sbit F0 = 0xD5;
41 =2 sbit RS1 = 0xD4;
42 =2 sbit RS0 = 0xD3;
43 =2 sbit OV = 0xD2;
44 =2 sbit P = 0xD0;
45 =2
46 =2 /* TCON */
47 =2 sbit TF1 = 0x8F;
48 =2 sbit TR1 = 0x8E;
49 =2 sbit TF0 = 0x8D;
50 =2 sbit TR0 = 0x8C;
51 =2 sbit IE1 = 0x8B;
52 =2 sbit IT1 = 0x8A;
53 =2 sbit IE0 = 0x89;
54 =2 sbit IT0 = 0x88;
C51 COMPILER V8.02 YY1 03/10/2008 11:50:50 PAGE 14
55 =2
56 =2 /* IE */
57 =2 sbit EA = 0xAF;
58 =2 sbit ES = 0xAC;
59 =2 sbit ET1 = 0xAB;
60 =2 sbit EX1 = 0xAA;
61 =2 sbit ET0 = 0xA9;
62 =2 sbit EX0 = 0xA8;
63 =2
64 =2 /* IP */
65 =2 sbit PS = 0xBC;
66 =2 sbit PT1 = 0xBB;
67 =2 sbit PX1 = 0xBA;
68 =2 sbit PT0 = 0xB9;
69 =2 sbit PX0 = 0xB8;
70 =2
71 =2 /* P3 */
72 =2 sbit RD = 0xB7;
73 =2 sbit WR = 0xB6;
74 =2 sbit T1 = 0xB5;
75 =2 sbit T0 = 0xB4;
76 =2 sbit INT1 = 0xB3;
77 =2 sbit INT0 = 0xB2;
78 =2 sbit TXD = 0xB1;
79 =2 sbit RXD = 0xB0;
80 =2
81 =2 /* SCON */
82 =2 sbit SM0 = 0x9F;
83 =2 sbit SM1 = 0x9E;
84 =2 sbit SM2 = 0x9D;
85 =2 sbit REN = 0x9C;
86 =2 sbit TB8 = 0x9B;
87 =2 sbit RB8 = 0x9A;
88 =2 sbit TI = 0x99;
89 =2 sbit RI = 0x98;
90 =2
91 =2 #endif
26 =1
27 =1 //用户头文件加在最后面
28 =1 //Your head file add here.
2
3 void TaskStartyya(void *yydata) reentrant;
4 void TaskStartyyb(void *yydata) reentrant;
5 void TaskStartyyc(void *yydata) reentrant;
6
7 OS_STK TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中设置?STACK空间为40H即64。
8 OS_STK TaskStartStkyyb[MaxStkSize];
9 OS_STK TaskStartStkyyc[MaxStkSize];
10
11 void main(void)
12 {
13 1 OSInit();
14 1
15 1 InitTimer0();
16 1 InitSerial();
17 1 InitSerialBuffer();
18 1
19 1 OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],2);
20 1 OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],3);
21 1 OSTaskCreate(TaskStartyyc, (void *)0, &TaskStartStkyyc[0],4);
22 1
23 1 OSStart();
C51 COMPILER V8.02 YY1 03/10/2008 11:50:50 PAGE 15
24 1 }
25
26
27 void TaskStartyya(void *yydata) reentrant
28 {
29 1 yydata=yydata;
30 1 clrscr();
31 1 PrintStr("\n\t\t*******************************\n");
32 1 PrintStr("\t\t* Hello! The world. *\n");
33 1 PrintStr("\t\t*******************************\n\n\n");
34 1
35 1 for(;;){
36 2 PrintStr("\tAAAAAA111111 is active.\n");
37 2 OSTimeDly(OS_TICKS_PER_SEC);
38 2 }
39 1 }
40
41 void TaskStartyyb(void *yydata) reentrant
42 {
43 1 yydata=yydata;
44 1
45 1 for(;;){
46 2 PrintStr("\tBBBBBB333333 is active.\n");
47 2 OSTimeDly(3*OS_TICKS_PER_SEC);
48 2 }
49 1 }
50
51 void TaskStartyyc(void *yydata) reentrant
52 {
53 1 yydata=yydata;
54 1
55 1 for(;;){
56 2 PrintStr("\tCCCCCC666666 is active.\n");
57 2 OSTimeDly(6*OS_TICKS_PER_SEC);
58 2 }
59 1 }
C51 COMPILER V8.02 YY1 03/10/2008 11:50:50 PAGE 16
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 11
; SOURCE LINE # 12
; SOURCE LINE # 13
0000 120000 E LCALL _?OSInit
; SOURCE LINE # 15
0003 120000 E LCALL _?InitTimer0
; SOURCE LINE # 16
0006 120000 E LCALL _?InitSerial
; SOURCE LINE # 17
0009 120000 E LCALL _?InitSerialBuffer
; SOURCE LINE # 19
000C 90FFFF MOV DPTR,#0FFFFH
000F 120000 E LCALL ?C?ADDXBP
0012 7402 MOV A,#02H
0014 F0 MOVX @DPTR,A
0015 7B01 MOV R3,#01H
0017 7A00 R MOV R2,#HIGH TaskStartStkyya
0019 7900 R MOV R1,#LOW TaskStartStkyya
001B 90FFFD MOV DPTR,#0FFFDH
001E 120000 E LCALL ?C?ADDXBP
0021 EB MOV A,R3
0022 F0 MOVX @DPTR,A
0023 A3 INC DPTR
0024 EA MOV A,R2
0025 F0 MOVX @DPTR,A
0026 A3 INC DPTR
0027 E9 MOV A,R1
0028 F0 MOVX @DPTR,A
0029 7B00 MOV R3,#00H
002B 7A00 MOV R2,#00H
002D 7900 MOV R1,#00H
002F 90FFFD MOV DPTR,#0FFFDH
0032 120000 E LCALL ?C?ADDXBP
0035 EB MOV A,R3
0036 F0 MOVX @DPTR,A
0037 A3 INC DPTR
0038 EA MOV A,R2
0039 F0 MOVX @DPTR,A
003A A3 INC DPTR
003B E9 MOV A,R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -