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

📄 feedis_uart.s

📁 AVR系列单片机ATMEGA64开发的LED显示屏程序 内容包括ATMEGA64大部分资源的初始化程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module feedis_uart.c
	.area vector(rom, abs)
	.org 72
	jmp _UART_RX_interrupt
	.org 4
	jmp _int0_isr
	.area data(ram, con, rel)
_FLAG::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.dbsym e FLAG _FLAG c
_ready_rx::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.dbsym e ready_rx _ready_rx c
_zx::
	.blkb 1
	.area idata
	.byte 56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.blkb 2
	.area idata
	.byte 56,56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.dbstruct 0 13 .1
	.dbfield 0 zhou c
	.dbfield 1 dunwei A[4:4]c
	.dbfield 5 zongzhong A[4:4]c
	.dbfield 9 chaoxian A[4:4]c
	.dbend
	.dbsym e zx _zx S[.1]
_dip::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.dbsym e dip _dip c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R24
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 28
; #include <include.h>
; #pragma interrupt_handler UART_RX_interrupt:iv_USART0_RX
; #pragma interrupt_handler int0_isr:iv_INT0
; //全局变量
; //如果变量会在中断服务程序中被修改,须加volatile限定
; volatile unsigned char FLAG = 0;				//按键标志
; 
; 
; volatile unsigned char RX_index;			//存放接收数据的个数
; volatile uchar ready_rx=0;
; volatile uchar receivebox[70];
; unsigned char light;
; 
; extern uchar hantemp[32];
; //extern uchar dis[1024];
; extern uchar dis[3072];
; extern volatile uchar ISDstatus ;
; //extern volatile uchar countwait;
; extern uchar ISDmoney[5];
; volatile uchar SPEAK ;
; zhx zx={0x38,
; 0x38,0x38,0x38,0x38,
; 0x38,0x38,0x38,0x38,
; 0x38,0x38,0x38, 0x38};
; uchar flg;
; uchar dip=0;
; void int0_isr(void)
; {
	.dbline 31
;   //put_c(0xa5);
;  //countwait = 0;
;   SPEAK = 1;
	ldi R24,1
	sts _SPEAK,R24
	.dbline -2
L2:
	ld R24,y+
	out 0x3f,R24
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e put_c _put_c fV
;              c -> R16
	.even
_put_c::
	.dbline -1
	.dbline 36
; //if(ISDstatus & 0X02)
; // ISDstatus &= 0xfd;
; }
; void put_c(unsigned char c) //发送采用查询方式
; {
L4:
	.dbline 37
L5:
	.dbline 37
; 	while( !(UCSR0A & (1<<UDRE0)) );
	sbis 0xb,5
	rjmp L4
	.dbline 38
; 	UDR0=c;
	out 0xc,R16
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e put_s _put_s fV
;            ptr -> R20,R21
	.even
_put_s::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 42
; }
; 
; void put_s(unsigned char *ptr)
; {
	xjmp L9
L8:
	.dbline 44
	.dbline 45
	movw R30,R20
	ld R16,Z+
	movw R20,R30
	xcall _put_c
	.dbline 46
L9:
	.dbline 43
; 	while (*ptr)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L8
	.dbline 47
; 	{
; 		put_c(*ptr++);
; 	}
; 	put_c(0x0D);
	ldi R16,13
	xcall _put_c
	.dbline 48
; 	put_c(0x0A);  //结尾发送回车换行
	ldi R16,10
	xcall _put_c
	.dbline -2
L7:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pc
	.dbend
	.dbfunc e UART_RX_interrupt _UART_RX_interrupt fV
;           temp -> R20
	.even
_UART_RX_interrupt::
	xcall push_lset
	xcall push_gset2
	.dbline -1
	.dbline 52
; }
; 
; void UART_RX_interrupt(void) //串口接收中断服务程序
; {
	.dbline 55
;  
; 	uchar temp;
; 	temp = UDR0;
	in R20,0xc
	.dbline 60
; 	
; //	countwait = 0;
; 
; 	
; 	switch(ready_rx)
	lds R22,_ready_rx
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L15
X0:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne X2
	xjmp L22
X2:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	brne X3
	xjmp L24
X3:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne X4
	xjmp L29
X4:
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brne X5
	xjmp L35
X5:
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	brne X6
	xjmp L41
X6:
	cpi R22,10
	ldi R30,0
	cpc R23,R30
	brne X7
	xjmp L53
X7:
	xjmp L12
X1:
	.dbline 61
; 	{
L15:
	.dbline 64
; 		case 0:
; 			
; 			if(temp == 'D' )	//如果接收到显示控制命令
	cpi R20,68
	brne L16
	.dbline 65
; 				{
	.dbline 66
; 				FLAG = 0;
	clr R2
	sts _FLAG,R2
	.dbline 67
; 				ready_rx = 1;
	ldi R24,1
	sts _ready_rx,R24
	.dbline 68
; 				RX_index = 1;
	sts _RX_index,R24
	.dbline 69
; 				receivebox[0] = temp;
	sts _receivebox,R20
	.dbline 70
; 				}
	xjmp L13
L16:
	.dbline 72
; 				
; 			else if(temp == 'A')	// 接收到A打头控制命令
	cpi R20,65
	brne L18
	.dbline 73
; 			{
	.dbline 74
; 				FLAG = 0;
	clr R2
	sts _FLAG,R2
	.dbline 75
; 				ready_rx = 2;
	ldi R24,2
	sts _ready_rx,R24
	.dbline 77
; 				
; 				receivebox[0] = temp;
	sts _receivebox,R20
	.dbline 78
; 			}
	xjmp L13
L18:
	.dbline 79
; 			else if(temp ==0x43)
	cpi R20,67
	breq X8
	xjmp L13
X8:
	.dbline 80
; 			{
	.dbline 81
; 			 clean(0);
	clr R16
	xcall _clean
	.dbline 82
; 			}
	.dbline 84
; 			
; 			break;
	xjmp L13
L22:
	.dbline 86
; 		case 1:
; 			receivebox[1] = temp;		//存下亮度值
	sts _receivebox+1,R20
	.dbline 87
; 			RX_index = 2;
	ldi R24,2
	sts _RX_index,R24
	.dbline 88
; 			ready_rx = 3;
	ldi R24,3
	sts _ready_rx,R24
	.dbline 89
; 			break;
	xjmp L13
L24:
	.dbline 91
; 		case 2:
; 			if(temp=='a')
	cpi R20,97
	brne L25
	.dbline 92
; 			{ready_rx=5;receivebox[1]|=0xf0;RX_index = 14;}
	.dbline 92
	ldi R24,5
	sts _ready_rx,R24
	.dbline 92
	lds R24,_receivebox+1
	ori R24,240
	sts _receivebox+1,R24
	.dbline 92
	ldi R24,14
	sts _RX_index,R24
	.dbline 92
	xjmp L13
L25:
	.dbline 99
; 			/*else if(temp=='b')
; 			{ready_rx=6;receivebox[1]|=0x20;}
; 			else if(temp=='c')
; 			{ready_rx=7;receivebox[1]|=0x40;}
; 			else if(temp=='d')
; 			{ready_rx=8;receivebox[1]|=0x80;}*/
; 			else {ready_rx=10;receivebox[1] = temp; RX_index = 5;}
	.dbline 99
	ldi R24,10
	sts _ready_rx,R24
	.dbline 99
	sts _receivebox+1,R20
	.dbline 99
	ldi R24,5
	sts _RX_index,R24
	.dbline 99
	.dbline 101
; 			
; 			break;
	xjmp L13
L29:
	.dbline 103
; 		case 3:
; 			receivebox[2] = temp;		//存下位置值
	sts _receivebox+2,R20
	.dbline 104
; 		      if(temp==0x00)
	tst R20
	brne L31
	.dbline 105
; 			  {
	.dbline 106
; 				RX_index = 64;
	ldi R24,64
	sts _RX_index,R24
	.dbline 107
; 				ready_rx = 4;
	ldi R24,4
	sts _ready_rx,R24
	.dbline 108
; 			  }
	xjmp L13
L31:
	.dbline 109
; 			  else if((temp>0)&&(temp<5))
	clr R2
	cp R2,R20
	brsh L33
	cpi R20,5
	brsh L33
	.dbline 110
; 			  { RX_index = 16;
	.dbline 110
	ldi R24,16
	sts _RX_index,R24
	.dbline 111
; 			     ready_rx = 4;
	ldi R24,4
	sts _ready_rx,R24
	.dbline 112
; 			  }
	xjmp L13
L33:
	.dbline 114
; 			  else
; 			  { ready_rx = 0;
	.dbline 114
	clr R2
	sts _ready_rx,R2
	.dbline 115
; 			  }
	.dbline 117
; 					
; 			break;
	xjmp L13
L35:
	.dbline 119
; 		case 4:
; 		    if(receivebox[2] ==0x00)
	lds R2,_receivebox+2
	tst R2
	brne L36
	.dbline 120
; 			 {receivebox[64 - RX_index + 3] = temp;	
	.dbline 120
	lds R2,_RX_index
	clr R3
	ldi R30,64
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_receivebox+3
	ldi R25,>_receivebox+3
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 121
; 			 }
	xjmp L37
L36:
	.dbline 123
; 			else 
; 			 {receivebox[16 - RX_index + 3] = temp;
	.dbline 123
	lds R2,_RX_index
	clr R3
	ldi R30,16
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_receivebox+3
	ldi R25,>_receivebox+3
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 124
; 			 }
L37:
	.dbline 125
; 			RX_index--;
	lds R24,_RX_index
	subi R24,1
	sts _RX_index,R24
	.dbline 128
; 			//if(!(c) || (temp == 0x05))
; 			//	ready_rx = 0;
; 			break;
	xjmp L13
L41:
	.dbline 131
; 		 case 5:
; 		       
; 				RX_index--;
	lds R24,_RX_index
	subi R24,1
	sts _RX_index,R24
	.dbline 132
; 				if(RX_index==13)
	lds R24,_RX_index
	cpi R24,13
	brne L42
	.dbline 133
; 				 {zx.zhou=temp;flg|=0x10;}
	.dbline 133
	sts _zx,R20
	.dbline 133
	lds R24,_flg
	ori R24,16
	sts _flg,R24
	.dbline 133
	xjmp L13
L42:
	.dbline 134
; 				else if((RX_index>8)&&(RX_index<13))
	ldi R24,8
	lds R2,_RX_index
	cp R24,R2
	brsh L44
	lds R24,_RX_index
	cpi R24,13
	brsh L44
	.dbline 135
; 				 { zx.dunwei[12-RX_index]=temp;flg|=0x20;}
	.dbline 135
	lds R2,_RX_index
	clr R3
	ldi R30,12
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_zx+1
	ldi R25,>_zx+1
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 135
	lds R24,_flg
	ori R24,32
	sts _flg,R24
	.dbline 135
	xjmp L13
L44:
	.dbline 136
; 				else if((RX_index>4)&&(RX_index<9))
	ldi R24,4
	lds R2,_RX_index
	cp R24,R2
	brsh L47
	lds R24,_RX_index
	cpi R24,9
	brsh L47
	.dbline 137
; 				{zx.zongzhong[8-RX_index]=temp;flg|=0x40;}
	.dbline 137
	lds R2,_RX_index
	clr R3
	ldi R30,8
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_zx+5
	ldi R25,>_zx+5
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 137
	lds R24,_flg
	ori R24,64
	sts _flg,R24
	.dbline 137
	xjmp L13
L47:
	.dbline 138
; 				else if((RX_index>0)&&(RX_index<5))
	clr R2
	lds R3,_RX_index
	cp R2,R3
	brsh L13
	lds R24,_RX_index
	cpi R24,5
	brsh L13
	.dbline 139
; 				{zx.chaoxian[4-RX_index]=temp;flg|=0x80;}
	.dbline 139
	lds R2,_RX_index
	clr R3
	ldi R30,4
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_zx+9
	ldi R25,>_zx+9
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 139
	lds R24,_flg
	ori R24,128
	sts _flg,R24
	.dbline 139
	.dbline 140
; 			break;
	xjmp L13
L53:
	.dbline 144
; 			
; 		  
; 		 case 10:
; 		     RX_index--;
	lds R24,_RX_index
	subi R24,1
	sts _RX_index,R24
	.dbline 145
; 		      receivebox[5 - RX_index + 1] = temp;
	lds R2,_RX_index
	clr R3
	ldi R30,5
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_receivebox+1
	ldi R25,>_receivebox+1
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 146
; 			  if(RX_index==0) flg=0xf0;
	lds R2,_RX_index
	tst R2
	brne L13
	.dbline 146
	ldi R24,240
	sts _flg,R24
	.dbline 149
; 			//if(!(RX_index--) || (temp == 0x05))
; 			//	ready_rx = 0;
; 			break;
	xjmp L13
L12:
	.dbline 152
; 		
; 		default:
; 			ready_rx = 0;
	clr R2
	sts _ready_rx,R2
	.dbline 153
; 			RX_index = 0;
	sts _RX_index,R2
	.dbline 154
; 			break;
L13:
	.dbline 160
; 
; 	}
; 
;           	// 如果收不满16或者64字节数据,最后停止位是 0x05
; 	
;    if ( (ready_rx ==4) && (RX_index == 0) )
	lds R24,_ready_rx
	cpi R24,4
	brne L57
	lds R2,_RX_index
	tst R2
	brne L57
	.dbline 161
; 	{   //receivebox[65]=0x05;
	.dbline 162
; 		ready_rx = 0;
	clr R2
	sts _ready_rx,R2
	.dbline 163
; 		FLAG = 1;	
	ldi R24,1
	sts _FLAG,R24
	.dbline 165
; 		//uart0_txd(0xaa);	
; 	}	
L57:
	.dbline 166
;     if((RX_index == 0) &&(( ready_rx >= 5)&&( ready_rx <= 10) ))
	lds R2,_RX_index
	tst R2
	brne L59
	lds R24,_ready_rx
	cpi R24,5
	brlo L59
	ldi R24,10
	lds R2,_ready_rx
	cp R24,R2
	brlo L59
	.dbline 167
; 	{   
	.dbline 168
; 		ready_rx = 0;
	clr R2
	sts _ready_rx,R2
	.dbline 169
; 		if(flg==0xf0)
	lds R24,_flg
	cpi R24,240
	brne L61
	.dbline 170
; 		{flg=0; 
	.dbline 170
	sts _flg,R2
	.dbline 171
; 		 FLAG=1; 
	ldi R24,1
	sts _FLAG,R24
	.dbline 172
; 		}
L61:
	.dbline 173
L59:
	.dbline -2
L11:
	xcall pop_gset2
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r temp 20 c
	.dbend
	.dbfunc e uart0_txd _uart0_txd fV
;              x -> R16
	.even
_uart0_txd::
	.dbline -1
	.dbline 178

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -