📄 project.lis
字号:
00B6 2220 tst R2
00B8 D9F7 brne L28
00BA .dbline 96
00BA ; EOM_Flag=1; //重新赋EOM标志位为1
00BA 81E0 ldi R24,1
00BC 80930000 sts _EOM_Flag,R24
00C0 .dbline -2
00C0 .dbline 97
00C0 ; }
00C0 L27:
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbend
00C2 .dbfunc e Inform _Inform fV
00C2 ; i -> R20
00C2 ; m -> R20
.even
00C2 _Inform::
00C2 00D0 rcall push_gset1
00C4 402F mov R20,R16
00C6 .dbline -1
00C6 .dbline 101
00C6 ;
00C6 ; //****************************语音报站程序****************************//
00C6 ; void Inform(uchar m) //报站
00C6 ; {uchar i;
00C6 .dbline 102
00C6 ; if(Pst_Flag) Snd_Info[0]=m; //若为上行方向,顺序报站
00C6 20904200 lds R2,_Pst_Flag
00CA 2220 tst R2
00CC 19F0 breq L32
00CE .dbline 102
00CE 40930300 sts _Snd_Info,R20
00D2 04C0 rjmp L33
00D4 L32:
00D4 .dbline 103
00D4 ; else Snd_Info[0]=17-m; //若为下行方向,逆序报站
00D4 81E1 ldi R24,17
00D6 841B sub R24,R20
00D8 80930300 sts _Snd_Info,R24
00DC L33:
00DC .dbline 104
00DC ; Set_PD(1); //语音芯片复位
00DC 01E0 ldi R16,1
00DE A1DF rcall _Set_PD
00E0 .dbline 105
00E0 ; delay(20000);
00E0 00E2 ldi R16,20000
00E2 1EE4 ldi R17,78
00E4 8DDF rcall _delay
00E6 .dbline 106
00E6 ; Set_PD(0);
00E6 0027 clr R16
00E8 9CDF rcall _Set_PD
00EA .dbline 107
00EA ; for(i=0;i<2;i++)
00EA 4427 clr R20
00EC 0AC0 rjmp L37
00EE L34:
00EE .dbline 108
00EE .dbline 108
00EE 80E0 ldi R24,<_Snd_Info
00F0 90E0 ldi R25,>_Snd_Info
00F2 E42F mov R30,R20
00F4 FF27 clr R31
00F6 E80F add R30,R24
00F8 F91F adc R31,R25
00FA 0081 ldd R16,z+0
00FC B2DF rcall _Seek_Segment
00FE .dbline 109
00FE D4DF rcall _Play
0100 .dbline 109
0100 L35:
0100 .dbline 107
0100 4395 inc R20
0102 L37:
0102 .dbline 107
0102 4230 cpi R20,2
0104 A0F3 brlo L34
0106 .dbline -2
0106 .dbline 110
0106 ; {Seek_Segment(Snd_Info[i]); //搜索相应语音信息段
0106 ; Play();} //播放
0106 ; }
0106 L31:
0106 00D0 rcall pop_gset1
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r i 20 c
010A .dbsym r m 20 c
010A .dbend
010A .dbfunc e Pre_Inform _Pre_Inform fV
010A ; i -> R20
010A ; m -> R20
.even
010A _Pre_Inform::
010A 00D0 rcall push_gset1
010C 402F mov R20,R16
010E .dbline -1
010E .dbline 113
010E ;
010E ; void Pre_Inform(uchar m) //报站
010E ; {uchar i;
010E .dbline 114
010E ; if(Pst_Flag) Snd_Pre_Info[1]=m; //若为上行方向,顺序预报站
010E 20904200 lds R2,_Pst_Flag
0112 2220 tst R2
0114 19F0 breq L39
0116 .dbline 114
0116 40930600 sts _Snd_Pre_Info+1,R20
011A 04C0 rjmp L40
011C L39:
011C .dbline 115
011C ; else Snd_Pre_Info[1]=17-m; //逆序预报站
011C 81E1 ldi R24,17
011E 841B sub R24,R20
0120 80930600 sts _Snd_Pre_Info+1,R24
0124 L40:
0124 .dbline 116
0124 ; Set_PD(1); //语音芯片复位
0124 01E0 ldi R16,1
0126 7DDF rcall _Set_PD
0128 .dbline 117
0128 ; delay(20000);
0128 00E2 ldi R16,20000
012A 1EE4 ldi R17,78
012C 69DF rcall _delay
012E .dbline 118
012E ; Set_PD(0);
012E 0027 clr R16
0130 78DF rcall _Set_PD
0132 .dbline 119
0132 ; for(i=0;i<3;i++)
0132 4427 clr R20
0134 0AC0 rjmp L46
0136 L43:
0136 .dbline 120
0136 .dbline 120
0136 80E0 ldi R24,<_Snd_Pre_Info
0138 90E0 ldi R25,>_Snd_Pre_Info
013A E42F mov R30,R20
013C FF27 clr R31
013E E80F add R30,R24
0140 F91F adc R31,R25
0142 0081 ldd R16,z+0
0144 8EDF rcall _Seek_Segment
0146 .dbline 121
0146 B0DF rcall _Play
0148 .dbline 121
0148 L44:
0148 .dbline 119
0148 4395 inc R20
014A L46:
014A .dbline 119
014A 4330 cpi R20,3
014C A0F3 brlo L43
014E .dbline -2
014E .dbline 122
014E ; {Seek_Segment(Snd_Pre_Info[i]); //搜索相应语音信息段
014E ; Play();} //播放
014E ; }
014E L38:
014E 00D0 rcall pop_gset1
0150 .dbline 0 ; func end
0150 0895 ret
0152 .dbsym r i 20 c
0152 .dbsym r m 20 c
0152 .dbend
0152 .dbfunc e Special _Special fV
0152 ; m -> R20
.even
0152 _Special::
0152 00D0 rcall push_gset1
0154 402F mov R20,R16
0156 .dbline -1
0156 .dbline 125
0156 ;
0156 ; void Special(uchar m) //播放特殊信息
0156 ; {Set_PD(1); //语音芯片复位
0156 .dbline 125
0156 01E0 ldi R16,1
0158 64DF rcall _Set_PD
015A .dbline 126
015A ; delay(20000);
015A 00E2 ldi R16,20000
015C 1EE4 ldi R17,78
015E 50DF rcall _delay
0160 .dbline 127
0160 ; Set_PD(0);
0160 0027 clr R16
0162 5FDF rcall _Set_PD
0164 .dbline 128
0164 ; Seek_Segment(Snd_Spec[m]); //搜索相应语音信息段
0164 80E0 ldi R24,<_Snd_Spec
0166 90E0 ldi R25,>_Snd_Spec
0168 E42F mov R30,R20
016A FF27 clr R31
016C E80F add R30,R24
016E F91F adc R31,R25
0170 0081 ldd R16,z+0
0172 77DF rcall _Seek_Segment
0174 .dbline 129
0174 ; Play(); //播放
0174 99DF rcall _Play
0176 .dbline -2
0176 .dbline 130
0176 ; }
0176 L47:
0176 00D0 rcall pop_gset1
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbsym r m 20 c
017A .dbend
017A .dbfunc e Welcome _Welcome fV
.even
017A _Welcome::
017A .dbline -1
017A .dbline 133
017A ;
017A ; void Welcome() //欢迎信息
017A ; {Set_PD(1); //语音芯片复位
017A .dbline 133
017A 01E0 ldi R16,1
017C 52DF rcall _Set_PD
017E .dbline 134
017E ; delay(20000);
017E 00E2 ldi R16,20000
0180 1EE4 ldi R17,78
0182 3EDF rcall _delay
0184 .dbline 135
0184 ; Set_PD(0);
0184 0027 clr R16
0186 4DDF rcall _Set_PD
0188 .dbline 136
0188 ; Seek_Segment(Snd_Welc); //搜索相应语音信息段
0188 00910A00 lds R16,_Snd_Welc
018C 6ADF rcall _Seek_Segment
018E .dbline 137
018E ; Play(); //播放
018E .dbline -2
018E .dbline 138
018E ; }
018E L48:
018E .dbline 0 ; func end
018E 8CCF rjmp _Play
0190 .dbend
0190 .dbfunc e Set_SCL _Set_SCL fV
0190 ; i -> R16
.even
0190 _Set_SCL::
0190 .dbline -1
0190 .dbline 142
0190 ;
0190 ; //****************************I2C驱动程序****************************//
0190 ; void Set_SCL(uchar i) //定义MAX6959时钟线为PA^7
0190 ; {if(i) PORTA |=0x80;
0190 .dbline 142
0190 0023 tst R16
0192 11F0 breq L50
0194 .dbline 142
0194 DF9A sbi 0x1b,7
0196 03C0 rjmp L51
0198 L50:
0198 .dbline 143
0198 8BB3 in R24,0x1b
019A 8F77 andi R24,127
019C 8BBB out 0x1b,R24
019E L51:
019E .dbline -2
019E .dbline 144
019E ; else PORTA &=0x7f;
019E ; }
019E L49:
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbsym r i 16 c
01A0 .dbend
01A0 .dbfunc e Set_SDA _Set_SDA fV
01A0 ; i -> R16
.even
01A0 _Set_SDA::
01A0 .dbline -1
01A0 .dbline 147
01A0 ;
01A0 ; void Set_SDA(uchar i) //定义MAX6959数据线为PA^6
01A0 ; {if(i) PORTA |=0x40;
01A0 .dbline 147
01A0 0023 tst R16
01A2 11F0 breq L53
01A4 .dbline 147
01A4 DE9A sbi 0x1b,6
01A6 03C0 rjmp L54
01A8 L53:
01A8 .dbline 148
01A8 8BB3 in R24,0x1b
01AA 8F7B andi R24,191
01AC 8BBB out 0x1b,R24
01AE L54:
01AE .dbline -2
01AE .dbline 149
01AE ; else PORTA &=0xbf;
01AE ; }
01AE L52:
01AE .dbline 0 ; func end
01AE 0895 ret
01B0 .dbsym r i 16 c
01B0 .dbend
01B0 .dbfunc e Start _Start fV
.even
01B0 _Start::
01B0 .dbline -1
01B0 .dbline 152
01B0 ;
01B0 ; void Start() //I2C总线的开始条件
01B0 ; {Set_SDA(1); //SDA=1;
01B0 .dbline 152
01B0 01E0 ldi R16,1
01B2 F6DF rcall _Set_SDA
01B4 .dbline 153
01B4 ; Set_SCL(1); //SCL=1;
01B4 01E0 ldi R16,1
01B6 ECDF rcall _Set_SCL
01B8 .dbline 154
01B8 ; delay(100); //等待时钟信号变高
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -