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

📄 main.s

📁 本实例实现GSM模块的发送短消息
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area vector(rom, abs)
	.org 44
	jmp _uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\sim340_e/uart1.h
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
	.even
_uart0_tx_isr::
	xcall push_lset
	.dbline -1
	.dbline 41
; #include "iom32v.h"
; #include <macros.h>
; #include "uart1.h"
; #include "UART.h"
; #include "globle_temp.h"
; //#include "sim340.h"
; //端口初始化
; void port_init(void)
; {
;  PORTA = 0x00;
;  DDRA  = 0x00;
;  PORTB = 0x00;
;  DDRB  = 0x00;
;  PORTC = 0x00; 
;  DDRC  = 0x00;
;  PORTD = 0x00;
;  DDRD  = 0x00;
; }
; //串口初始化
; void  uart0_init(void)
; {
;   //USART初始化
;   UCSRB = 0x00;
;   UCSRA=0x00;  //设置通信参数:8位数据位,1位停止位,无校验位
;   UCSRC=0x86;  //选择寄存器C
;   UBRRH =(unsigned char)(baud_set>>8);//设置波特率
;   UBRRL =(unsigned char)baud_set;
;   UCSRB=0xD8;  //接收、发送数据使能,并允许中断
; }
; //设备初始化
; void init_devices(void)
; {
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
;  port_init();
;  uart0_init();
; 
;  MCUCR = 0x00;
;  GICR  = 0x00;
;  TIMSK = 0x00; //timer interrupt sources
;  SEI(); //re-enable interrupts
	.dbline 43
;  //all peripherals are now initialized
; }
	lds R2,_tx_counter
	tst R2
	breq L2
	.dbline 44
; void  main(void)
	.dbline 45
; {
	mov R24,R2
	subi R24,1
	sts _tx_counter,R24
	.dbline 46
;  int  nLen1;      //发送短消息时的命令编码长度
	ldi R24,<_tx_buffer
	ldi R25,>_tx_buffer
	lds R30,_tx_rd_index
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 47
;  int  nLen2;      //发送短消息的PDU编码长度
	ldi R16,5
	ldi R17,0
	xcall _delay_nus
	.dbline 48
;  char pOut1[40];  //命令代码缓冲区
	lds R24,_tx_rd_index
	subi R24,255    ; addi 1
	mov R2,R24
	sts _tx_rd_index,R2
	cpi R24,200
	brne L4
	.dbline 48
	clr R2
	sts _tx_rd_index,R2
L4:
	.dbline 49
L2:
	.dbline -2
L1:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\sim340_e/uart1.h
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;           data -> R16
;         status -> R18
	.even
_uart0_rx_isr::
	st -y,R2
	st -y,R16
	st -y,R18
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 54
;  char pOut2[200]; //PDU编码缓冲区
;  char PhoneNumber[13]={'8','6','1','5','9','6','1','1','5','2','1','3','7'};
;  int  nPhone;   //被叫用户的手机号码和长度
;  char pBuf[6]={'H','E','L','L','O','!'};//发送数据的内容和长度
;  int   data_Len;
;  char UART0_RX_Temp[200];	// 串口 0 的接收缓冲区
	.dbline 57
;  int  n_tx0_length;         //要发送的数据长度
;  int  i;
;  char nSend;                //发送成功标志
	in R18,0xb
	.dbline 58
;  nPhone=13;
	in R16,0xc
	.dbline 59
;  data_Len=6;
	mov R24,R18
	andi R24,28
	brne L7
	.dbline 60
;  //uart0_init();               //串口初始化
	.dbline 61
;  //DDRB|=0x20;                 //打开B口第五位作为输出
	ldi R24,<_rx_buffer
	ldi R25,>_rx_buffer
	lds R30,_rx_wr_index
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 62
;  //PORTB|=(1<<bit5);
	lds R24,_rx_wr_index
	subi R24,255    ; addi 1
	mov R2,R24
	sts _rx_wr_index,R2
	cpi R24,200
	brne L9
	.dbline 63
;  //#asm("sei");  //使能全局中断
	clr R2
	sts _rx_wr_index,R2
L9:
	.dbline 64
;  init_devices();
	lds R24,_rx_counter
	subi R24,255    ; addi 1
	mov R2,R24
	sts _rx_counter,R2
	cpi R24,200
	brne L11
	.dbline 65
;  DDRB|=0x20;                  //打开B口第五位作为输出
	.dbline 66
;  PORTB|=(1<<bit5);
	clr R2
	sts _rx_counter,R2
	.dbline 67
;  DDRA|=0x04;                  //打开A口第二位作为输出
	ldi R24,1
	sts _rx_buffer_overflow,R24
	.dbline 68
;  PORTA|=(1<<2);
L11:
	.dbline 70
L7:
	.dbline -2
L6:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R18,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r data 16 c
	.dbsym r status 18 c
	.dbend
	.dbfunc e getchar _getchar fc
;           data -> R16
	.even
_getchar::
	.dbline -1
	.dbline 75
;  DDRA|=0x10;                  //A口第4位输出,为模块上电
;  PORTA&=~(1<<4);
;  n_tx0_length=readcsca(uart0_tx_buf);  //读取短消息中心号码命令
;  putstring(uart0_tx_buf,n_tx0_length);  //发送读短消息中心号码命令
;  getstring(UART0_RX_Temp);              //等待接收
;  sca_len=GetPhone(UART0_RX_Temp,sca);   //获取电话号码
;  sca[sca_len]='F';                      //在末位加'F'
L14:
	.dbline 77
L15:
	.dbline 77
;  n_tx0_length = setCmgf(uart0_tx_buf); //设置短消息模式位‘0’
;  putstring(uart0_tx_buf,n_tx0_length); //发送命令串 
	lds R2,_rx_counter
	tst R2
	breq L14
	.dbline 78
;  //delay_nms(500);	   
	ldi R24,<_rx_buffer
	ldi R25,>_rx_buffer
	lds R30,_rx_rd_index
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	.dbline 79
; 	for(;;)
	lds R24,_rx_rd_index
	subi R24,255    ; addi 1
	mov R2,R24
	sts _rx_rd_index,R2
	cpi R24,200
	brne L17
	.dbline 79
	clr R2
	sts _rx_rd_index,R2
L17:
	.dbline 81
;     {   
; 			//发送对方的电话号码和信息,并返回发送的命令串和信息的PDU编码
	lds R24,_rx_counter
	subi R24,1
	sts _rx_counter,R24
	.dbline 83
;     	    SendMsm(PhoneNumber,nPhone,pBuf,data_Len,&nLen1,&nLen2,pOut1,pOut2,sca,sca_len);
;     	    putstring(pOut1,nLen1);
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e getstring _getstring fV
;              i -> R20,R21
;             in -> R22,R23
	.even
_getstring::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 86
;     	    //等待"> "
;     	    for(;;)
;     	    {
	.dbline 87
;     	    	if(Uart_RecvFlag == 1)
	clr R20
	clr R21
	xjmp L21
L20:
	.dbline 89
	.dbline 90
	xcall _getchar
	movw R30,R20
	add R30,R22
	adc R31,R23
	std z+0,R16
	.dbline 91
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 92
L21:
	.dbline 88
;     	    	{
	lds R2,_rx_counter
	tst R2
	brne L20
	.dbline -2
L19:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r in 22 pc
	.dbend
	.dbfunc e putchar _putchar fV
;       transmit -> R16
	.even
_putchar::
	.dbline -1
	.dbline 97
;     	    	    Uart_RecvFlag = 0;
;     	    	    for(i = 0;i < nRX0_Len;i++)
; 	                 {
; 		               UART0_RX_Temp[i] = rx_buffer[i];
; 	                 }
;     	    	    if(nRX0_Len >= 2)
;     	    	    {
;     	    	    	if((UART0_RX_Temp[0] == 62)   //如果是"> ",则发送PDU编码
;     	    	    	   && (UART0_RX_Temp[1] == 32))
L24:
	.dbline 98
L25:
	.dbline 98
;     	    	    	{
	lds R24,_tx_counter
	cpi R24,200
	breq L24
	.dbline 100
; 						    putstring(pOut2,nLen2);
;     	    	    	    nSend = 1;
	tst R24
	brne L29
	sbic 0xb,5
	rjmp L27
L29:
	.dbline 101
;     	    	    	    break;
	.dbline 102
;     	    	    	}
	ldi R24,<_tx_buffer
	ldi R25,>_tx_buffer
	lds R30,_tx_wr_index
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 103
;     	    	    }
	lds R24,_tx_wr_index
	subi R24,255    ; addi 1
	mov R2,R24
	sts _tx_wr_index,R2
	cpi R24,200
	brne L30
	.dbline 103
	clr R2
	sts _tx_wr_index,R2
L30:
	.dbline 104
;     	    	    else 
	lds R24,_tx_counter
	subi R24,255    ; addi 1
	sts _tx_counter,R24
	.dbline 105
;     	    	    {
	xjmp L28
L27:
	.dbline 106
	out 0xc,R16
L28:
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbsym r transmit 16 c
	.dbend
	.dbfunc e putstring _putstring fV
;              i -> R20,R21
;            len -> R22,R23
;             in -> R10,R11
	.even
_putstring::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 110
;     	    	    	nSend = 0;
;     	    	    	break;
;     	    	    }
;     	    	    
;     	    	}
	.dbline 112
;     	    	
;     	    }
	cpi R22,0
	cpc R22,R23
	brne L33
X0:
	.dbline 112
	xjmp L32
L33:
	.dbline 113
;     	    for(i = 0;i < nLen2;i++) 
	clr R20
	clr R21
	xjmp L38
L35:
	.dbline 114
	.dbline 115
	movw R30,R20
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _putchar
	.dbline 116
L36:
	.dbline 113
	subi R20,255  ; offset = 1
	sbci R21,255
L38:
	.dbline 113
	cp R20,R22
	cpc R21,R23
	brlt L35
	.dbline -2
L32:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r len 22 I
	.dbsym r in 10 pc
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\sim340_e\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 9
	.dbline 10
	clr R2
	out 0x1b,R2
	.dbline 11
	out 0x1a,R2
	.dbline 12
	out 0x18,R2
	.dbline 13
	out 0x17,R2
	.dbline 14
	out 0x15,R2
	.dbline 15
	out 0x14,R2
	.dbline 16
	out 0x12,R2
	.dbline 17
	out 0x11,R2

⌨️ 快捷键说明

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