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

📄 sci.s

📁 微程序控制器采用ATMEL AVR MEGA162
💻 S
字号:
	.module sci.c
	.area text(rom, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
	.dbfunc s CommDrvDefaultProc _CommDrvDefaultProc fV
;          value -> R0
	.even
_CommDrvDefaultProc:
	.dbline -1
	.dbline 5
; #include "sci.h"
; 
;   
;   
; static void CommDrvDefaultProc (register BYTE value) { (void) value; };
	.dbline 5
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym l value 0 c
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
_EvtProcedure:
	.blkw 1
	.area idata
	.word PL_CommDrvDefaultProc
	.area data(ram, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
	.dbsym s EvtProcedure _EvtProcedure pfV
	.area vector(rom, abs)
	.org 76
	jmp _UART0_RX_interrupt
	.area data(ram, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
	.area text(rom, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
	.dbfunc e UART0_RX_interrupt _UART0_RX_interrupt fV
	.even
_UART0_RX_interrupt::
	xcall push_lset
	.dbline -1
	.dbline 14
; static void (* EvtProcedure) (register BYTE value) = CommDrvDefaultProc;
; // Byte pointers of the ring buffer (FIFO)
; 
; 
; 
; #pragma interrupt_handler UART0_RX_interrupt:20
; 
; void UART0_RX_interrupt( void )
; {
	.dbline 16
; 	//BYTE a=UDR0;
;     EvtProcedure(UDR0);
	in R16,0xc
	lds R30,_EvtProcedure
	lds R31,_EvtProcedure+1
	xcall xicall
	.dbline 17
;     PORTD ^= BIT(STA);
	ldi R24,32
	in R2,0x12
	eor R2,R24
	out 0x12,R2
	.dbline -2
L2:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 80
	jmp _UART1_RX_interrupt
	.area text(rom, con, rel)
	.dbfile F:\mydoc\avrproject\icc\big162\gpseep\sci.c
	.dbfunc e UART1_RX_interrupt _UART1_RX_interrupt fV
	.even
_UART1_RX_interrupt::
	xcall push_lset
	.dbline -1
	.dbline 25
; 	//WriteComm1(a);///////////////////////////
; }
; 
; 
; #pragma interrupt_handler UART1_RX_interrupt:21
; 
; void UART1_RX_interrupt( void )
; {
	.dbline 26
; 	WriteComm0(UDR1);
	in R16,0x3
	xcall _WriteComm0
	.dbline 27
; 	PORTD ^= BIT(STC);
	ldi R24,64
	in R2,0x12
	eor R2,R24
	out 0x12,R2
	.dbline -2
L3:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e OpenComm0 _OpenComm0 fV
	.even
_OpenComm0::
	.dbline -1
	.dbline 32
; }
; 
; 
; void OpenComm0 (void)
; {
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WriteComm0 _WriteComm0 fV
;              c -> R16
	.even
_WriteComm0::
	.dbline -1
	.dbline 39
; 	
; }
; 
; 
; 
; void WriteComm0 (BYTE c)
; {
L6:
	.dbline 40
L7:
	.dbline 40
; 	while( !(UCSR0A & (1<<UDRE0)) ); 
	sbis 0xb,5
	rjmp L6
	.dbline 41
;  	UDR0=c; 
	out 0xc,R16
	.dbline 42
;     PORTD ^= BIT(STA);
	ldi R24,32
	in R2,0x12
	eor R2,R24
	out 0x12,R2
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e WriteCommStr0 _WriteCommStr0 fV
;            str -> R20,R21
	.even
_WriteCommStr0::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 46
;     //WriteComm1 (c);//////////////////////test
; }
; void WriteCommStr0 (char* str)
; {
	xjmp L11
L10:
	.dbline 48
	.dbline 49
	movw R30,R20
	ldd R16,z+0
	xcall _WriteComm0
	.dbline 50
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 51
L11:
	.dbline 47
; 	while(*str)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L10
	.dbline -2
L9:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r str 20 pc
	.dbend
	.dbfunc e ReadComm0 _ReadComm0 fc
	.even
_ReadComm0::
	.dbline -1
	.dbline 54
; 	{
; 		WriteComm0(*str);
; 		str++;
; 	}
; }
; BYTE ReadComm0 ()
; {
L14:
	.dbline 55
L15:
	.dbline 55
; 	while( !(UCSR0A & (1<<RXC0)) );  
	sbis 0xb,7
	rjmp L14
	.dbline 56
;  	return UDR0; 
	in R16,0xc
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ReadCommT0 _ReadCommT0 fc
;           time -> R16
	.even
_ReadCommT0::
	.dbline -1
	.dbline 61
; }
; 
; 
; BYTE ReadCommT0(BYTE time)
; {
	.dbline 62
; 	timerCounter = 0;
	clr R2
	sts _timerCounter,R2
	xjmp L19
L18:
	.dbline 64
; 	while(timerCounter<time)
; 	{
	.dbline 65
; 		if(UCSR0A & (1<<RXC0))
	sbis 0xb,7
	rjmp L21
	.dbline 66
; 		return UDR0; 
	in R16,0xc
	xjmp L17
L21:
	.dbline 67
L19:
	.dbline 63
	lds R2,_timerCounter
	cp R2,R16
	brlo L18
	.dbline 69
; 	}
; 	
; 	return 0;
	clr R16
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 c
	.dbend
	.dbfunc e OpenComm1 _OpenComm1 fV
	.even
_OpenComm1::
	.dbline -1
	.dbline 73
; }
; 
; void OpenComm1 (void)
; {
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WriteComm1 _WriteComm1 fV
;              c -> R16
	.even
_WriteComm1::
	.dbline -1
	.dbline 87
; 		//设置波特率19200
; 	//UBRRL = 0x0B; //set baud rate lo
; 	//UBRRH = 0x00; //set baud rate hi
; 		//设置帧格式: 8个数据位, 1个停止位
; 	//UCSRC = (1<<URSEL)|(3<<UCSZ0);	
; 		//接收器与发送器使能
;  	//UCSRB = (1<<RXEN)|(1<<TXEN|1<<RXCIE);
; 	//UCSRB = (1<<RXEN)|(1<<TXEN);
; }
; 
; 
; 
; void WriteComm1 (BYTE c)
; {
L25:
	.dbline 88
L26:
	.dbline 88
; 	while( !(UCSR1A & (1<<UDRE1)) ); 
	sbis 0x2,5
	rjmp L25
	.dbline 89
;  	UDR1=c; 
	out 0x3,R16
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e WriteCommStr1 _WriteCommStr1 fV
;            str -> R20,R21
	.even
_WriteCommStr1::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 92
; }
; void WriteCommStr1 (char* str)
; {
	xjmp L30
L29:
	.dbline 94
	.dbline 95
	movw R30,R20
	ldd R16,z+0
	xcall _WriteComm1
	.dbline 96
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 97
L30:
	.dbline 93
; 	while(*str)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L29
	.dbline -2
L28:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r str 20 pc
	.dbend
	.dbfunc e ReadComm1 _ReadComm1 fc
	.even
_ReadComm1::
	.dbline -1
	.dbline 100
; 	{
; 		WriteComm1(*str);
; 		str++;
; 	}
; }
; BYTE ReadComm1 ()
; {
L33:
	.dbline 101
L34:
	.dbline 101
; 	while( !(UCSR1A & (1<<RXC1)) );  
	sbis 0x2,7
	rjmp L33
	.dbline 102
;  	return UDR1; 
	in R16,0x3
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ReadCommT1 _ReadCommT1 fc
;           time -> R16
	.even
_ReadCommT1::
	.dbline -1
	.dbline 107
; }
; 
; 
; BYTE ReadCommT1(BYTE time)
; {
	.dbline 108
; 	timerCounter = 0;
	clr R2
	sts _timerCounter,R2
	xjmp L38
L37:
	.dbline 110
; 	while(timerCounter<time)
; 	{
	.dbline 111
; 		if(UCSR1A & (1<<RXC1))
	sbis 0x2,7
	rjmp L40
	.dbline 112
; 		return UDR1; 
	in R16,0x3
	xjmp L36
L40:
	.dbline 113
L38:
	.dbline 109
	lds R2,_timerCounter
	cp R2,R16
	brlo L37
	.dbline 115
; 	}
; 	
; 	return 0;
	clr R16
	.dbline -2
L36:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 c
	.dbend
	.dbfunc e setCommEventProc _setCommEventProc fV
;           Proc -> R16,R17
	.even
_setCommEventProc::
	.dbline -1
	.dbline 120
; }
; 
; 
; void setCommEventProc (EventProc Proc) 
; {
	.dbline 122
; //    disable ();
;     EvtProcedure = Proc;
	sts _EvtProcedure+1,R17
	sts _EvtProcedure,R16
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbsym r Proc 16 pfV
	.dbend
	.area func_lit
PL_CommDrvDefaultProc:	.word `_CommDrvDefaultProc

⌨️ 快捷键说明

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