📄 main.s
字号:
.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 + -