📄 isd4004.lst
字号:
C51 COMPILER V8.02 ISD4004 06/02/2008 11:06:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ISD4004
OBJECT MODULE PLACED IN ISD4004.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ISD4004.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <main.H>
2
3 /*ISD命令定义*/
4 #define powerup 0x20//上电,等待TPUD后器件可以工作
5 #define setplay 0xe0//从指定位置放音,后面必有跟PLAY指令
6 #define play 0xf0//从当前地址放音,直到EOM或OVF
7 #define setrec 0xa0//从指定位置录音,后面必有跟REC指令
8 #define rec 0xb0//从当前地址放音,直到停止或OVF
9 #define setmc 0xe8//快进,未用
10 #define mc 0xf8//快进,未用
11 #define stop 0x30//停止当前操作
12 #define stoppw 0x10//停止当前操作并掉电
13 #define RINT 0x30//读状态:OVF和EOM
14
15 sbit SCLK=P2^0; //写时钟
16 sbit SS=P2^1; //片选
17 sbit MOSI=P2^2; //串行数据输入端
18 sbit MISO=P2^3; //串行数据输出端
19
20 sbit INT=P3^2; //INT0(P3.2),录满整个芯片信号
21 sbit RAC=P3^4; //从T0(P3.4)输入,用来计算行地址
22
23 void delay(unsigned int a)
24 {
25 1 while(a--);
26 1 }
27 void Write_ISDaddress(unsigned int a)//写入16位的地址, 从低位,到高位
28 {
29 1 unsigned char i;
30 1 SCLK=0;
31 1 for(i=0;i<16;i++)
32 1 {
33 2 if(a&0x0001)
34 2 MOSI=1;
35 2 else
36 2 MOSI=0;
37 2 delay(4); //数据setup time200nS最少
38 2 SCLK=1; //上升沿写入数据
39 2 delay(8); //SCLK高电平最少400ns
40 2 SCLK=0;
41 2 delay(8); //SCLK低电平最少保持400ns
42 2 a=a>>1;
43 2 }
44 1 }
45 void Write_ISDcommand(unsigned char a)//写8位的命令码,从低位,到高位
46 {
47 1 unsigned char i;
48 1 SCLK=0;
49 1 for(i=0;i<8;i++)
50 1 {
51 2 if(a&0x01)
52 2 MOSI=1;
53 2 else
54 2 MOSI=0;
55 2 delay(4); //数据setup time200nS最少
C51 COMPILER V8.02 ISD4004 06/02/2008 11:06:07 PAGE 2
56 2 SCLK=1; //上升沿写入数据
57 2 delay(8); //SCLK高电平最少400ns
58 2 SCLK=0;
59 2 delay(8); //SCLK低电平最少保持400ns
60 2 a=a>>1;
61 2 }
62 1 }
63 void ISD_PowerUp(void)//上电命令
64 {
65 1 SS=0; //写数据开始于SS的下降沿
66 1 delay(10);//SS先拉低,500nS最少
67 1 Write_ISDaddress(0x0000);
68 1 Write_ISDcommand(powerup);//0x20
69 1 SS=1; //数据传输结束于SS上升沿
70 1 delay(15000);//SS高电平最少1uS
71 1 }
72 void play4004(unsigned int address)//
73 {
74 1 ISD_PowerUp();
75 1 SS=0; //写数据开始于SS的下降沿
76 1 delay(10);//SS先拉低,500nS最少
77 1 Write_ISDaddress(address);
78 1 Write_ISDcommand(0xe0); //setplay==0xe0;
79 1 SS=1; //两指令之间为高
80 1 delay(15000);//SS高电平最少1uS
81 1 SS=0; //写数据开始于SS的下降沿
82 1 delay(10);//SS先拉低,500nS最少
83 1 Write_ISDaddress(address);
84 1 Write_ISDcommand(0xf0); //play==0xf0;
85 1 SS=1; //数据传输结束于SS上升沿
86 1 delay(15000);//SS高电平最少1uS
87 1 }
88 void record4004(unsigned int address)
89 {
90 1 ISD_PowerUp();
91 1 ISD_PowerUp();
92 1 SS=0; //写数据开始于SS的下降沿
93 1 delay(10);//SS先拉低,500nS最少
94 1 Write_ISDaddress(address);
95 1 Write_ISDcommand(0xa0); //setrec==0xa0;
96 1 SS=1; //两指令之间为高
97 1 delay(15000);//SS高电平最少1uS
98 1 SS=0; //写数据开始于SS的下降沿
99 1 delay(10);//SS先拉低,500nS最少
100 1 Write_ISDaddress(address);
101 1 Write_ISDcommand(0xb0); //rec==0xb0;
102 1 SS=1; //数据传输结束于SS上升沿
103 1 delay(15000);//SS高电平最少1uS
104 1 }
105 void stopISD(void)
106 {
107 1 SS=0; //写数据开始于SS的下降沿
108 1 delay(10);//SS先拉低,500nS最少
109 1 Write_ISDaddress(0x0000);
110 1 Write_ISDcommand(0x30); //stop==0x30;
111 1 SS=1; //数据传输结束于SS上升沿
112 1 delay(15000);//SS高电平最少1uS
113 1 }
114 void PowrnDownISD(void)
115 {
116 1 SS=0; //写数据开始于SS的下降沿
117 1 delay(10);//SS先拉低,500nS最少
C51 COMPILER V8.02 ISD4004 06/02/2008 11:06:07 PAGE 3
118 1 Write_ISDaddress(0x0000);
119 1 Write_ISDcommand(stoppw); //0x10;
120 1 SS=1; //数据传输结束于SS上升沿
121 1 delay(15000);//SS高电平最少1uS
122 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 267 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -