📄 text1.lst
字号:
10 =1 #define __ABSACC_H__
11 =1
12 =1 #define CBYTE ((unsigned char volatile code *) 0)
13 =1 #define DBYTE ((unsigned char volatile data *) 0)
14 =1 #define PBYTE ((unsigned char volatile pdata *) 0)
15 =1 #define XBYTE ((unsigned char volatile xdata *) 0)
16 =1
17 =1 #define CWORD ((unsigned int volatile code *) 0)
18 =1 #define DWORD ((unsigned int volatile data *) 0)
19 =1 #define PWORD ((unsigned int volatile pdata *) 0)
20 =1 #define XWORD ((unsigned int volatile xdata *) 0)
21 =1
22 =1
23 =1 #ifdef __CX51__
=1 #define FVAR(object, addr) (*((object volatile far *) (addr)))
=1 #define FARRAY(object, base) ((object volatile far *) (base))
=1 #define FCVAR(object, addr) (*((object const far *) (addr)))
=1 #define FCARRAY(object, base) ((object const far *) (base))
=1 #else
29 =1 #define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L)))
30 =1 #define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))
31 =1 #define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))
32 =1 #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
33 =1 #endif
34 =1
35 =1 #endif
4 #define uint unsigned int
5 #define uchar unsigned char
6 #define WAIT 100
7
8 bit bdata bUart0RFlag, bUart1RFlag, bUart2RFlag, bUartRFlag;
9 /** receiving memory of upper machine, read data while Uart0RFlag=1 */
10 uchar idata Uart0RBuf,Uart1RBuf,Uart2RBuf;
11 /** upper machine sends state flag, '1' means com port 'busy'
12 * (sending data to sub com port, just sending new data to sending buffer of
13 * sub comport. '0' means idle, user application should set 'TI=1' to launch
14 * data sending of sub comport
15 */
16 bit bdata bUartBusy;
17 /* upper request flag of sending instruction. Before sending upper machine must
18 * put instruction to be transmitted into 'InstructBuf'. Then set this flag to
19 * '1', after this flag being changed to '0', this process could be done again
20 */
21 bit bdata bInstructFlag;
22
23 uchar idata InstructBuf; //指令缓冲(用户可将设置SP2328/SP2338的指令放入
24 //该寄存器,由驱动程序自动完成指令发送)
25 uchar idata UartPointer; //子串口发送数据指针,中断服务程序通过该指针轮询
26 //发送数据到各子串口,保证各子串口的数据不丢失
27
28 uchar idata Uart0Tbuf[8]; /* sub Uart 0 data sending buffer*/
C51 COMPILER V8.02 TEXT1 10/28/2008 04:20:49 PAGE 4
29 uchar idata Uart1TBuf[8]; /* sub Uart 1 data sending buffer*/
30 uchar idata Uart2TBuf[8]; /* sub Uart 2 data sending buffer*/
31 uchar idata Uart0RBuf,Uart1RBuf,Uart2RBuf; //上位机接收子串口数据缓
32 //冲存储器,上位机通过判断"bUart0RFlag"等标志
33 //是否为"1",来决定是否读取该寄存器的数据
34 uchar idata Uart0TNum,Uart1TNum,Uart2TNum; //等待发送到各
35 //子串口的字节数,"0"表示相应子串口发送缓冲区"空"
36 //主程序可以通过判断该标志是否为"0"来决定是否向
37 //相应子串口发送后续数据
38
39 sbit AdrIn0 =P1^0;
40 sbit AdrIn1 =P1^1;
41 sbit AdrOut0=P1^2;
42 sbit AdrOut1=P1^3;
43
44
45 uint data buffer1=0, buffer0=0; //定时器计数变量
46 sbit green=P1^4;
47 sbit red=P1^5;
48
49 /*串口服务子程序*/
50 serial () interrupt 4
51 {
52 1 if(RI)
53 1 {
54 2 RI=0; //准备解析刚接收到的数据来自于哪个子串口
55 2 bUartRFlag=1; //产生串口中断标志位
56 2 if(AdrIn1){ //子串口2接收到一个字节(未用)
57 3 Uart2RBuf=SBUF; //缓存子串口2收到的数据,以便接收后续数据
58 3 bUart2RFlag=1; //置子串口2收到数据标志,便于主程序查询
59 3 } else if(AdrIn0){ //子串口1接收到一个字节
60 3 Uart1RBuf=SBUF; //缓存子串口1收到的数据,以便接收后续数据
61 3 bUart1RFlag=1; //置子串口1收到数据标志,便于主程序查询
62 3 }
63 2 else { //子串口0接收到一个字节
64 3 Uart0RBuf=SBUF; //缓存子串口0收到的数据,以便接收后续数据
65 3 bUart0RFlag=1; //置子串口0收到数据标志,便于主程序查询
66 3 }
67 2 }else{
68 2 TI=0; //已经产生发送中断,准备解析下一个需要发送的数据
69 2 switch(UartPointer){ //判断即将向哪个子串口发送数据?
70 3 case 0:{ //准备向子串口0发送数据
71 4 UartPointer++; //下一次发送中断准备向子串口1发送数据
72 4 if(Uart0TNum){ //串口0发送缓存区是否有数据需要发送?
73 5 AdrOut0=0; //有数据需要发送,则选通子串口0的地址
74 5 AdrOut1=0;
75 5 SBUF=Uart0Tbuf[--Uart0TNum];//将串口0发送缓存中的一个字节
76 5 break; //由子串口0发送到下位机
77 5 }
78 4 else goto T_NopInstruction; //若子串口0没有数据发送则准备发送空指令
79 4 }
80 3
81 3 case 1:{ //准备向子串口1发送数据
82 4 UartPointer++; //下一次发送中断准备向串口2发送数据
83 4 if(Uart1TNum){ //串口1发送缓存区是否有数据需要发送?
84 5 AdrOut0=1; //有数据需要发送,则选通子串口1的地址
85 5 AdrOut1=0;
86 5 SBUF=Uart1TBuf[--Uart1TNum];//将串口1发送缓存中的一个字节
87 5 break; //由子串口1发送到下位机
88 5 }
89 4 else goto T_NopInstruction; //若子串口1没有数据发送则准备发送空指令
90 4 } //而只能够发送一条空指令用于时序配合
C51 COMPILER V8.02 TEXT1 10/28/2008 04:20:49 PAGE 5
91 3
92 3 case 2:{ //准备向子串口2发送数据
93 4 UartPointer++; //下一次发送中断准备发送空指令
94 4 if(Uart2TNum){ //串口2发送缓存区是否有数据需要发送?
95 5 AdrOut0=0; //有数据需要发送,则选通子串口2的地址
96 5 AdrOut1=1;
97 5 SBUF=Uart2TBuf[--Uart2TNum];//将串口2发送缓存中的一个字节
98 5 break; //由子串口2发送到下位机
99 5 }
100 4 else goto T_NopInstruction; //若子串口2没有数据发送则准备发送空指令
101 4 } //而只能够发送一条空指令用于时序配合
102 3
103 3 default:{
104 4 UartPointer=0; //下一次发送中断准备向串口0发送数据
105 4 T_NopInstruction:
106 4 AdrOut0=1; //选通目串口准备发送空指令或者其他指令
107 4 AdrOut1=1;
108 4 if(bInstructFlag){ //判断是否需要发送其他指令?
109 5 bInstructFlag=0; //清除指令发送标志
110 5 SBUF=InstructBuf; //将需要发送的指令发送到串口扩展IC
111 5 break;
112 5 }
113 4 else if(Uart0TNum|Uart1TNum|Uart2TNum){//判断所有子串口的数据是否
114 5 SBUF=0; //都已经全部发送完毕
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -