📄 bell.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E006C CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E0079 CALL push_gset1
FILE: D:\AVR\我的程序\轰鸣器实验\cfg.h
(0001) /*******************************
(0002) *程序名称:功能函数集
(0003) *作 者:萧联珠
(0004) *日 期:2007-11-17
(0005) ********************************/
(0006) #include <iom16v.h>
(0007)
(0008) /*延时子程序*/
(0009) void delay_ms(int time)
(0010) {
(0011) int i;
(0012) for(;time>0;time--)
004D C00A RJMP 0x0058
(0013) for(i=0;i<100;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3644 CPI R20,0x64
0053 E0E0 LDI R30,0
0054 075E CPC R21,R30
0055 F3D4 BLT 0x0050
0056 5001 SUBI R16,1
0057 4010 SBCI R17,0
0058 2422 CLR R2
0059 2433 CLR R3
005A 1620 CP R2,R16
005B 0631 CPC R3,R17
005C F38C BLT 0x004E
005D 940E007C CALL pop_gset1
005F 9508 RET
(0014) }
(0015)
(0016) /*端口初始化*/
(0017) void port_init()
(0018) {
(0019) DDRD|=(1<<DDD5); //配置PD5口为输出
_port_init:
0060 9A8D SBI 0x11,5
(0020) PORTD|=(1<<PD5); //PD5口的初始值为"1"
0061 9A95 SBI 0x12,5
0062 9508 RET
(0021) }
(0022)
(0023) /*轰鸣器程序*/
(0024) void bell() //轰鸣器须输入一定频率的脉冲波
(0025) {
(0026) PORTD&=~(1<<PD5);
_bell:
0063 9895 CBI 0x12,5
(0027) delay_ms(2);
0064 E002 LDI R16,2
0065 E010 LDI R17,0
0066 DFE4 RCALL _delay_ms
(0028) PORTD|=(1<<PD5);
0067 9A95 SBI 0x12,5
(0029) delay_ms(2);
0068 E002 LDI R16,2
0069 E010 LDI R17,0
006A DFE0 RCALL _delay_ms
006B 9508 RET
FILE: D:\AVR\我的程序\轰鸣器实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉轰鸣器操作编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-18
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) port_init();
_main:
006C DFF3 RCALL _port_init
006D C001 RJMP 0x006F
(0012) while(1)
(0013) {
(0014) bell();
FILE: <library>
006E DFF4 RCALL _bell
006F CFFE RJMP 0x006E
0070 9508 RET
push_gset5:
0071 92FA ST R15,-Y
0072 92EA ST R14,-Y
push_gset4:
0073 92DA ST R13,-Y
0074 92CA ST R12,-Y
push_gset3:
0075 92BA ST R11,-Y
0076 92AA ST R10,-Y
push_gset2:
0077 937A ST R23,-Y
0078 936A ST R22,-Y
push_gset1:
0079 935A ST R21,-Y
007A 934A ST R20,-Y
007B 9508 RET
pop_gset1:
007C E0E1 LDI R30,1
pop:
007D 9149 LD R20,Y+
007E 9159 LD R21,Y+
007F FDE0 SBRC R30,0
0080 9508 RET
0081 9169 LD R22,Y+
0082 9179 LD R23,Y+
0083 FDE1 SBRC R30,1
0084 9508 RET
0085 90A9 LD R10,Y+
0086 90B9 LD R11,Y+
0087 FDE2 SBRC R30,2
0088 9508 RET
0089 90C9 LD R12,Y+
008A 90D9 LD R13,Y+
008B FDE3 SBRC R30,3
008C 9508 RET
008D 90E9 LD R14,Y+
008E 90F9 LD R15,Y+
008F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -