?? shiyan4.lst
字號:
C51 COMPILER V6.12 SHIYAN4 03/31/2008 20:54:33 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE SHIYAN4
OBJECT MODULE PLACED IN .\shiyan4.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\shiyan4.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
4 0xef,0xdf,0xbf,0x7f};
5 unsigned char code displaycode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
6 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x40};
7 unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
8 25,28,31,34,38,41,44,48,
9 50,53,56,59,63,66,69,72,
10 75,78,81,84,88,91,94,97};
11 unsigned char displaycount;
12 unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
13 unsigned char timecount;
14 unsigned char readdata[8];
15 sbit DQ=P0^1;
16 bit sflag;
17 bit resetpulse(void) //復位子程序
18 {
19 1 unsigned char i;
20 1 DQ=0;
21 1 for(i=255;i>0;i--);
22 1 DQ=1;
23 1 for(i=60;i>0;i--);
24 1 return(DQ);
25 1 for(i=200;i>0;i--);
26 1 }
27 void writecommandtods18b20(unsigned char command) //寫ds18b20的命令控制字
28 {
29 1 unsigned char i;
30 1 unsigned char j;
31 1 for(i=0;i<8;i++)
32 1 {
33 2 if((command & 0x01)==0)
34 2 {
35 3 DQ=0; //寫0
36 3 for(j=35;j>0;j--);
37 3 DQ=1;
38 3 }
39 2 else
40 2 {
41 3 DQ=0;
42 3 for(j=2;j>0;j--); //寫1
43 3 DQ=1;
44 3 for(j=33;j>0;j--);
45 3 }
46 2 command=_cror_(command,1); //command的值循環右移一位
47 2 }
48 1 }
49
50
51 unsigned char readdatafromds18b20(void)
52 {
53 1 unsigned char i;
54 1 unsigned char j;
55 1 unsigned char temp;
C51 COMPILER V6.12 SHIYAN4 03/31/2008 20:54:33 PAGE 2
56 1 temp=0;
57 1 for(i=0;i<8;i++)
58 1 {
59 2 temp=_cror_(temp,1); //將讀入的一位值右移一位;因為ds18b20傳數值時是低位在前
60 2 DQ=0;
61 2 _nop_();
62 2 _nop_();
63 2 DQ=1;
64 2 for(j=10;j>0;j--);
65 2 if(DQ==1)
66 2 {
67 3 temp=temp | 0x80; //讀入1
68 3 }
69 2 else
70 2 {
71 3 temp=temp | 0x00; //讀入0
72 3 }
73 2 for(j=200;j>0;j--);
74 2 }
75 1 return(temp);
76 1 }
77
78
79 void main(void)
80 {
81 1 TMOD=0x01;
82 1 TH0=(65536-4000)/256; //定時4ms
83 1 TL0=(65536-4000)%256;
84 1 ET0=1;
85 1 EA=1;
86 1 while(resetpulse());
87 1 writecommandtods18b20(0xcc); //跳躍ROM命令,同時訪問總路線上所有的從機設備
88 1 writecommandtods18b20(0x44); //啟動溫度轉換命令
89 1 TR0=1;
90 1 while(1)
91 1 {
92 2 ;
93 2 }
94 1 }
95
96
97 void t0(void) interrupt 1 using 0
98 {
99 1 unsigned char x;
100 1 unsigned int result;
101 1 TH0=(65536-4000)/256;
102 1 TL0=(65536-4000)%256;
103 1 if(displaycount==2)
104 1 {
105 2 P2=displaycode[displaybuf[displaycount]] | 0x80;
106 2 }
107 1 else
108 1 {
109 2 P2=displaycode[displaybuf[displaycount]];
110 2 }
111 1 P0=displaybit[displaycount];
112 1 displaycount++;
113 1 if(displaycount==8)
114 1 {
115 2 displaycount=0;
116 2 }
117 1
C51 COMPILER V6.12 SHIYAN4 03/31/2008 20:54:33 PAGE 3
118 1 timecount++;
119 1 if(timecount==150)
120 1 {
121 2 timecount=0;
122 2 while(resetpulse());
123 2 writecommandtods18b20(0xcc);
124 2 writecommandtods18b20(0xbe); //寫CCH后寫BEH應用于單節點系統
125 2 readdata[0]=readdatafromds18b20();
126 2 readdata[1]=readdatafromds18b20();
127 2 for(x=0;x<8;x++)
128 2 {
129 3 displaybuf[x]=16;
130 3 }
131 2 sflag=0;
132 2 if((readdata[1] & 0xf8)!=0x00)
133 2 {
134 3 sflag=1;
135 3 readdata[1]=~readdata[1];
136 3 readdata[0]=~readdata[0];
137 3 result=readdata[0]+1;
138 3 readdata[0]=result;
139 3 if(result>255)
140 3 {
141 4 readdata[1]++;
142 4 }
143 3 }
144 2 readdata[1]=readdata[1]<<4;
145 2 readdata[1]=readdata[1] & 0x70;
146 2 x=readdata[0];
147 2 x=x>>4;
148 2 x=x & 0x0f;
149 2 readdata[1]=readdata[1] | x;
150 2 x=2;
151 2 result=readdata[1];
152 2 while(result/10)
153 2 {
154 3 displaybuf[x]=result;
155 3 result=result/10;
156 3 x++;
157 3 }
158 2 displaybuf[x]=result;
159 2 if(sflag==1)
160 2 {
161 3 displaybuf[x+1]=17;
162 3 }
163 2 x=readdata[0] & 0x0f;
164 2 x=x<<1;
165 2 displaybuf[0]=(dotcode[x]);
166 2 displaybuf[1]=(dotcode[x])/10;
167 2 while(resetpulse());
168 2 writecommandtods18b20(0xcc);
169 2 writecommandtods18b20(0x44);
170 2 }
171 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 423 ----
CONSTANT SIZE = 58 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 2
C51 COMPILER V6.12 SHIYAN4 03/31/2008 20:54:33 PAGE 4
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 + -