📄 mainloop.lst
字号:
C51 COMPILER V7.08 MAINLOOP 03/11/2005 10:39:59 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Mainloop.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND
line level source
1 /*
2 //*************************************************************************
3 //
4 // ZLGMCU
5 // www.zlgmcu.com
6 // File Name: MAINLOOP.C
7 // Revision: V0.2(2002-04-08)
8 // Use Library: USB51S.LIB
9 // Note: USB51S.LIB不带DMA控制功能
10 //*************************************************************************
11 */
12
13 #include <stdio.h>
14 #include <string.h>
15 #include <reg51.h> /* special function register declarations */
16 #include "mainloop.h"
17 #include "isr.h"
18 #include "protozlg.h"
19 #include "absacc.h"
20 #define IN0 XBYTE[0xfef8] //设置AD0809通道0的地址
21
22 #include "d12ci.h"
23 /*
24 //*************************************************************************
25 // Public static data
26 //*************************************************************************
27 */
28 unsigned char Data;
29 static unsigned int i_st; //add by zjl
30
31 extern EPPFLAGS bEPPflags;
32 extern unsigned char idata GenEpBuf[];
33 extern unsigned char idata EpBuf[];
34 extern unsigned char xdata *ad_addr;
35 extern unsigned char xdata *da_addr;
36
37 //D12中断服务
38 usb_isr() interrupt 0
39 {
40 1 DISABLE;
41 1 // fn_usb_isr();//调用D12中断服务子程序
42 1 //----------------------code below copied from fn_usb_isr()---------
43 1 // bEPPflags.bits.in_isr = 1;
44 1 i_st = D12_ReadInterruptRegister();
45 1 if(i_st != 0)
46 1 {
47 2
48 2 if(i_st & D12_INT_ENDP2IN) // ep2_txdone();
49 2 {
50 3 D12_COMMAND = 0x45; //clear last treat status
51 3 D12_COMMAND = 0x05;
52 3 D12_COMMAND = 0xFA; //enable buffer sothat command in will be respond
53 3 }
54 2 else if(i_st & D12_INT_ENDP2OUT) ep2_rxdone();
55 2 else if(i_st & D12_INT_ENDP0IN) ep0_txdone();
C51 COMPILER V7.08 MAINLOOP 03/11/2005 10:39:59 PAGE 2
56 2 else if(i_st & D12_INT_ENDP0OUT) ep0_rxdone();
57 2 // if(i_st & D12_INT_EOT)
58 2 // dma_eot();
59 2 else if(i_st & D12_INT_BUSRESET)
60 2 {
61 3 bus_reset();
62 3 bEPPflags.bits.bus_reset = 1;
63 3 }
64 2 else if(i_st & D12_INT_SUSPENDCHANGE)
65 2 bEPPflags.bits.suspend = 1;
66 2 // if(i_st & D12_INT_ENDP1IN)
67 2 // ep1_txdone();
68 2 // if(i_st & D12_INT_ENDP1OUT)
69 2 // ep1_rxdone();
70 2 }
71 1 bEPPflags.bits.in_isr = 0;
72 1 ENABLE;
73 1 }
74 void inserv(void) interrupt 2
75 {
76 1
77 1 Data=*ad_addr; //在这里得到A/D转化的值
78 1 D12_WriteEndpoint(3, 1, &Data);//数据写入D12缓冲区
79 1 Data&=0xbf;
80 1 P1=0xb0|Data;
81 1 //设置为66,看PC机接收到数据是否符合。
82 1
83 1 }
84 void delay(int i){
85 1 int a;
86 1 for(a=0;a<=i;a++) ;
87 1 }
88
89 void main(void)
90 {
91 1 // unsigned char i;
92 1
93 1 P0 = 0xFF;//初始化I/O口
94 1 // P1 = 0xAA;
95 1 // P1 = 0x55;
96 1 // delay(20000);
97 1 // delay(20000);
98 1 P1 = 0xFF;
99 1 P2 = 0xFF;
100 1 P3 = 0xFF;
101 1 MCU_D12CS = 0x0;//gaidong
102 1 D12SUSPD = 0;
103 1
104 1 IT0 = 0;//初始化中断
105 1 EX0 = 1;
106 1 PX0 = 0;
107 1 //IT1=0;//设置INT1低电平中断触发//gaidong
108 1 //EX1=1;//允许外部中断1//gaidong
109 1 EA =1;//允许使用片里ROM
110 1
111 1 MCU_D12CS = 0x1;//gaidong
112 1 MCU_D12CS =0x0 ;//gaidong
113 1 D12_SetDMA(0x0);//gaidong
114 1 bEPPflags.value = 0;
115 1
116 1 //reconnect_USB();//联接USB总线
117 1 // while(bEPPflags.bits.configuration==0)
C51 COMPILER V7.08 MAINLOOP 03/11/2005 10:39:59 PAGE 3
118 1 reconnect_USB();
119 1
120 1 /* Main program loop */
121 1
122 1 // for(i=0;i<64;i++) EpBuf[i] = 1; //init EpBuf by zjl
123 1 // D12_WriteEndpoint(5, 64, EpBuf);
124 1
125 1 while( TRUE ){
126 2 if(bEPPflags.bits.configuration)
127 2 check_key_LED();//连接正常,调用按键和LED控制处理
128 2 delay(10000);
129 2 usbserve();//USB服务数据处理
130 2 } // Main Loop
131 1 }
132
133 void check_key_LED(void)
134 {
135 1 static unsigned char c, last_key = 0x1,b;
136 1
137 1 /* if(MCU_SWM0&MCU_SWM1) c=0x40;
138 1
139 1 else c=0x80;*/
140 1
141 1
142 1 c=(MCU_SWM0&MCU_SWM1) ;
143 1
144 1
145 1 if(c==1) {b=2;}
146 1 else {b=16;}
147 1
148 1 if (c != last_key) {
149 2
150 2 D12_WriteEndpoint(3, 1, &b);//按键状态改变,发送信息给主机/
151 2 }
152 1 last_key = c;
153 1
154 1 if(bEPPflags.bits.ep1_rxdone) {
155 2 DISABLE;//接收到主机发来的LED控制信息
156 2 bEPPflags.bits.ep1_rxdone = 0;
157 2 ENABLE;
158 2 MCU_LED0 = !(GenEpBuf[3] & 0x1);//控制LED状态
159 2 MCU_LED1 = !(GenEpBuf[3] & 0x2);
160 2 }
161 1 }
162
163
164
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 443 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 4
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 + -