📄 gm8125.lst
字号:
C51 COMPILER V7.50 GM8125 03/09/2005 21:43:22 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE GM8125
OBJECT MODULE PLACED IN GM8125.OBJ
COMPILER INVOKED BY: E:\学习工具\Keil51\C51\BIN\C51.EXE GM8125.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************
2 * 文件:GM8125.C
3 * 功能:串口一扩五芯片GM8125读写函数库
4 * 作者:宋智宁
5 * 日期:2005.3.7
6 * 备注:晶振fosc = 11.0592MHz,暂不支持波特率115200bps
7 * 中断接收函数见中断函数库uart.c/uart51.c
8 *********************************************************************************/
9 #include "config.h"
10
11 //--数据端口和控制端口定义-------------------------
12 #ifdef C51_MX //P89C669
static unsigned char far UartCtrl _at_ 0x380000;
static unsigned char far UartState _at_ 0x280000;
#else //AT89S52
16 static unsigned char xdata UartCtrl _at_ 0x3800;
17 static unsigned char xdata UartState _at_ 0x2800;
18 #endif
19
20
21 /******************************************************************************
22 * 名称:DelayXms(uint16 x)
23 * 功能:延时X毫秒子程序
24 * 入口参数:uint16 x ----x ms
25 * 出口参数:无
26 * 说明:CPU--669(6时钟周期)
27 * 晶振--11.0592MHz
28 ******************************************************************************/
29 void DelayXms(uint16 x)
30 {
31 1 uint16 data i;
32 1 while(x!=0)
33 1 {
34 2 for(i=0; i<335; i++);
35 2 x--;
36 2 }
37 1 }
38
39
40 /******************************************************************************
41 * 名称:GM8125_Init(uint8 frame, uint16 baud)
42 * 功能:GM8125初始化子程序
43 * 入口参数:uint8 frame--帧格式(0--10bit/f,1--11bit/f)
44 * uint16 baud--母串口波特率(多通道模式)
45 * 出口参数:无
46 * 说明:串口初始化,用定时器1/波特率发生器, 上电时调用
47 * 复位后GM8125的帧格式为11bit, 母串口波特率为7200bps
48 * 晶振fosc = 11.0592MHz,暂不支持波特率115200bps
49 ******************************************************************************/
50 void GM8125_Init(uint8 frame, uint16 baud)
51 {
52 1 EA = 0; //初始化时关总中断
53 1
54 1 //----Reset-----------------------------
55 1 UartCtrl = 0x7f; //RST=0
C51 COMPILER V7.50 GM8125 03/09/2005 21:43:22 PAGE 2
56 1 DelayXms(200);
57 1 UartCtrl = 0xff; //RST=1
58 1
59 1 Uart_Init(1,3,7200); //复位后GM8125的帧格式为11bit, 母串口波特率为7200bps
60 1
61 1 GM8125_ChgBaud(frame, baud); //改变GM8125后,同时改变主机的波特率
62 1
63 1 EA = 1; //开总中断
64 1 }
65
66 /******************************************************************************
67 * 名称:GM8125_ChgBaud(uint8 frame, uint16 baud)
68 * 功能:改变GM8125母串口波特率和帧格式子程序
69 * 入口参数:uint8 frame--帧格式(0--10bit/f,1--11bit/f)
70 * uint16 baud--母串口波特率(多通道模式)
71 * 出口参数:int8 res--1表示成功,-1表示失败
72 * 说明:改变GM8125后,同时改变主机的波特率(多通道模式)
73 * 最多写3次控制字,若失败则返回-1
74 * 晶振fosc = 11.0592MHz,暂不支持波特率115200bps
75 ******************************************************************************/
76 int8 GM8125_ChgBaud(uint8 frame, uint16 baud)
77 {
78 1 uint8 num=3,cmd=0xf0; //命令控制字(高4位必须全为1)
79 1 uint8 temp;
80 1
81 1 if(frame==1) cmd = cmd | 0x08; //11bit
82 1 switch(baud)
83 1 {
84 2 case 7200: cmd = cmd + 0x00;
85 2 break;
86 2 case 14400: cmd = cmd + 0x01;
87 2 break;
88 2 case 28800: cmd = cmd + 0x02;
89 2 break;
90 2 case 57600: cmd = cmd + 0x03;
91 2 break;
92 2 //case 115200: cmd = cmd + 0x04;
93 2 // break;
94 2 default: cmd = cmd + 0x00;
95 2 break;
96 2 }
97 1
98 1 for(;num>0;num--) //最多写3次控制字,若失败则返回-1
99 1 {
100 2 UartCtrl = 0x81; //STADD2~0=000,SRADD2~0=000
101 2 DelayXms(1);
102 2 UartCtrl = 0x80; //MS=0, 写命令字
103 2 DelayXms(1);
104 2 Uart_Send_Byte(1, &cmd, 1); //发送命令字
105 2
106 2 DelayXms(100); //delay
107 2
108 2 UartCtrl = 0x81; //MS=1, 读命令字
109 2 Uart_Rev_Byte(1, &temp, 1); //读命令字
110 2 if(temp==cmd) break; //读命令字
111 2 }
112 1 UartCtrl = 0xf2; //MS=0,STADD2~0=001,SRADD2~0=111,使命令字生效
113 1
114 1
115 1 if(num==0) return -1; //最多写3次控制字,若失败则返回-1
116 1
117 1 //**改变主机的波特率***************************
C51 COMPILER V7.50 GM8125 03/09/2005 21:43:22 PAGE 3
118 1 EA = 0; //初始化时关总中断
119 1
120 1 if(frame==0)
121 1 Uart_Init(1,1,baud); //mode=1(10bit)
122 1 else
123 1 Uart_Init(1,3,baud); //mode=3(11bit)
124 1
125 1 EA = 1; //开总中断
126 1
127 1 return 1;
128 1 }
129
130 /******************************************************************************
131 * 名称:GM8125_Send(uint8 mode, uint8 channel, uint8 buf[], uint8 len)
132 * 功能:GM8125数据发送子程序
133 * 入口参数:uint8 mode--工作模式(0--单通道模式, 1--多通道模式)
134 * uint8 channel--通道号(1~5)
135 * uint8 buf[]--数据指针
136 * uint8 len--数据长度
137 * 出口参数:无
138 * 说明:
139 ******************************************************************************/
140 void GM8125_Send(uint8 mode, uint8 channel, uint8 buf[], uint8 len)
141 {
142 1 uint8 i,j,temp=0xff; //端口(RST=1,MS=1)
143 1
144 1 if(mode==0) //单通道模式
145 1 {
146 2 temp = (temp&0x81) + (channel<<4) + (channel<<1); //发送和接收通道号(1~5)
147 2
148 2 UartCtrl = temp; //MS=1,STADD2~0=channel,选择子串口
149 2
150 2 Uart_Send_Byte(1,buf,len); //发送数据
151 2 }
152 1 else //多通道模式
153 1 {
154 2 temp = (temp&0xf0) + (channel<<1); //发送通道号(1~5)
155 2
156 2 for(i=0; i<len; i++)
157 2 {
158 3 UartCtrl = temp; //MS=0,STADD2~0=channel,选择子串口
159 3 Uart_Send_Byte(1,buf+i,1); //发送1B数据
160 3
161 3 UartCtrl = 0xf0; //MS=0,STADD2~0=000,不选择子串口
162 3 j = 0x00;
163 3 Uart_Send_Byte(1,&j,1); //发送5个无效数据
164 3 Uart_Send_Byte(1,&j,1);
165 3 Uart_Send_Byte(1,&j,1);
166 3 Uart_Send_Byte(1,&j,1);
167 3 Uart_Send_Byte(1,&j,1);
168 3 }
169 2 UartCtrl = temp;
170 2 }
171 1 }
172
173 /******************************************************************************
174 * 名称:GM8125_Rev(GM8125BUF *buffer, uint8 len)
175 * 功能:GM8125数据接收子程序
176 * 入口参数:GM8125BUF *buffer--接收缓冲区的结构指针
177 * uint8 len--数据长度
178 * 出口参数:int8 res--1表示正常接收, -1表示缓冲区溢出
179 * 说明:用等待接收方式
C51 COMPILER V7.50 GM8125 03/09/2005 21:43:22 PAGE 4
180 ******************************************************************************/
181 int8 GM8125_Rev(GM8125BUF *buffer, uint8 len)
182 {
183 1 uint8 i,j,temp;
184 1
185 1 for(i=0; i<len; i++)
186 1 {
187 2 Uart_Rev_Byte(1,&temp,1); //接收1Byte
188 2
189 2 j = UartState&0x07; //读子串口号
190 2 if(buffer->Len[j-1]>=sizeof(buffer->Ch[0]))
191 2 return -1; //缓冲区溢出
192 2 else
193 2 {
194 3 buffer->Ch[j-1][buffer->Len[j-1]] = temp;
195 3 buffer->Len[j-1]++; //长度加1
196 3 }
197 2 }
198 1 return 1;
199 1 }
200
201 /******************************************************************************
202 * 名称:GM8125_Byte_Rev(uint8 dat)
203 * 功能:GM8125数据接收处理子程序(供中断服务程序调用)
204 * 入口参数:uint8 dat--接收的数据
205 * 出口参数:无
206 * 说明:供中断服务程序调用
207 * 使用全局变量:GM8125BUF SerBuf--串口接收缓冲区的结构
208 ******************************************************************************/
209 void GM8125_Byte_Rev(uint8 dat)
210 {
211 1 uint8 j;
212 1
213 1 j = UartState&0x07; //读子串口号
214 1 if(SerBuf.Len[j-1]<sizeof(SerBuf.Ch[0]))
215 1 {
216 2 SerBuf.Ch[j-1][SerBuf.Len[j-1]] = dat;
217 2 SerBuf.Len[j-1]++; //长度加1
218 2 }
219 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 686 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 25
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -