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

📄 usart.s

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 S
字号:
	.module usart.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
	.dbfunc e USART_Init _USART_Init fV
	.even
_USART_Init::
	.dbline -1
	.dbline 19
; //***************************************************************************
; 
; #include <iom8v.h>
; #include <macros.h>
; #include "usart.h"
; 
; /*****************************************************************************
; *
; *   Function name : USART_Init
; *
; *   Returns :       None
; *
; *   Parameters :    unsigned int baudrate
; *
; *   Purpose :       Initialize the USART
; *
; *****************************************************************************/
; void USART_Init()
; {
	.dbline 21
; 	   // Set baud rate (38.4k)EXT OSC = 3.6864M
; 	  UBRRH = 0x00;
	clr R2
	out 0x20,R2
	.dbline 22
; 	  UBRRL = 0x01;      
	ldi R24,1
	out 0x9,R24
	.dbline 24
; 	
; 	  UCSRB = (1 << RXEN)|(1<<TXEN);    //RXEN->enable usrt recieving;
	ldi R24,24
	out 0xa,R24
	.dbline 26
; 	  // Set frame format : 8data, 1stop bits 
; 	  UCSRC = (1<<URSEL) | (0 << USBS) | (3 << UCSZ0);
	ldi R24,134
	out 0x20,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Usart_Tx _Usart_Tx fV
;           data -> R16
	.even
_Usart_Tx::
	.dbline -1
	.dbline 42
; }
; 
; 
; /*****************************************************************************
; *
; *   Function name : Usart_Tx
; *
; *   Returns :       None
; *
; *   Parameters :    char data: byte to send
; *
; *   Purpose :       Send one byte through the USART
; *
; *****************************************************************************/
; void Usart_Tx(char data)
; {
L3:
	.dbline 43
L4:
	.dbline 43
;     while (!(UCSRA & (1<<UDRE)));
	sbis 0xb,5
	rjmp L3
	.dbline 44
;     UDR = data;
	out 0xc,R16
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e Usart_TxData _Usart_TxData fV
;          iTemp -> R20,R21
;           data -> R20
;         iValue -> R22,R23
	.even
_Usart_TxData::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 47
; }
; void Usart_TxData(unsigned int iValue)
; {
	.dbline 50
;     char data;
; 	unsigned int iTemp;
; 	iTemp = iValue;
	movw R20,R22
	.dbline 51
; 	data = (iTemp >> 8) & 0xff;
	mov R20,R21
	clr R21
	andi R21,0
	.dbline 52
; 	Usart_Tx(data);
	mov R16,R20
	rcall _Usart_Tx
	.dbline 53
; 	data = iValue & 0xff;
	mov R20,R22
	andi R21,0
	.dbline 54
; 	Usart_Tx(data);
	mov R16,R20
	rcall _Usart_Tx
	.dbline -2
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r iTemp 20 i
	.dbsym r data 20 c
	.dbsym r iValue 22 i
	.dbend
	.dbfunc e Usart_Command _Usart_Command fV
;     ComCounter -> <dead>
;              J -> R22
;      num_bytes -> R10
;        command -> R20,R21
	.even
_Usart_Command::
	rcall push_gset3
	mov R10,R18
	movw R20,R16
	.dbline -1
	.dbline 57
; }
; void Usart_Command(char *command, char num_bytes)
; {
	.dbline 60
;     unsigned char J;
; 	char ComCounter;
; 	  for (J = 0; J < num_bytes; J++)
	clr R22
	rjmp L11
L8:
	.dbline 61
	.dbline 62
	mov R30,R22
	clr R31
	add R30,R20
	adc R31,R21
	ldd R16,z+0
	rcall _Usart_Tx
	.dbline 63
L9:
	.dbline 60
	inc R22
L11:
	.dbline 60
	cp R22,R10
	brlo L8
	.dbline -2
L7:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l ComCounter 1 c
	.dbsym r J 22 c
	.dbsym r num_bytes 10 c
	.dbsym r command 20 pc
	.dbend
	.dbfunc e Usart_Rx _Usart_Rx fc
;           data -> <dead>
;       iCounter -> R20,R21
	.even
_Usart_Rx::
	rcall push_gset1
	.dbline -1
	.dbline 77
; 	  {
; 	    Usart_Tx(command[J]);
; 	  }
; }
; /*****************************************************************************
; *
; *   Function name : Usart_Rx
; *
; *   Returns :       char: byte received
; *
; *   Parameters :    None
; *
; *   Purpose :       Receives one byte from the USART
; *
; *****************************************************************************/
; char Usart_Rx(void)
; {
	.dbline 80
;     int iCounter;
; 	char data;
; 	iCounter = 0;
	clr R20
	clr R21
	rjmp L14
L13:
	.dbline 82
; 	while (!(UCSRA & (1<<RXC)))
; 	{
	.dbline 83
; 	    Delay(5);
	ldi R16,5
	ldi R17,0
	rcall _Delay
	.dbline 84
; 		iCounter++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 85
; 		if (iCounter > 60000) break;
	ldi R24,60000
	ldi R25,234
	cp R24,R20
	cpc R25,R21
	brsh L16
	.dbline 85
	rjmp L15
L16:
	.dbline 86
L14:
	.dbline 81
	sbis 0xb,7
	rjmp L13
L15:
	.dbline 87
; 	}
; 	return UDR;
	in R16,0xc
	.dbline -2
L12:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l data 1 c
	.dbsym r iCounter 20 I
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _Usart_Rx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
	.dbfunc e Usart_Rx_isr _Usart_Rx_isr fV
;           data -> R0
	.even
_Usart_Rx_isr::
	.dbline -1
	.dbline 92
; }
; //*****************************************************************************/
; #pragma interrupt_handler Usart_Rx_isr:12
; void Usart_Rx_isr(void)
; {
	.dbline -2
L18:
	.dbline 0 ; func end
	reti
	.dbsym l data 1 c
	.dbend

⌨️ 快捷键说明

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