?? 8-isd4004.lst
字號:
C51 COMPILER V6.20c 8_ISD4004 09/02/2001 15:00:12 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE 8_ISD4004
OBJECT MODULE PLACED IN 8-isd4004.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 8-isd4004.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2
3 sbit SS=P1^0; //片選
4 sbit SCLK=P1^1; //ISD4004時鐘
5 sbit MOSI=P1^2; //數據輸入
6 sbit MISO=P1^3; //數據輸出
7 sbit LED=P1^7; //指示燈
8 sbit AN=P1^6; //執行
9 sbit STOP=P1^5; //復位
10 sbit PR=P1^4; //PR=1錄音,PR=0放音
11 sbit INT=P3^4; //中斷
12
13 void YS50();
14 void ISDX(unsigned char d);
15 void UP();
16 void STOPP();
17 void DSTOP();
18
19 main()
20 {
21 1 unsigned char delay; //延時參數
22 1 unsigned char isdl,isdh; //ISD高低位
23 1 unsigned char n1;
24 1
25 1 SP=0x10;
26 1 P0=0xFF;
27 1 P1=0xFF;
28 1 P2=0xFF;
29 1 P3=0xFF;
30 1 EA=0;
31 1 lab1:
32 1 LED=1; //關指示燈
33 1 DSTOP(); //ISD掉電
34 1 delay=200;
35 1 while(AN); //等按AN鍵
36 1 while(delay--); //延時
37 1 UP(); //ISD上電
38 1 isdl=isdh=0; //ISD高低位地址置0
39 1 if(PR) //PR=1 錄音
40 1 {
41 2 ISDX(isdl);
42 2 ISDX(isdl);
43 2 ISDX(isdh);
44 2 SS=1;
45 2 b1:
46 2 n1=10;
47 2 while(n1--)
48 2 YS50();
49 2 LED=0;
50 2 ISDX(0xB0);
51 2 SS=1;
52 2 if(INT)
53 2 {
54 3 while(!AN);
55 3 n1=200;
C51 COMPILER V6.20c 8_ISD4004 09/02/2001 15:00:12 PAGE 2
56 3 while(n1--);
57 3 LED=1; //關指示燈
58 3 STOPP(); //停止當前操作
59 3 if(STOP)
60 3 {
61 4 while(!AN);
62 4 STOPP();
63 4 goto b1;
64 4 }
65 3 }
66 2 else
67 2 {
68 3 b2:
69 3 LED=1;
70 3 n1=15;
71 3 while(!AN)
72 3 {
73 4 while(!n1--)
74 4 YS50();
75 4 LED=0;
76 4 n1=15;
77 4 while(!AN)
78 4 {
79 5 while(!n1--)
80 5 YS50();
81 5 goto b2;
82 5 }
83 4 }
84 3 }
85 2 }
86 1 else //PR=0 放音
87 1 {
88 2 while(!AN);
89 2 ISDX(isdl);
90 2 ISDX((isdh|0xE0)&0xE7);
91 2 SS=1;
92 2 b3:
93 2 LED=0;
94 2 ISDX(0xF0);
95 2 SS=1;
96 2 if(STOP)
97 2 {
98 3 while(INT);
99 3 LED=1;
100 3 STOPP();
101 3 SS=0;
102 3 SCLK=0;
103 3 SCLK=1;
104 3 if(!MISO)
105 3 {
106 4 SCLK=0;
107 4 SS=1;
108 4 STOPP();
109 4 if(STOP)
110 4 {
111 5 while(!AN);
112 5 goto b3;
113 5 }
114 4 }
115 3 }
116 2 }
117 1 SCLK=0;
C51 COMPILER V6.20c 8_ISD4004 09/02/2001 15:00:12 PAGE 3
118 1 SS=1;
119 1 STOPP();
120 1 goto lab1;
121 1 }
122
123 /*ISD4004芯片驅動*/
124 /********************************50mS延時*********************************/
125 void YS50()
126 {
127 1 TMOD=1;
128 1 TH0=0x3C; //50mS延時初值置入
129 1 TL0=0xB0;
130 1 TR0=1;
131 1 while(!TF0);
132 1 TF0=0;
133 1 TR0=0;
134 1 }
135 /*ISD3300.4003 SPI寫入程序*/
136 void ISDX(unsigned char d)
137 {
138 1 unsigned char i,j;
139 1 SS=0; //開片選
140 1 SCLK=0; //時鐘SCLK=0
141 1 j=d;
142 1 for(i=0;i<8;i++)
143 1 {
144 2 if(j&0x01) //數據寫 MOSI
145 2 MOSI=1;
146 2 else
147 2 MOSI=0;
148 2 SCLK=1; //時鐘SCLK=1
149 2 j=j>>1;
150 2 SCLK=0; //時鐘SCLK=0
151 2 }
152 1 }
153
154 /*ISD上電*/
155 void UP()
156 {
157 1 ISDX(20); //發00100XXXXXXXXXXX
158 1 SS=1; //關片選
159 1 YS50(); //50mS延時
160 1 YS50(); //50mS延時
161 1 }
162
163 /*停止當前操作*/
164 void STOPP()
165 {
166 1 ISDX(30); //發 0X110XXX
167 1 SS=1; //關片選
168 1 YS50(); //50mS延時
169 1 YS50(); //50mS延時
170 1 }
171
172 /*停止當前操作掉電*/
173 void DSTOP()
174 {
175 1 ISDX(10); //發0X010XXXXXXXXXX
176 1 SS=1; //關片選
177 1 YS50(); //50mS延時
178 1 YS50(); //50mS延時
179 1 }
C51 COMPILER V6.20c 8_ISD4004 09/02/2001 15:00:12 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 308 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
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 + -