📄 03buz.lst
字号:
__text_start:
__start:
0046 EFCF LDI R28,0xFF
0047 E1D0 LDI R29,0x10
0048 BFCD OUT 0x3D,R28
0049 BFDE OUT 0x3E,R29
004A 51C0 SUBI R28,0x10
004B 40D0 SBCI R29,0
004C EA0A LDI R16,0xAA
004D 8308 STD Y+0,R16
004E 2400 CLR R0
004F E0E0 LDI R30,0
0050 E0F1 LDI R31,1
0051 E011 LDI R17,1
0052 30E0 CPI R30,0
0053 07F1 CPC R31,R17
0054 F011 BEQ 0x0057
0055 9201 ST R0,Z+
0056 CFFB RJMP 0x0052
0057 8300 STD Z+0,R16
0058 E8EC LDI R30,0x8C
0059 E0F0 LDI R31,0
005A E0A0 LDI R26,0
005B E0B1 LDI R27,1
005C E010 LDI R17,0
005D 38EC CPI R30,0x8C
005E 07F1 CPC R31,R17
005F F021 BEQ 0x0064
0060 95C8 LPM
0061 9631 ADIW R30,1
0062 920D ST R0,X+
0063 CFF9 RJMP 0x005D
0064 940E008E CALL _main
_exit:
0066 CFFF RJMP _exit
_delay_ms:
a --> R20
b --> R22
i --> R16
0067 940E00B1 CALL push_gset2
FILE: E:\ICCAVR\project\AVRMEG~3\icc\003-BUZZ\main.c
(0001) /*
(0002) 实验三:
(0003) 驱动无源蜂鸣器实验。
(0004) 1、定时器实验,用定时器的CTC模式驱动无源蜂鸣器,是否输出由按键0控制。
(0005) 2、内部1 M晶振,程序采用单任务方式,软件延时,驱动无源蜂鸣器由定时器硬件完成。
(0006) 3、进行此实验请插上BUZ短路块。
(0007) 4、此实验让大家了解定时器里面的CTC功能,从而可以利用它来产生频率信号。
(0008)
(0009) AVR mega128学习板
(0010) www.iccavr.com 阿发
(0011) 23:03 2007-10-09
(0012) */
(0013) #include "iom128v.h"
(0014)
(0015) /*延时函数*/
(0016) void delay_ms(unsigned char i) {
(0017)
(0018) unsigned char a, b;
(0019) for (a = 0; a < i; a++) {
0069 2744 CLR R20
006A C006 RJMP 0x0071
(0020) for (b = 1; b; b++);
006B E061 LDI R22,1
006C C001 RJMP 0x006E
006D 9563 INC R22
006E 2366 TST R22
006F F7E9 BNE 0x006D
0070 9543 INC R20
0071 1740 CP R20,R16
0072 F3C0 BCS 0x006B
0073 940E00A8 CALL pop_gset2
0075 9508 RET
(0021) }
(0022) }
(0023)
(0024) /*IO口初始化函数*/
(0025) void io_init(void) {
(0026)
(0027) DDRA = 0x00; /*方向输入*/
_io_init:
0076 2422 CLR R2
0077 BA2A OUT 0x1A,R2
(0028) PORTA = 0xFF; /*打开上拉*/
0078 EF8F LDI R24,0xFF
0079 BB8B OUT 0x1B,R24
(0029) DDRB = 0x00; /*方向输入*/
007A BA27 OUT 0x17,R2
(0030) PORTB = 0xFF; /*高电平*/
007B BB88 OUT 0x18,R24
(0031) DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
007C BA24 OUT 0x14,R2
(0032) PORTC = 0xFF;
007D BB85 OUT 0x15,R24
(0033) DDRD = 0x00;
007E BA21 OUT 0x11,R2
(0034) PORTD = 0xFF;
007F BB82 OUT 0x12,R24
(0035) DDRE = 0x08; /*设置蜂鸣器对应脚为输出*/
0080 E088 LDI R24,0x8
0081 B982 OUT 0x02,R24
(0036) PORTE = 0xF7; /*蜂鸣器脚输出低电平*/
0082 EF87 LDI R24,0xF7
0083 B983 OUT 0x03,R24
(0037) DDRF = 0x00;
0084 92200061 STS 0x61,R2
(0038) PORTF = 0xFF;
0086 EF8F LDI R24,0xFF
0087 93800062 STS 0x62,R24
(0039) DDRG = 0x00;
0089 92200064 STS 0x64,R2
(0040) PORTG = 0xFF;
008B 93800065 STS 0x65,R24
008D 9508 RET
(0041) }
(0042)
(0043) void main(void) {
(0044)
(0045) io_init();
_main:
008E DFE7 RCALL _io_init
008F C016 RJMP 0x00A6
(0046) while (1) {
(0047) if (!(PINE & (1 << PE0))) { /*判断是否有按键按下*/
0090 9908 SBIC 0x01,0
0091 C014 RJMP 0x00A6
(0048) TCCR3A = 0x40; /*设置定时器工作在CTC模式*/
0092 E480 LDI R24,0x40
0093 9380008B STS 0x8B,R24
(0049) TCCR3B = 0x09;
0095 E089 LDI R24,0x9
0096 9380008A STS 0x8A,R24
(0050) OCR3A = 1000;
0098 EE88 LDI R24,0xE8
0099 E093 LDI R25,3
009A 93900087 STS 0x87,R25
009C 93800086 STS 0x86,R24
(0051) delay_ms(200); /*延时一段时间,保证蜂鸣器的最短工作时间*/
009E EC08 LDI R16,0xC8
009F DFC7 RCALL _delay_ms
(0052)
(0053) while (!(PINE & (1 << PE0))); /*等待按键松开*/
00A0 9B08 SBIS 0x01,0
00A1 CFFE RJMP 0x00A0
(0054) TCCR3A = 0x00; /*关闭定时器*/
00A2 2422 CLR R2
00A3 9220008B STS 0x8B,R2
(0055) PORTE &= ~(1 << PE3); /*人为将蜂鸣器控制脚置低*/
FILE: <library>
00A5 981B CBI 0x03,3
00A6 CFE9 RJMP 0x0090
00A7 9508 RET
pop_gset2:
00A8 E0E2 LDI R30,2
00A9 940C00B7 JMP pop
push_gset5:
00AB 92FA ST R15,-Y
00AC 92EA ST R14,-Y
push_gset4:
00AD 92DA ST R13,-Y
00AE 92CA ST R12,-Y
push_gset3:
00AF 92BA ST R11,-Y
00B0 92AA ST R10,-Y
push_gset2:
00B1 937A ST R23,-Y
00B2 936A ST R22,-Y
push_gset1:
00B3 935A ST R21,-Y
00B4 934A ST R20,-Y
00B5 9508 RET
pop_gset1:
00B6 E0E1 LDI R30,1
pop:
00B7 9149 LD R20,Y+
00B8 9159 LD R21,Y+
00B9 FDE0 SBRC R30,0
00BA 9508 RET
00BB 9169 LD R22,Y+
00BC 9179 LD R23,Y+
00BD FDE1 SBRC R30,1
00BE 9508 RET
00BF 90A9 LD R10,Y+
00C0 90B9 LD R11,Y+
00C1 FDE2 SBRC R30,2
00C2 9508 RET
00C3 90C9 LD R12,Y+
00C4 90D9 LD R13,Y+
00C5 FDE3 SBRC R30,3
00C6 9508 RET
00C7 90E9 LD R14,Y+
00C8 90F9 LD R15,Y+
00C9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -