📄 hyperterminal.lst
字号:
C51 COMPILER V7.09 HYPERTERMINAL 01/03/2007 02:19:15 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE HYPERTERMINAL
OBJECT MODULE PLACED IN HyperTerminal.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE HyperTerminal.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "HyperTerminal.h"
2
3 /*****************************************************************************/
4 char idata SerialBuffer[MAX_SERIAL_BUFFER_SIZE];
5 char idata PromptBuffer[MAX_PROMPT_BUFFER_SIZE];
6 char idata CursorPosion;
7 char idata ExecCommandFlag;
8
9 COMMAND CommandList[MAX_COMMAND_NUM] = {
10 {"help",Help," help -- Command help"},
11 {"prompt",Prompt," prompt <string> -- Change a prompt"},
12 {"clear",Clear," clear -- Clear screen"},
13 {"reboot",Reboot," reboot -- Reboot the MCU"}
14 };
15
16 /*****************************************************************************/
17 void Help(char argc, const char **argv)
18 {
19 1 char i;
20 1 argv = argv;
21 1 switch(argc)
22 1 {
23 2 case 1:
24 2 for(i = 0; i < MAX_COMMAND_NUM; i++)
25 2 {
26 3 SerialSendStr(CommandList[i].HelpString);
27 3 SerialSendStr("\r\n");
28 3 }
29 2 SerialSendStr("\r\n");
30 2 break;
31 2 default:
32 2 SerialSendStr(" Invalid 'help' command: too many arguments\r\n");
33 2 SerialSendStr(" Usage:\r\n");
34 2 SerialSendStr(" help\r\n");
35 2 break;
36 2 }
37 1 }
38
39 void Prompt(char argc, const char **argv)
40 {
41 1 switch(argc)
42 1 {
43 2 case 2:
44 2 if(strlen(argv[1]) >= MAX_PROMPT_BUFFER_SIZE)
45 2 {
46 3 SerialSendStr(" Warnning:Your argument is too long!\r\n\r\n");
47 3 break;
48 3 }
49 2 memcpy(PromptBuffer,argv[1],MAX_PROMPT_BUFFER_SIZE);
50 2 SerialSendStr(" Prompt is chagned to \"");
51 2 sprintf(&SerialBuffer[0],"%s\"\r\n\r\n",&PromptBuffer[0]);
52 2 SerialSendStr(&SerialBuffer[0]);
53 2 break;
54 2 default:
55 2 SerialSendStr(" Invalid 'prompt' command: too few or many arguments\r\n");
C51 COMPILER V7.09 HYPERTERMINAL 01/03/2007 02:19:15 PAGE 2
56 2 SerialSendStr(" Usage:\r\n");
57 2 SerialSendStr(" prompt <string>\r\n");
58 2 break;
59 2 }
60 1 }
61
62 void Clear(char argc, const char **argv)
63 {
64 1 argv = argv;
65 1 switch(argc)
66 1 {
67 2 case 1:
68 2 SerialSendStr(CLEARSCREEN);
69 2 break;
70 2 default:
71 2 SerialSendStr(" Invalid 'clear' command: too many arguments\r\n");
72 2 SerialSendStr(" Usage:\r\n");
73 2 SerialSendStr(" clear\r\n");
74 2 break;
75 2 }
76 1 }
77
78 void Reboot(char argc, const char **argv)
79 {
80 1 argv = argv;
81 1 switch(argc)
82 1 {
83 2 case 1:
84 2 (*(void(*)())0)();
85 2 break;
86 2 default:
87 2 SerialSendStr(" Invalid 'reboot' command: too many arguments\r\n");
88 2 SerialSendStr(" Usage:\r\n");
89 2 SerialSendStr(" reboot\r\n");
90 2 break;
91 2 }
92 1 }
93 /*****************************************************************************/
94 void InitHyperTerminal(void)
95 {
96 1 TMOD |= 0x20; /* timer1, mode 2, 8 bit reload */
97 1 SCON = 0x50; /* serial mode 1, 8 bit uart, enable receive */
98 1 PCON = 0x80; /* SMOD = 1, double baud */
99 1 TH1 = 0xFF; /* baud = 57600, fosc = 11.0592MHZ */
100 1 TL1 = 0xFF;
101 1 RI = 0; /* clear receive flag */
102 1 TI = 0; /* clear send flag */
103 1 TR1 = 1; /* start timer1 */
104 1 ES = 1; /* enable serial interrupt */
105 1 EA = 1; /* enable all interrupt */
106 1
107 1 CursorPosion = 0;
108 1 ExecCommandFlag = 0;
109 1 memset(&SerialBuffer[0],'\0',MAX_SERIAL_BUFFER_SIZE);
110 1 memcpy(&PromptBuffer[0],"-->>",MAX_PROMPT_BUFFER_SIZE);
111 1 SerialSendStr(F_LIGHTGREEN);
112 1 SerialSendStr(B_BLACK);
113 1 SerialSendStr(CLEARSCREEN);
114 1 SerialSendStr("-----------------------------\r\n");
115 1 SerialSendStr(" The 8051 Hyper Terminal,by JJJ\r\n");
116 1 SerialSendStr(" http://www.proteus.com.cn \r\n");
117 1 SerialSendStr("-----------------------------\r\n");
C51 COMPILER V7.09 HYPERTERMINAL 01/03/2007 02:19:15 PAGE 3
118 1 SerialSendStr("\r\n");
119 1 SerialSendStr(&PromptBuffer[0]);
120 1 }
121
122 void SerialSendByte(char dat)
123 {
124 1 SBUF = dat;
125 1 while(TI == 0);
126 1 TI = 0;
127 1 }
128
129 void SerialSendStr(char *str)
130 {
131 1 while(*str != '\0')
132 1 {
133 2 SerialSendByte(*str);
134 2 str++;
135 2 }
136 1 }
137
138 void SerialInterrupt(void) interrupt 4 using 3
139 {
140 1 char SbufTemp;
141 1 if(RI)
142 1 {
143 2 RI = 0;
144 2 SbufTemp = SBUF;
145 2 switch(SbufTemp)
146 2 {
147 3 case 0x08:
148 3 case 0x06:
149 3 case 0x07:
150 3 case 0x7E:
151 3 case 0x7F:
152 3 if(CursorPosion > 0)
153 3 {
154 4 CursorPosion--;
155 4 SerialSendByte(0x08);
156 4 SerialSendByte(' ');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -