📄 keyboard_uart.lss
字号:
1e0: de b7 in r29, 0x3e ; 62
TCNT1H=0Xf0; //重设初始值
1e2: ed e4 ldi r30, 0x4D ; 77
1e4: f0 e0 ldi r31, 0x00 ; 0
1e6: 80 ef ldi r24, 0xF0 ; 240
1e8: 80 83 st Z, r24
TCNT1L=0X2f; //完成一次工作
1ea: ec e4 ldi r30, 0x4C ; 76
1ec: f0 e0 ldi r31, 0x00 ; 0
1ee: 8f e2 ldi r24, 0x2F ; 47
1f0: 80 83 st Z, r24
put_c(date); //调用显示函数
1f2: 80 91 77 00 lds r24, 0x0077
1f6: 88 2f mov r24, r24
1f8: 90 e0 ldi r25, 0x00 ; 0
1fa: 0e 94 4d 01 call 0x29a ; 0x29a <put_c>
TCCR1B=0X05;
1fe: ee e4 ldi r30, 0x4E ; 78
200: f0 e0 ldi r31, 0x00 ; 0
202: 85 e0 ldi r24, 0x05 ; 5
204: 80 83 st Z, r24
//uc_Led++;
}
206: cf 91 pop r28
208: df 91 pop r29
20a: ff 91 pop r31
20c: ef 91 pop r30
20e: 9f 91 pop r25
210: 8f 91 pop r24
212: 0f 90 pop r0
214: 0f be out 0x3f, r0 ; 63
216: 0f 90 pop r0
218: 1f 90 pop r1
21a: 18 95 reti
0000021c <main>:
//定义一个数据
int main(void)
{
21c: df 93 push r29
21e: cf 93 push r28
220: cd b7 in r28, 0x3d ; 61
222: de b7 in r29, 0x3e ; 62
DDRA=0XFF;//显示输出端口 段
224: ea e3 ldi r30, 0x3A ; 58
226: f0 e0 ldi r31, 0x00 ; 0
228: 8f ef ldi r24, 0xFF ; 255
22a: 80 83 st Z, r24
DDRC=0XFF;//显示输出端口 位
22c: e4 e3 ldi r30, 0x34 ; 52
22e: f0 e0 ldi r31, 0x00 ; 0
230: 8f ef ldi r24, 0xFF ; 255
232: 80 83 st Z, r24
//--------------------------
uart_init(); //串口的设置
234: 0e 94 34 01 call 0x268 ; 0x268 <uart_init>
put_s("hello");
238: 80 e7 ldi r24, 0x70 ; 112
23a: 90 e0 ldi r25, 0x00 ; 0
23c: 0e 94 64 01 call 0x2c8 ; 0x2c8 <put_s>
sei(); //打开中断
240: 78 94 sei
//---------------------------
SREG|=0X80;// 全局中断使能即 sei();
242: af e5 ldi r26, 0x5F ; 95
244: b0 e0 ldi r27, 0x00 ; 0
246: ef e5 ldi r30, 0x5F ; 95
248: f0 e0 ldi r31, 0x00 ; 0
24a: 80 81 ld r24, Z
24c: 80 68 ori r24, 0x80 ; 128
24e: 8c 93 st X, r24
TIMSK|=0X04;
250: a9 e5 ldi r26, 0x59 ; 89
252: b0 e0 ldi r27, 0x00 ; 0
254: e9 e5 ldi r30, 0x59 ; 89
256: f0 e0 ldi r31, 0x00 ; 0
258: 80 81 ld r24, Z
25a: 84 60 ori r24, 0x04 ; 4
25c: 8c 93 st X, r24
timer1_init();
25e: 0e 94 a2 01 call 0x344 ; 0x344 <timer1_init>
//--------------------------------
while(1) key();
262: 0e 94 49 00 call 0x92 ; 0x92 <key>
266: fd cf rjmp .-6 ; 0x262 <main+0x46>
00000268 <uart_init>:
//----------------------------------------------
#define uchar unsigned char
//---------------------------------------------
//---------------串口设置-----------------------------
void uart_init(void)
{
268: df 93 push r29
26a: cf 93 push r28
26c: cd b7 in r28, 0x3d ; 61
26e: de b7 in r29, 0x3e ; 62
UCSRC = (1<<URSEL) | 0x06; //
270: e0 e4 ldi r30, 0x40 ; 64
272: f0 e0 ldi r31, 0x00 ; 0
274: 86 e8 ldi r24, 0x86 ; 134
276: 80 83 st Z, r24
UBRRL=(F_CPU/BAUD/16-1)%256; //计算波特率并写入波特率寄存器
278: e9 e2 ldi r30, 0x29 ; 41
27a: f0 e0 ldi r31, 0x00 ; 0
27c: 83 e3 ldi r24, 0x33 ; 51
27e: 80 83 st Z, r24
UBRRH=(F_CPU/BAUD/16-1)/256;
280: e0 e4 ldi r30, 0x40 ; 64
282: f0 e0 ldi r31, 0x00 ; 0
284: 10 82 st Z, r1
UCSRA=0X00; //Bit 7 6 5 4 3 2 1 0
286: eb e2 ldi r30, 0x2B ; 43
288: f0 e0 ldi r31, 0x00 ; 0
28a: 10 82 st Z, r1
//RXC TXC UDRE FE DOR PE U2X MPCM UCSRA
//读/ 写R R/W R R R R R/W R/W
//初始值0 0 1 0 0 0 0 0
//定义见mega16官方pdf资料152页
UCSRB = (_BV(RXCIE))|(1<<RXEN)|(1<<TXEN);//控制和状态寄存器B //接收结束中断使能//接收使能//发送使能
28c: ea e2 ldi r30, 0x2A ; 42
28e: f0 e0 ldi r31, 0x00 ; 0
290: 88 e9 ldi r24, 0x98 ; 152
292: 80 83 st Z, r24
////定义见mega16官方pdf资料153页
}
294: cf 91 pop r28
296: df 91 pop r29
298: 08 95 ret
0000029a <put_c>:
//------------------------------------------------
//----------------
void put_c(unsigned char c) //发送采用查询方式
{
29a: df 93 push r29
29c: cf 93 push r28
29e: 0f 92 push r0
2a0: cd b7 in r28, 0x3d ; 61
2a2: de b7 in r29, 0x3e ; 62
2a4: 89 83 std Y+1, r24 ; 0x01
while( !(UCSRA & (1<<UDRE)) );
2a6: eb e2 ldi r30, 0x2B ; 43
2a8: f0 e0 ldi r31, 0x00 ; 0
2aa: 80 81 ld r24, Z
2ac: 88 2f mov r24, r24
2ae: 90 e0 ldi r25, 0x00 ; 0
2b0: 80 72 andi r24, 0x20 ; 32
2b2: 90 70 andi r25, 0x00 ; 0
2b4: 00 97 sbiw r24, 0x00 ; 0
2b6: b9 f3 breq .-18 ; 0x2a6 <put_c+0xc>
UDR=c;
2b8: ec e2 ldi r30, 0x2C ; 44
2ba: f0 e0 ldi r31, 0x00 ; 0
2bc: 89 81 ldd r24, Y+1 ; 0x01
2be: 80 83 st Z, r24
}
2c0: 0f 90 pop r0
2c2: cf 91 pop r28
2c4: df 91 pop r29
2c6: 08 95 ret
000002c8 <put_s>:
//------------------------------------------------
void put_s(unsigned char *ptr)//发送字符串
{
2c8: df 93 push r29
2ca: cf 93 push r28
2cc: 00 d0 rcall .+0 ; 0x2ce <put_s+0x6>
2ce: cd b7 in r28, 0x3d ; 61
2d0: de b7 in r29, 0x3e ; 62
2d2: 9a 83 std Y+2, r25 ; 0x02
2d4: 89 83 std Y+1, r24 ; 0x01
2d6: 0b c0 rjmp .+22 ; 0x2ee <put_s+0x26>
while (*ptr)
{
put_c(*ptr++);
2d8: e9 81 ldd r30, Y+1 ; 0x01
2da: fa 81 ldd r31, Y+2 ; 0x02
2dc: 20 81 ld r18, Z
2de: 89 81 ldd r24, Y+1 ; 0x01
2e0: 9a 81 ldd r25, Y+2 ; 0x02
2e2: 01 96 adiw r24, 0x01 ; 1
2e4: 9a 83 std Y+2, r25 ; 0x02
2e6: 89 83 std Y+1, r24 ; 0x01
2e8: 82 2f mov r24, r18
2ea: 0e 94 4d 01 call 0x29a ; 0x29a <put_c>
UDR=c;
}
//------------------------------------------------
void put_s(unsigned char *ptr)//发送字符串
{
while (*ptr)
2ee: e9 81 ldd r30, Y+1 ; 0x01
2f0: fa 81 ldd r31, Y+2 ; 0x02
2f2: 80 81 ld r24, Z
2f4: 88 23 and r24, r24
2f6: 81 f7 brne .-32 ; 0x2d8 <put_s+0x10>
{
put_c(*ptr++);
}
put_c(0x0D);
2f8: 8d e0 ldi r24, 0x0D ; 13
2fa: 0e 94 4d 01 call 0x29a ; 0x29a <put_c>
put_c(0x0A); //结尾发送回车换行
2fe: 8a e0 ldi r24, 0x0A ; 10
300: 0e 94 4d 01 call 0x29a ; 0x29a <put_c>
}
304: 0f 90 pop r0
306: 0f 90 pop r0
308: cf 91 pop r28
30a: df 91 pop r29
30c: 08 95 ret
0000030e <__vector_11>:
//-------------------------------------------------
SIGNAL(SIG_USART_RECV)//接收中断
{
30e: 1f 92 push r1
310: 0f 92 push r0
312: 0f b6 in r0, 0x3f ; 63
314: 0f 92 push r0
316: 11 24 eor r1, r1
318: 8f 93 push r24
31a: ef 93 push r30
31c: ff 93 push r31
31e: df 93 push r29
320: cf 93 push r28
322: cd b7 in r28, 0x3d ; 61
324: de b7 in r29, 0x3e ; 62
put_c(UDR); //发送寄存器中接收的的数据
326: ec e2 ldi r30, 0x2C ; 44
328: f0 e0 ldi r31, 0x00 ; 0
32a: 80 81 ld r24, Z
32c: 0e 94 4d 01 call 0x29a ; 0x29a <put_c>
}
330: cf 91 pop r28
332: df 91 pop r29
334: ff 91 pop r31
336: ef 91 pop r30
338: 8f 91 pop r24
33a: 0f 90 pop r0
33c: 0f be out 0x3f, r0 ; 63
33e: 0f 90 pop r0
340: 1f 90 pop r1
342: 18 95 reti
00000344 <timer1_init>:
#include <avr/io.h>
#include <avr/interrupt.h>
void timer1_init(void)
{
344: df 93 push r29
346: cf 93 push r28
348: cd b7 in r28, 0x3d ; 61
34a: de b7 in r29, 0x3e ; 62
TCCR1B=0X00;//先停止定时器1
34c: ee e4 ldi r30, 0x4E ; 78
34e: f0 e0 ldi r31, 0x00 ; 0
350: 10 82 st Z, r1
TCNT1H=0Xfc;//设定计数器初值65536-1000000/1024= 64559 = 0xfc2f //定时一秒 内 部震荡 1 M 赫兹
352: ed e4 ldi r30, 0x4D ; 77
354: f0 e0 ldi r31, 0x00 ; 0
356: 8c ef ldi r24, 0xFC ; 252
358: 80 83 st Z, r24
TCNT1L=0X2f;
35a: ec e4 ldi r30, 0x4C ; 76
35c: f0 e0 ldi r31, 0x00 ; 0
35e: 8f e2 ldi r24, 0x2F ; 47
360: 80 83 st Z, r24
TCCR1A=0X00;//启动定时器1,使用1024分频
362: ef e4 ldi r30, 0x4F ; 79
364: f0 e0 ldi r31, 0x00 ; 0
366: 10 82 st Z, r1
TCCR1B=0X05;
368: ee e4 ldi r30, 0x4E ; 78
36a: f0 e0 ldi r31, 0x00 ; 0
36c: 85 e0 ldi r24, 0x05 ; 5
36e: 80 83 st Z, r24
}/*
370: cf 91 pop r28
372: df 91 pop r29
374: 08 95 ret
00000376 <_exit>:
376: f8 94 cli
00000378 <__stop_program>:
378: ff cf rjmp .-2 ; 0x378 <__stop_program>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -