⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard_uart.lss

📁 avr单片机的键盘程序和串口程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 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 + -