?? wspilm74.lst
字號(hào):
C51 COMPILER V7.05 WSPILM74 02/16/2006 21:22:22 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE WSPILM74
OBJECT MODULE PLACED IN WSPILM74.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WSPILM74.c DB OE
stmt level source
1 //參考程序A : SPI調(diào)試程序 :WSPILM74.c
2 //SPI調(diào)試程序 :WSPILM74.c
3 #include <C8051F020.h>
4 #include <intrins.h>
5 #define PORTA 0x8000 /*8255的A口*/
6 #define PORTB 0x8001 /*8255的B口*/
7 #define PORTC 0x8002 /*8255的C口*/
8 #define PORTCON 0x8003 /*8255的控制口*/
9 typedef unsigned char uchar;
10 typedef unsigned int uint;
11 uint h;
12 uchar xdata *idata Pointm;
13 uchar HMS[6],rr[3],h1,h2,h3,h4,i,j,k0,k1;
14 uchar WE[6]={1,2,4,8,0x10,0x20}; //位選
15 uchar ZI[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
16 0x7c,0x39,0x5e,0x79,0x71,0x40};/*字選:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,-*/
17 void PORT_Init (void);
18 void displayled(void);
19 void delay1ms(uint time){//延遲1ms
20 1 uint ii;
21 1 uint jj;
22 1 for (ii=0;ii<time;ii++){
23 2 for(jj=0;jj<300;jj++);
24 2 }
25 1 }
26 exch(); //數(shù)據(jù)轉(zhuǎn)換
27 void PORT_Init ();
28 void spi_cfg(uchar spicfg,uchar spickr,uchar spicn)//SPI配置函數(shù)
29 {
30 1 SPI0CFG = spicfg; //設(shè)定寄存器SPI0CFG=0C7H
31 1 SPI0CKR = spickr; //設(shè)定寄存器SPI9CKR=27H
32 1 SPI0CN = spicn; //設(shè)定寄存器SPI0CN =03
33 1 EIE1|= 0x01;
34 1 }
35 void config (void) //config function
36 {
37 1 WDTCN = 0xDE; //看門狗禁止
38 1 WDTCN = 0xAD;
39 1 XBR0 = 0x02;/*交叉開關(guān)配置,SPI總線SCK配置到P0.0口,
40 1 MOSI為P0.2口, NSS為P0.3,MISO配置到P0.1口*/
41 1 XBR1 = 0x00;
42 1 XBR2 = 0x40; /*允許功能選擇開關(guān)有效*/
43 1 P0MDOUT = 0x0D;/*SCK、MOSI和NSS為推拉式輸出,MISO為開漏式.*/
44 1 }
45 void main() //主程序
46 {
47 1 PORT_Init ();
48 1 config();
49 1 spi_cfg(0x0C7,0x27,0x03);//設(shè)定寄存器SPI0CFG,SPI0CKR和SPI0CN
50 1 while(1)
51 1 {
52 2 P0=0xff;
53 2 EA=1;
54 2 i=0;
55 2 P0&=0x7f;
C51 COMPILER V7.05 WSPILM74 02/16/2006 21:22:22 PAGE 2
56 2 delay1ms(1);//延時(shí)
57 2 SPI0DAT=0x00;
58 2 //當(dāng)對(duì)SPI0SAT寫數(shù)據(jù)時(shí),產(chǎn)生時(shí)鐘信號(hào),讀入從LM74發(fā)來的高8位數(shù)據(jù)
59 2 delay1ms(2);
60 2 SPI0DAT=0x00;
61 2 //當(dāng)對(duì)SPI0SAT寫數(shù)據(jù)時(shí),產(chǎn)生時(shí)鐘信號(hào),讀入從LM74發(fā)來的低8位數(shù)據(jù)
62 2 delay1ms(2);
63 2 if(i==2){ //已收到16位數(shù)據(jù),就將1-->/CS并轉(zhuǎn)入顯示溫度值的函數(shù).
64 3 P0|=0x80;
65 3 delay1ms(5);
66 3 EA=0; //關(guān)中斷
67 3 exch(); //數(shù)據(jù)處理函數(shù)
68 3 displayled();//顯示溫度值的函數(shù).
69 3 };
70 2 }
71 1 }
72 exch() //數(shù)據(jù)格式轉(zhuǎn)換,將二進(jìn)制轉(zhuǎn)換為十進(jìn)制.
73 { HMS[0]=0;
74 1 h=(256*rr[0]+rr[1])/128;//rr[0]中存放高8位數(shù),rr[1]中存放低8位數(shù)
75 1 if(h>=128) //判別符號(hào)位
76 1 {
77 2 h=-h; //若為負(fù)號(hào),先求補(bǔ)碼
78 2 HMS[0]=0x10;//"-"號(hào)(字形碼: 40H)
79 2 };
80 1
81 1 h1=h/100;
82 1 h2=(h-h1*100)/10;
83 1 h3=(h-h1*100-h2*10);
84 1 HMS[1]=h1;
85 1 HMS[2]=h2;
86 1 HMS[3]=h3;
87 1 HMS[4]=0;
88 1 h1=rr[1]&0x40;//判別0.5度
89 1 if(h1!=0)
90 1 HMS[4]=5;
91 1 HMS[5]=0x0c; //顯示"C"
92 1 }
93
94 void spi_ISR() interrupt 6//SPI中斷
95 { EA=0;
96 1 while(TXBSY);
97 1 SPIF=0;
98 1 rr[i]=SPI0DAT;//由于是全雙工總線,在發(fā)送完一個(gè)字節(jié)時(shí),
99 1 //主機(jī)也收到從機(jī)所發(fā)的數(shù)據(jù)
100 1 i++;
101 1 EA=1;
102 1 }
103 void PORT_Init (void)
104 {
105 1 OSCICN=0x05 ;/*選擇內(nèi)部振蕩器,內(nèi)部振蕩器按IFCN指定的頻率運(yùn)行,
106 1 ;頻率為8MHz*/
107 1 OSCXCN = 0x67; //外部為11.0592MHZ(未采用)
108 1 P74OUT = 0x0ff; /*P7為推拉方式,P4,P5,P6漏極開路*/
109 1 EMI0CF |= 0x2c; /*EMIF工作在地址/數(shù)據(jù)復(fù)用方式,只用外部存儲(chǔ)器,ALE高/低脈寬占1個(gè)SYSCLK周期*/
110 1 EMI0TC |= 0x6d; /*地址建立/保持時(shí)間占0個(gè)SYSCLK周期,/WR和/RD占12個(gè)SYSCLK周期*/
111 1 Pointm=PORTCON; /*8255初始化*/
112 1 *Pointm=0x80;
113 1 }
114 void displayled(void) //顯示六位溫度數(shù)據(jù):-020.5C
115 {unsigned int p;
116 1 unsigned char pp;
117 1 for(j=0;j<6;j++)
C51 COMPILER V7.05 WSPILM74 02/16/2006 21:22:22 PAGE 3
118 1 {
119 2 pp=(HMS[j]); /*轉(zhuǎn)化成數(shù)碼管數(shù)字顯示碼*/
120 2 k0=ZI[pp]; /*查表*/
121 2 Pointm=PORTB; //動(dòng)態(tài)驅(qū)動(dòng)6數(shù)碼管
122 2 k1=WE[j]; /*查表*/
123 2 *Pointm=k1;
124 2 Pointm=PORTC;
125 2 *Pointm=k0+0x80; /*加小數(shù)點(diǎn)*/
126 2 if(k1!=8)
127 2 (*Pointm=k0); /*送顯示碼*/
128 2 for(p=0;p<=1000;p++);
129 2 _nop_();
130 2 }
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 434 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 45 ----
IDATA SIZE = 2 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -