📄 sfunc.lst
字号:
C51 COMPILER V7.06 SFUNC 05/13/2004 15:25:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SFUNC
OBJECT MODULE PLACED IN Sfunc.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Sfunc.c ROM(COMPACT)
stmt level source
1 #include<reg51.h>
2 //#include <intrins.h>
3 //------------------------------------------
4 #define true unsigned char 1
5 #define false unsigned char 0
6 //#define COUNT 10/*DELAY 10*COUNT ms*/
7 /*----------------------------------------*/
8 extern void OnError(char ErrorN);
9 void delayms(unsigned int x);
10 unsigned char Ack_call(void);
11 /*--------全局变量区----------------------*/
12 bit Flag_t=0;
13 int Flag_Count=0;///*DELAY 10*COUNT ms*/
14 /*----------------------------------------*/
15 /*serial communicaton initial8*/
16 void init_s(void)//串口工作时T1不能再用。
17 {
18 1 TMOD=0X20;//定时器T1工作于自动装载模式
19 1 TH1=0XE8;//1200BPS
20 1 TL1=0XE8;
21 1 PCON=0X00; /*SMOD=0;*/
22 1 SCON=0X50;/*方式1且允许接收*/
23 1 TR1=1;//定时器开始工作
24 1 }
25 /*函数功能:在内存Address处进行长度为n的数据填充,填充数据为i*/
26 void init_m(char data *Address,unsigned char n,unsigned char j)
27 {
28 1 unsigned char i=0;
29 1 //Address=0x30;
30 1 for (i=0;i<n;i++)
31 1 {
32 2 *Address=j;
33 2 Address++;
34 2 }
35 1 }
36 /*TIMER0 Initial*/
37 void init_t0(void)
38 {
39 1 TMOD=TMOD|0X21;/*保持TMOD的定时器1的原始设置,又开启T0。*/
40 1 TH0=0xdc;/*10MS interrupt delay*/
41 1 TL0=0x00;
42 1 EA=1;
43 1 ET0=0;/*enable it if want to work*!!!!*/
44 1 TR0=0;
45 1 }
46 /*----------------------interrupt program----------------------*/
47 void int_t0(void) interrupt 1
48 {
49 1 static int n=0;
50 1 TH0=0xdc;/*10MS interrupt delay*/
51 1 TL0=0x00;
52 1 n+=1;/*not best*/
53 1 if (n==Flag_Count)
54 1 {
55 2 TR0=0;
C51 COMPILER V7.06 SFUNC 05/13/2004 15:25:57 PAGE 2
56 2 ET0=0;
57 2 Flag_t=1;
58 2 n=0;
59 2 }
60 1 }
61 //---------------------------------------------------------
62 /*ack flame*/
63 //输入接收等待时间,输出接收值
64 unsigned char Ack_call(void)//专供Ack调用,以缩短程序。
65 {
66 1 unsigned char j;
67 1 ET0=1;//---------------!!
68 1 TR0=1;
69 1 while (RI==0&&Flag_t==0);/*接收到信号或时间到10*Flag_COUNT ms退出等待*/
70 1 RI=0;
71 1 ET0=0;
72 1 TR0=0;
73 1 Flag_Count=0;
74 1 j=SBUF;//如果J没接收到数据,则会和i的数据一样
75 1 if (Flag_t==1) j=0xf1;
76 1 Flag_t=0;
77 1 return(j);
78 1 }
79 bit Ack(void)
80 {
81 1 unsigned char i;
82 1 Flag_Count=200;//一次等2s.
83 1 i= Ack_call();//
84 1 if(i==0x63)/*ASCII:c*/
85 1 return(1);
86 1 else return(0);//凡是收不到63的情况,包括掉包、传错都重传3次。
87 1 }
88
89 /*hand to hand function,send 0x54,recieve0x63,if have wrong,重发3次*/
90 bit hd2hd(void)
91 {
92 1 unsigned char i;
93 1 for(i=0;i<3;i++)
94 1 {
95 2 SBUF=0X54;//SEND T
96 2 while(TI==0);TI=0;/*don't set breakpoint here*/
97 2 if (Ack()==1) return(1);
98 2 delayms(300);//等待300MS,使计算机有时间反映
99 2 }
100 1
101 1 return(0);
102 1 }
103 /*函数功能:从Adrress处发送n个数据*/
104 void Send_Data( char data *Adrress,unsigned char n)
105 {
106 1 unsigned char pf=0;
107 1 unsigned char i;
108 1 SBUF=0X55;/*起始位55*/
109 1 while(TI==0);TI=0;
110 1 SBUF=n;/*data lenth*/
111 1 while(TI==0);TI=0;
112 1 pf=0;
113 1 for (i=0;i<n;i++)
114 1 {
115 2 unsigned char m;///SBUF的值不定!!
116 2 SBUF=*Adrress;///发送完才变为当前数
117 2 m=*Adrress;
C51 COMPILER V7.06 SFUNC 05/13/2004 15:25:57 PAGE 3
118 2 Adrress++;
119 2 pf+=m;
120 2 while(TI==0);TI=0;
121 2 }
122 1 SBUF=pf;
123 1 while(TI==0);TI=0;
124 1 }
125 void delayms(unsigned int x)//延时1ms*X
126 {
127 1 unsigned char j;
128 1 while(x--)
129 1 {
130 2 for(j=0;j<125;j++)
131 2 {;}
132 2 }
133 1 }
134
135
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 248 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -