⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.s

📁 AVRkaifashili.rar
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbsym r m 20 c
	.dbend
	.dbfunc e Pre_Inform _Pre_Inform fV
;              i -> R20
;              m -> R20
	.even
_Pre_Inform::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 113
; 
; void Pre_Inform(uchar m)               //报站 
; {uchar i;
	.dbline 114
;  if(Pst_Flag) Snd_Pre_Info[1]=m;       //若为上行方向,顺序预报站
	lds R2,_Pst_Flag
	tst R2
	breq L39
	.dbline 114
	sts _Snd_Pre_Info+1,R20
	rjmp L40
L39:
	.dbline 115
;  else		  Snd_Pre_Info[1]=17-m;	   //逆序预报站
	ldi R24,17
	sub R24,R20
	sts _Snd_Pre_Info+1,R24
L40:
	.dbline 116
;  Set_PD(1);				               //语音芯片复位
	ldi R16,1
	rcall _Set_PD
	.dbline 117
;  delay(20000);
	ldi R16,20000
	ldi R17,78
	rcall _delay
	.dbline 118
;  Set_PD(0); 
	clr R16
	rcall _Set_PD
	.dbline 119
;  for(i=0;i<3;i++)
	clr R20
	rjmp L46
L43:
	.dbline 120
	.dbline 120
	ldi R24,<_Snd_Pre_Info
	ldi R25,>_Snd_Pre_Info
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _Seek_Segment
	.dbline 121
	rcall _Play
	.dbline 121
L44:
	.dbline 119
	inc R20
L46:
	.dbline 119
	cpi R20,3
	brlo L43
	.dbline -2
	.dbline 122
;  {Seek_Segment(Snd_Pre_Info[i]);	   //搜索相应语音信息段
;   Play();}							   //播放
; }
L38:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r m 20 c
	.dbend
	.dbfunc e Special _Special fV
;              m -> R20
	.even
_Special::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 125
; 
; void Special(uchar m)                  //播放特殊信息
; {Set_PD(1);				               //语音芯片复位
	.dbline 125
	ldi R16,1
	rcall _Set_PD
	.dbline 126
;  delay(20000);
	ldi R16,20000
	ldi R17,78
	rcall _delay
	.dbline 127
;  Set_PD(0);
	clr R16
	rcall _Set_PD
	.dbline 128
;  Seek_Segment(Snd_Spec[m]);		       //搜索相应语音信息段
	ldi R24,<_Snd_Spec
	ldi R25,>_Snd_Spec
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _Seek_Segment
	.dbline 129
;  Play();							   //播放
	rcall _Play
	.dbline -2
	.dbline 130
; }
L47:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r m 20 c
	.dbend
	.dbfunc e Welcome _Welcome fV
	.even
_Welcome::
	.dbline -1
	.dbline 133
; 
; void Welcome()                         //欢迎信息
; {Set_PD(1);				               //语音芯片复位
	.dbline 133
	ldi R16,1
	rcall _Set_PD
	.dbline 134
;  delay(20000);
	ldi R16,20000
	ldi R17,78
	rcall _delay
	.dbline 135
;  Set_PD(0); 
	clr R16
	rcall _Set_PD
	.dbline 136
;  Seek_Segment(Snd_Welc);		       //搜索相应语音信息段
	lds R16,_Snd_Welc
	rcall _Seek_Segment
	.dbline 137
;  Play();						       //播放
	.dbline -2
	.dbline 138
; }
L48:
	.dbline 0 ; func end
	rjmp _Play
	.dbend
	.dbfunc e Set_SCL _Set_SCL fV
;              i -> R16
	.even
_Set_SCL::
	.dbline -1
	.dbline 142
; 
; //****************************I2C驱动程序****************************//
; void Set_SCL(uchar i)                  //定义MAX6959时钟线为PA^7
; {if(i)   PORTA |=0x80;
	.dbline 142
	tst R16
	breq L50
	.dbline 142
	sbi 0x1b,7
	rjmp L51
L50:
	.dbline 143
	in R24,0x1b
	andi R24,127
	out 0x1b,R24
L51:
	.dbline -2
	.dbline 144
;  else    PORTA &=0x7f;
; }
L49:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Set_SDA _Set_SDA fV
;              i -> R16
	.even
_Set_SDA::
	.dbline -1
	.dbline 147
;  
; void Set_SDA(uchar i)                  //定义MAX6959数据线为PA^6
; {if(i)   PORTA |=0x40;
	.dbline 147
	tst R16
	breq L53
	.dbline 147
	sbi 0x1b,6
	rjmp L54
L53:
	.dbline 148
	in R24,0x1b
	andi R24,191
	out 0x1b,R24
L54:
	.dbline -2
	.dbline 149
;  else    PORTA &=0xbf;
; }
L52:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Start _Start fV
	.even
_Start::
	.dbline -1
	.dbline 152
; 
; void Start()                           //I2C总线的开始条件
; {Set_SDA(1);	                       //SDA=1;
	.dbline 152
	ldi R16,1
	rcall _Set_SDA
	.dbline 153
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 154
;  delay(100);	                       //等待时钟信号变高
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 155
;  Set_SDA(0);	                       //SDA=0;
	clr R16
	rcall _Set_SDA
	.dbline 156
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 157
;  Set_SCL(0);	                       // SCL=0;
	clr R16
	.dbline -2
	.dbline 158
; }
L55:
	.dbline 0 ; func end
	rjmp _Set_SCL
	.dbend
	.dbfunc e Stop _Stop fV
	.even
_Stop::
	.dbline -1
	.dbline 161
; 
; void Stop()                            //I2C总线结束条件
; {Set_SDA(0);	                       //SDA=0;
	.dbline 161
	clr R16
	rcall _Set_SDA
	.dbline 162
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 163
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 164
;  delay(100);	                       //等待时钟信号变低
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 165
;  Set_SDA(1);	                       //SDA=1;
	ldi R16,1
	rcall _Set_SDA
	.dbline 166
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 167
;  Set_SCL(0);	                       //SCL=0;
	clr R16
	.dbline -2
	.dbline 168
; }
L56:
	.dbline 0 ; func end
	rjmp _Set_SCL
	.dbend
	.dbfunc e Ack _Ack fV
	.even
_Ack::
	.dbline -1
	.dbline 171
; 
; void Ack()                             //I2C总线应答
; {Set_SDA(0);	                       //SDA=0;
	.dbline 171
	clr R16
	rcall _Set_SDA
	.dbline 172
;  delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 173
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 174
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 175
;  Set_SCL(0);	                       //SCL=0;
	clr R16
	rcall _Set_SCL
	.dbline 176
;  delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 177
;  Set_SDA(1);	                       //SDA=1;
	ldi R16,1
	.dbline -2
	.dbline 178
; }
L57:
	.dbline 0 ; func end
	rjmp _Set_SDA
	.dbend
	.dbfunc e Nack _Nack fV
	.even
_Nack::
	.dbline -1
	.dbline 181
; 
; void Nack()                            //I2C总线应答非
; {Set_SDA(1);	                       //SDA=1;
	.dbline 181
	ldi R16,1
	rcall _Set_SDA
	.dbline 182
;  delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 183
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 184
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 185
;  Set_SCL(0);	                       //SCL=0;
	clr R16
	rcall _Set_SCL
	.dbline 186
;  delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 187
;  Set_SDA(0);	                       //SDA=0;
	clr R16
	.dbline -2
	.dbline 188
; }
L58:
	.dbline 0 ; func end
	rjmp _Set_SDA
	.dbend
	.dbfunc e Check_Ack _Check_Ack fV
	.even
_Check_Ack::
	.dbline -1
	.dbline 191
; 
; void Check_Ack()                       //I2C总线应答检查
; {Set_SDA(1);	                       //SDA=1;
	.dbline 191
	ldi R16,1
	rcall _Set_SDA
	.dbline 192
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 193
;  Ack_Flag=0;	                       //清除应答标志;
	clr R2
	sts _Ack_Flag,R2
	.dbline 194
;  DDRA&=0xbf; 	                       //设置SDA为输入
	in R24,0x1a
	andi R24,191
	out 0x1a,R24
	.dbline 195
;  if(!((PINA & 0x40)>>6))
	in R24,0x19
	andi R24,64
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	tst R24
	brne L60
	.dbline 196
;    {delay(50);
	.dbline 196
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 197
;     Set_SCL(0);	                       //SCL=0;
	clr R16
	rcall _Set_SCL
	.dbline 198
;     delay(100);}
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 198
	rjmp L61
L60:
	.dbline 200
;  else
;    {Ack_Flag=1;	                       //收到应答;
	.dbline 200
	ldi R24,1
	sts _Ack_Flag,R24
	.dbline 201
;     delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 202
;     Set_SCL(0);	                       //SCL=0;
	clr R16
	rcall _Set_SCL
	.dbline 203
;     delay(100);}
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 203
L61:
	.dbline 204
;  DDRA |=0xff; 	                       //重新设置SDA为输出	 
	in R24,0x1a
	ori R24,255
	out 0x1a,R24
	.dbline -2
	.dbline 205
; }
L59:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Write_Bit0 _Write_Bit0 fV
	.even
_Write_Bit0::
	.dbline -1
	.dbline 208
; 
; void Write_Bit0()                      //写1bit数据:0    
; {Set_SDA(0);	                       //SDA=0;
	.dbline 208
	clr R16
	rcall _Set_SDA
	.dbline 209
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 210
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 211
;  Set_SCL(0);	                       //SCL=0;
	clr R16
	.dbline -2
	.dbline 212
; }
L62:
	.dbline 0 ; func end
	rjmp _Set_SCL
	.dbend
	.dbfunc e Write_Bit1 _Write_Bit1 fV
	.even
_Write_Bit1::
	.dbline -1
	.dbline 215
; 
; void Write_Bit1()                      //写1bit数据:1       
; {Set_SDA(1);	                       //SDA=1;
	.dbline 215
	ldi R16,1
	rcall _Set_SDA
	.dbline 216
;  Set_SCL(1);	                       //SCL=1;
	ldi R16,1
	rcall _Set_SCL
	.dbline 217
;  delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 218
;  Set_SCL(0);	                       //SCL=0;
	clr R16
	rcall _Set_SCL
	.dbline 219
;  Set_SDA(0);	                       //SDA=0;
	clr R16
	.dbline -2
	.dbline 220
; }
L63:
	.dbline 0 ; func end
	rjmp _Set_SDA
	.dbend
	.dbfunc e Write_Byte _Write_Byte fV
;              i -> R20
;           Data -> R22
	.even
_Write_Byte::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 223
; 
; void Write_Byte(uchar Data)            //写一字节数据Data  
; {uchar i;
	.dbline 224
;  for(i=0;i<8;i++)
	clr R20
	rjmp L68
L65:
	.dbline 225
;   {if(Data & 0x80)  Write_Bit1();      //传输位从高位到低位,先传最高位 
	.dbline 225
	sbrs R22,7
	rjmp L69
	.dbline 225
	rcall _Write_Bit1
	rjmp L70
L69:
	.dbline 226
;    else             Write_Bit0();
	rcall _Write_Bit0
L70:
	.dbline 227
	lsl R22
	.dbline 227
L66:
	.dbline 224
	inc R20
L68:
	.dbline 224
	cpi R20,8
	brlo L65
	.dbline -2
	.dbline 228
;    Data <<=1;}                         //数据左移             
; }
L64:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Data 22 c
	.dbend
	.dbfunc e Read_Byte _Read_Byte fc
;              j -> R20
;      Read_Data -> R22
	.even
_Read_Byte::
	rcall push_gset2
	.dbline -1
	.dbline 231
; 
; uchar Read_Byte()                      //读一字节数据:返回值即读的数据           
; {uchar Read_Data=0xff;		           // Read_Data为读入的数据,初始值为0xff
	.dbline 231
	ldi R22,255
	.dbline 233
;  uchar j;
;  for (j=0;j<8;j++)
	clr R20
	rjmp L75
L72:
	.dbline 234
;   {Set_SDA(1);	   
	.dbline 234
	ldi R16,1
	rcall _Set_SDA
	.dbline 235
;    Set_SCL(1);	   
	ldi R16,1
	rcall _Set_SCL
	.dbline 236
;    DDRA &=0xbf;	   
	in R24,0x1a
	andi R24,191
	out 0x1a,R24
	.dbline 237
;    if((PINA & 0x40)==0)
	sbic 0x19,6
	rjmp L76
	.dbline 238
;      {Read_Data <<=1;
	.dbline 238
	lsl R22
	.dbline 239
;       Read_Data=(Read_Data & 0xfe);                 
	andi R22,254
	.dbline 240
;       Set_SCL(0);}
	clr R16
	rcall _Set_SCL
	.dbline 240
	rjmp L77
L76:
	.dbline 242
;    else 
;     {Read_Data <<=1;
	.dbline 242
	lsl R22
	.dbline 243
;      Read_Data =( Read_Data  | 0x01);
	ori R22,1
	.dbline 244
	clr R16
	rcall _Set_SCL
	.dbline 244
L77:
	.dbline 244
L73:
	.dbline 233
	inc R20
L75:
	.dbline 233
	cpi R20,8
	brlo L72
	.dbline 245
;      Set_SCL(0);}}
;  DDRA |=0x40;		              
	sbi 0x1a,6
	.dbline 246
;  return(Read_Data);               
	mov R16,R22
	.dbline -2
L71:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r Read_Data 22 c
	.dbend
	.dbfunc e Write_1byte _Write_1byte fV
;           Data -> R20
;        Address -> R22
;          Slave -> R10
	.even
_Write_1byte::
	rcall push_gset3
	mov R22,R18
	mov R10,R16
	ldd R20,y+6
	.dbline -1
	.dbline 252
; }
; 
; //***************************写一字节数据****************************//
; //向从地址为Slave的IIC器件的Address地址写一字节数据Data
; void Write_1byte(uchar Slave,uchar Address,uchar Data)
; {Start();		                       //开始
	.dbline 252
	rcall _Start
	.dbline 253
;  Write_Byte(Slave);		               //写I2C器件地址
	mov R16,R10
	rcall _Write_Byte
L79:
	.dbline 254
;  do Check_Ack();		               //检查应答位
	rcall _Check_Ack
L80:
	.dbline 255
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L79
	.dbline 256
;  Write_Byte(Address);                  //送寄存器地址
	mov R16,R22
	rcall _Write_Byte
L82:
	.dbline 257
;  do Check_Ack();		               //检查应答位
	rcall _Check_Ack
L83:
	.dbline 258
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L82
	.dbline 259
;  Write_Byte(Data);		               //写入一字节数据
	mov R16,R20
	rcall _Write_Byte
L85:
	.dbline 260
;  do Check_Ack();                       //检查应答位
	rcall _Check_Ack
L86:
	.dbline 261

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -