📄 project.lis
字号:
.even
0000 _delay::
0000 .dbline -1
0000 .dbline 47
0000 L2:
0000 .dbline 47
0000 L3:
0000 .dbline 47
0000 ; //***************************FileName:Project.c**********************//
0000 ; //***************************ICCAVR6.30编译**************************//
0000 ; #include <io8535v.h> //AT90S8535寄存器定义;
0000 ; #include <macros.h> //AT90S8535宏定义;
0000 ; #include "zimo.h" //点阵LED字模
0000 ; #define uchar unsigned char //数据类型定义
0000 ; #define uint unsigned int //数据类型定义
0000 ;
0000 ; uchar Key_Value; //按键键值;
0000 ; uchar State_Flag; //站点标志;
0000 ; uchar Ack_Flag; //确认标志;
0000 ; uchar Pre_Flag; //预报标志;
0000 ; uchar Move_Flag; //滚动标志;
0000 ; uchar Spec_Flag; //特殊信息标志;
0000 ; uchar EOM_Flag=1; //信息结束标志;
0000 ; uchar Pst_Flag; //上、下行标志;
0000 ; uchar State=1; //站数;
0000 ; uchar Spec; //特殊信息数;
0000 ; uchar Speed=20; //文字滚动速度;
0000 ; uchar Word_Number; //显示字数;
0000 ;
0000 ; //语音芯片第1~16段分别保存16站的站名信息
0000 ; //第17段保存报站信息“到了,请要下车的乘客依次从后门下车”
0000 ; //第18、19段分别保存预报信息“前方到站”、“请要下车的乘客做好下车准备”
0000 ; //第20段保存欢迎信息及公交车线路说明
0000 ; //第21、22段保存特殊提示信息
0000 ; uchar Snd_Info[]={0,17}; //报站声音信息
0000 ; uchar Snd_Pre_Info[]={18,0,19}; //预报声音信息
0000 ; uchar Snd_Spec[]={21,22}; //特殊声音信息
0000 ; uchar Snd_Welc=20; //欢迎声音信息
0000 ;
0000 ; //本例公交车语音报站系统包含16站
0000 ; //所有的站名都以“第n站”代替,其中n为当前站数,n<16
0000 ; //报站时显示屏滚动显示“第n站到了”
0000 ; //预报站时显示屏显示“前方到站第n站”
0000 ; //其中“第n站”字模存放在二维数组State n[3][32]中
0000 ; //“到了”字模存放在二维数组DL[2][32]中
0000 ; //“前方到站”字模存放在二维数组QFDZ[4][32]中
0000 ; uchar text[32]; //当前显示文字
0000 ; uchar next[32]; //下一个显示文字
0000 ;
0000 ; #pragma interrupt_handler Key_Scan:2 //定义按键中断INT0的中断服务程序
0000 ; #pragma interrupt_handler Receive_EOM:3//定义语音中断INT1的中断服务程序
0000 ;
0000 ; //****************************延时程序*******************************//
0000 ; void delay(int t)
0000 ; {while(t--) ;}
0000 202E mov R2,R16
0002 312E mov R3,R17
0004 0150 subi R16,1
0006 1040 sbci R17,0
0008 2220 tst R2
000A D1F7 brne L2
000C 3320 tst R3
000E C1F7 brne L2
0010 X0:
0010 .dbline -2
0010 .dbline 47
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r t 16 I
0012 .dbend
0012 .dbfunc e Set_CE _Set_CE fV
0012 ; level -> R16
.even
0012 _Set_CE::
0012 .dbline -1
0012 .dbline 51
0012 ;
0012 ; //****************************语音芯片驱动程序***********************//
0012 ; void Set_CE(uchar level) //定义ISD2560使能线为PA^4
0012 ; {if(level==1) PORTA |=0x10;
0012 .dbline 51
0012 0130 cpi R16,1
0014 11F4 brne L6
0016 .dbline 51
0016 DC9A sbi 0x1b,4
0018 03C0 rjmp L7
001A L6:
001A .dbline 52
001A 8BB3 in R24,0x1b
001C 8F7E andi R24,239
001E 8BBB out 0x1b,R24
0020 L7:
0020 .dbline -2
0020 .dbline 53
0020 ; else PORTA &=0xef;
0020 ; }
0020 L5:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r level 16 c
0022 .dbend
0022 .dbfunc e Set_PD _Set_PD fV
0022 ; level -> R16
.even
0022 _Set_PD::
0022 .dbline -1
0022 .dbline 56
0022 ;
0022 ; void Set_PD(uchar level) //定义ISD2560的PD线为PA^3
0022 ; {if(level) PORTA |=0x08;
0022 .dbline 56
0022 0023 tst R16
0024 11F0 breq L9
0026 .dbline 56
0026 DB9A sbi 0x1b,3
0028 03C0 rjmp L10
002A L9:
002A .dbline 57
002A 8BB3 in R24,0x1b
002C 877F andi R24,247
002E 8BBB out 0x1b,R24
0030 L10:
0030 .dbline -2
0030 .dbline 58
0030 ; else PORTA &=0xf7;
0030 ; }
0030 L8:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r level 16 c
0032 .dbend
0032 .dbfunc e Set_PR _Set_PR fV
0032 ; level -> R16
.even
0032 _Set_PR::
0032 .dbline -1
0032 .dbline 61
0032 ;
0032 ; void Set_PR(uchar level) //定义ISD2560的PR线为PA^2
0032 ; {if(level) PORTA |=0x04;
0032 .dbline 61
0032 0023 tst R16
0034 11F0 breq L12
0036 .dbline 61
0036 DA9A sbi 0x1b,2
0038 03C0 rjmp L13
003A L12:
003A .dbline 62
003A 8BB3 in R24,0x1b
003C 8B7F andi R24,251
003E 8BBB out 0x1b,R24
0040 L13:
0040 .dbline -2
0040 .dbline 63
0040 ; else PORTA &=0xfb;
0040 ; }
0040 L11:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r level 16 c
0042 .dbend
0042 .dbfunc e Set_A6 _Set_A6 fV
0042 ; level -> R16
.even
0042 _Set_A6::
0042 .dbline -1
0042 .dbline 66
0042 ;
0042 ; void Set_A6(uchar level) //定义ISD2560的A6/8/9线为PA^1
0042 ; {if(level) PORTA |=0x02;
0042 .dbline 66
0042 0023 tst R16
0044 11F0 breq L15
0046 .dbline 66
0046 D99A sbi 0x1b,1
0048 03C0 rjmp L16
004A L15:
004A .dbline 67
004A 8BB3 in R24,0x1b
004C 8D7F andi R24,253
004E 8BBB out 0x1b,R24
0050 L16:
0050 .dbline -2
0050 .dbline 68
0050 ; else PORTA &=0xfd;
0050 ; }
0050 L14:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r level 16 c
0052 .dbend
0052 .dbfunc e Set_A0 _Set_A0 fV
0052 ; level -> R16
.even
0052 _Set_A0::
0052 .dbline -1
0052 .dbline 71
0052 ;
0052 ; void Set_A0(uchar level) //定义ISD2560的A6/8/9线为PA^1
0052 ; {if(level) PORTA |=0x01;
0052 .dbline 71
0052 0023 tst R16
0054 11F0 breq L18
0056 .dbline 71
0056 D89A sbi 0x1b,0
0058 03C0 rjmp L19
005A L18:
005A .dbline 72
005A 8BB3 in R24,0x1b
005C 8E7F andi R24,254
005E 8BBB out 0x1b,R24
0060 L19:
0060 .dbline -2
0060 .dbline 73
0060 ; else PORTA &=0xfe;
0060 ; }
0060 L17:
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r level 16 c
0062 .dbend
0062 .dbfunc e Seek_Segment _Seek_Segment fV
0062 ; s -> R20
.even
0062 _Seek_Segment::
0062 00D0 rcall push_gset1
0064 402F mov R20,R16
0066 .dbline -1
0066 .dbline 77
0066 ;
0066 ; //****************************语音搜索和播放程序****************************//
0066 ; void Seek_Segment(uchar s) //语音搜索程序
0066 ; {Set_PD(1); //语音芯片复位
0066 .dbline 77
0066 01E0 ldi R16,1
0068 DCDF rcall _Set_PD
006A .dbline 78
006A ; delay(20000);
006A 00E2 ldi R16,20000
006C 1EE4 ldi R17,78
006E C8DF rcall _delay
0070 .dbline 79
0070 ; Set_PD(0);
0070 0027 clr R16
0072 D7DF rcall _Set_PD
0074 .dbline 80
0074 ; Set_PR(1); //放音模式
0074 01E0 ldi R16,1
0076 DDDF rcall _Set_PR
0078 .dbline 81
0078 ; Set_A0(1); //M0模式
0078 01E0 ldi R16,1
007A EBDF rcall _Set_A0
007C 0CC0 rjmp L22
007E L21:
007E .dbline 83
007E ; while(s--) //快进s段
007E ; {Set_CE(0);
007E .dbline 83
007E 0027 clr R16
0080 C8DF rcall _Set_CE
0082 .dbline 84
0082 ; Set_CE(1);
0082 01E0 ldi R16,1
0084 C6DF rcall _Set_CE
0086 L24:
0086 .dbline 85
0086 ; do NOP();
0086 0000 nop
0088 L25:
0088 .dbline 86
0088 20900000 lds R2,_EOM_Flag
008C 2220 tst R2
008E D9F7 brne L24
0090 .dbline 87
0090 81E0 ldi R24,1
0092 80930000 sts _EOM_Flag,R24
0096 .dbline 87
0096 L22:
0096 .dbline 82
0096 242E mov R2,R20
0098 3324 clr R3
009A 4150 subi R20,1
009C 2220 tst R2
009E 79F7 brne L21
00A0 .dbline 88
00A0 ; while(EOM_Flag); //检测EOM标志位,为0时有效
00A0 ; EOM_Flag=1;}
00A0 ; Set_A0(0); //M6模式
00A0 0027 clr R16
00A2 D7DF rcall _Set_A0
00A4 .dbline -2
00A4 .dbline 89
00A4 ; }
00A4 L20:
00A4 00D0 rcall pop_gset1
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbsym r s 20 c
00A8 .dbend
00A8 .dbfunc e Play _Play fV
.even
00A8 _Play::
00A8 .dbline -1
00A8 .dbline 92
00A8 ;
00A8 ; void Play(void) //语音播放程序
00A8 ; {Set_CE(0); //CE线低电平触发芯片的放音操作
00A8 .dbline 92
00A8 0027 clr R16
00AA B3DF rcall _Set_CE
00AC .dbline 93
00AC ; Set_CE(1);
00AC 01E0 ldi R16,1
00AE B1DF rcall _Set_CE
00B0 L28:
00B0 .dbline 94
00B0 ; do NOP();
00B0 0000 nop
00B2 L29:
00B2 .dbline 95
00B2 ; while(EOM_Flag); //检测EOM标志位,为0时有效
00B2 20900000 lds R2,_EOM_Flag
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -