📄 mysub.lst
字号:
1: #include "f:\wangyong\GSUSB\GSUSBN3\PIC2\mysub.h"
2: #include "math.H"
3:
4:
5: void DoRBInit(void);
6: void DoRCInit(void);
7: void SendCh(INT8U ch);
8:
9:
10: #if TXBUFFERENABLE == 1
11: struct UARTBUFFER2{ //UART0数据队列
12: INT8U Buffer[T_UARTLENGTH];
13: INT8U Counter;
14: INT8U In;
15: INT8U Out;
16: }bank1 Tx;
17:
18: bank1 INT8U TXEnable = 0; //串口当前状态
19:
20: #endif
21: #if TXBUFFERENABLE == 1
22: //串行中断发送程序
23: void DoTXInit(void){
24:
25: if(Tx.Counter > 0){
26: Tx.Counter -= 1;
27: SBUF = Tx.Buffer[Tx.Out];
28: Tx.Out += 1;
29: if(Tx.Out == (T_UARTLENGTH - 1)){
30: Tx.Out = 0;
31: }
32: }
33: else{
34: TXEnable = 0;
35: ES = 0; //关闭中断
36: }
37: }
38:
39: #endif
40:
41: /****************************************************************
42: 函数名称:UARTInit(INT16U bate)
43: 函数功能:异步通讯接口的设置
44: Input Vector:bate 波特率
45: ****************************************************************/
46:
47: void UARTInit(INT16U bate){
48:
49: TRISC |= 0b11000000;
50: TXSTA = 0b10100100;
51: RCSTA = 0b10110000;
52: SPBRG = XTAL / bate / 16 - 1;
53: #if TXBUFFERENABLE == 1
54: Tx.Counter = 0;
55: Tx.In = 0;
56: Tx.Out = 0;
57: #endif
58: }
59:
60: /*******************************************************************
61: 函数名称:SebdString
62: 函数功能:将长整型数据转换字符串发送出去
63: Input Vector:no(待发数据),LF
64: *******************************************************************/
65: void SendStr(INT32S no){
66:
67: INT8U ch[9];
68: INT8U ii;
69:
70: if(no >= 0) ch[0] = '+';
71: else{
72: no = -no;
73: ch[0] = '-';
74: }
75:
76: for(ii = 0 ; ii < 8 ; ii++){
77: ch[8 - ii] = (no % 10) + 0x30;
78: no /= 10;
79: }
80: for(ii = 0 ; ii < 9 ; ii++){
81: SendCh(ch[ii]);
82: }
83: }
84: /**************************************************************************
85: 程序名称:SendCh
86: 程序功能:发送数据
87: **************************************************************************/
88:
89: void SendCh(INT8U ch){
90:
91: #if TXBUFFERENABLE == 1
92: ES = 0;
93: if(TXEnable == 0){
94: if(Tx.Counter == 0){
95: TXREG = ch;
96: }
97: else{
98: Tx.Counter -= 1;
99: TXREG = Tx.Buffer[Tx.Out];
100: Tx.Out += 1;
101:
102: if(Tx.Out == (T_UARTLENGTH - 1)){
103: Tx.Out = 0;
104: }
105:
106: Tx.Counter += 1;
107: Tx.Buffer[Tx.In] = ch;
108: Tx.In += 1;
109:
110: if(Tx.In == (T_UARTLENGTH - 1)){
111: Tx.In = 0;
112: }
113: }
114: TXEnable = 1;
115: ES = 1;
116: }
117: else{
118: ES = 1;
119: while(Tx.Counter >= T_UARTLENGTH); //等待发送空
120:
121: Tx.Counter += 1;
122: Tx.Buffer[Tx.In] = ch;
123: Tx.In += 1;
124:
125: if(Tx.In == (T_UARTLENGTH - 1)){
126: Tx.In = 0;
127: }
128: }
129: #else
130: TXREG = ch;
131: while(!TXIF) CLRWDT();
132: TXIF = 0;
133: #endif
134: }
135:
136: //读取对应AD值的程序
137: INT8U ReadAD(INT8U Channel){
138:
139: INT8U Vol;
140:
141: if(Channel < 6){
142: Channel <<= 3;
143: Vol = ADCON0 & 0b11000111;
144: ADCON0 = Vol | Channel;
145:
146: for(Channel = 0 ; Channel < 100 ; Channel++);
147:
148: ADGO = 1;
149: CLRWDT();
150: while(ADGO);
151: Channel = ADRES;
152: return Channel;
153: }
154: return 0;
155: }
156:
157: //细分处理
158: INT32S WY_XFFunction(INT32S GSCounter , INT8U VolX , INT8U VolY , INT8U VolMid)
159: {
160: float Vx , Vy , Vm;
161:
162: Vx = VolX;
163: Vy = VolY;
164: Vm = VolMid;
165:
166: Vx = Vx - Vm;
167: Vy = Vy - Vm;
168:
169: if(Vy == 0){
170: if(Vx > 0) Vm = 3.141592654 / 2.0;
171: else Vm = 3.141592654 / 2.0 + 3.141592654;
172: }
173: else{
174: Vm = -atan(Vx / Vy);
175: if(Vy > 0){
176: Vm += 3.141592654;
177: }
178: else if(Vx < 0){
179: Vm = 3.141592654 * 2 + Vm;
180: }
181: }
182:
183: Vm = Vm * 31.83098861422280369261393109942;
184:
185: Vm += 50;
186: if(Vm >= 200) Vm -= 200;
187:
188: GSCounter *= 200;
189:
190: GSCounter += Vm;
191:
192: return GSCounter;
193: }
194:
195:
196:
197: /*******************************************************************************
198: 中继处理程序
199: *******************************************************************************/
200: void interrupt tc_int(void)
201: {
202: if(RBIF){ //计数器溢出处理
203: DoRBInit();
204: }
205:
206: if(RCIF){
207: RCIF = 0;
208: DoRCInit();
209: }
210: #if TXBUFFERENABLE == 1
211: if(TXIF){
212: TXIF = 0;
213: DoTXInit();
214: }
215: #endif
216: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -