?? int.lst
字號:
C51 COMPILER V7.50 INT 02/06/2009 10:34:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE INT
OBJECT MODULE PLACED IN Int.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Int.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <at89s52.h>
2 #include <stdio.h>
3 #include <per.h>
4 #include <intrins.h>
5
6 extern unsigned char MS[BUFFNUM+1];//
7 //extern bit receive_flag;
8 //extern bit first_receive_b;
9 //extern bit receive_time_begin_b;
10 //extern unsigned char receive_time;
11 //extern unsigned char interrupt_times;
12 //unsigned char px,sum_temp;
13 //extern bit send_flag;
14 extern bit SomeKeyEnableFlag,SomeKeyKeepFlag;
15 extern unsigned char SomeKeyKeepTime;
16 extern bit ReadKeyOnceFlag;
17
18 extern unsigned char DatTemp1,DatTemp2,DatTemp11,DatTemp22;
19 unsigned int time;
20 extern unsigned char KeyWobbleTime;
21 extern bit NewKeyFlag;
22 extern unsigned char makecode;
23 extern unsigned char KeyT;
24 extern unsigned int testtime;
25
26 void INT_S(void) interrupt S_VECTOR
27 {
28 1 //設計思想:當接收第一個數據時,判斷是否是本機的地址數據,如果不是,SM2=1,因主機后來數據的TB8=0,數據再不會接
-收,除非主機發(fā)送新的一楨;//
29 1 //如果是本機地址,SM2=0,開始計時,保證6ms內把數據接收完,否則接受數據全部清除//
30 1 unsigned char dat_temp;
31 1 if(RI)
32 1 {
33 2 RI=0;
34 2 dat_temp=SBUF;
35 2 }
36 1 else if(TI)
37 1 {
38 2 TI=0;
39 2 }
40 1 }
41 void INT_TO()interrupt TI0_VECTOR//1ms interrupt
42 {
43 1 TL0=T0_L;
44 1 TH0=T0_H;
45 1 if(KeyT>0)
46 1 KeyT--;
47 1 // if(testtime>0)
48 1 // testtime--;
49 1 //===============鍵盤掃描
50 1 if(KeyT==0)
51 1 {
52 2 if(!ReadKeyOnceFlag)
53 2 {
54 3 P1|=0x3f;//P10,P11,P12,P13,P14,P15口線置高
C51 COMPILER V7.50 INT 02/06/2009 10:34:28 PAGE 2
55 3 P2=0;//P2口拉低
56 3 DatTemp11=P1&0x3f;//讀取P10,P11,P12,P13,P14,P15口狀態(tài)
57 3 //if(DatTemp11==0x3f)
58 3 // NewKeyFlag=0;//取消上次按鍵標志
59 3 P2=0xff;//把P2口拉高
60 3 P1&=0xc0;//P10,P11,P12,P13,P14,P15口線拉低
61 3 DatTemp22=P2;//讀取P2口狀態(tài)
62 3 //if(DatTemp22==0xff)
63 3 // NewKeyFlag=0;//取消上次按鍵標志
64 3 P1|=0x3f;//P10,P11,P12,P13,P14,P15口線置高
65 3 //20ms去抖動處理
66 3 if((DatTemp1==DatTemp11)&&(DatTemp2==DatTemp22))
67 3 {//兩次讀取的值相同
68 4 if(KeyWobbleTime<30)
69 4 KeyWobbleTime++;
70 4 if((!NewKeyFlag)&&(KeyWobbleTime>=20))//20ms
71 4 {
72 5 ReadKeyOnceFlag=1;//建立一次成功讀取開關標志
73 5 NewKeyFlag=1;//本次按鍵標志
74 5 }
75 4 }
76 3 else
77 3 {//兩次讀取的值不同,可能是抖動,也可能是新的按鍵出現
78 4 DatTemp1=DatTemp11;
79 4 DatTemp2=DatTemp22;
80 4 KeyWobbleTime=0;//重新開始抖動計時
81 4 NewKeyFlag=0;//取消上次按鍵標志
82 4 }
83 3 }
84 2 }
85 1 }
86 void INT_T1()interrupt TI1_VECTOR//20ms interrupt
87 {
88 1 TL1=T1_L;
89 1 TH1=T1_H;
90 1 if(SomeKeyKeepFlag)
91 1 {
92 2 SomeKeyKeepTime++;
93 2 }
94 1 }
95
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 127 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
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 + -