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

📄 main.lis

📁 本实例实现GSM模块的发送短消息
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area vector(rom, abs)
                        .org 44
 002C 0C940000          jmp _uart0_tx_isr
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\sim340_e/uart1.h
 0000                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 0000           _uart0_tx_isr::
 0000 0E940000          xcall push_lset
 0004                   .dbline -1
 0004                   .dbline 41
 0004           ; #include "iom32v.h"
 0004           ; #include <macros.h>
 0004           ; #include "uart1.h"
 0004           ; #include "UART.h"
 0004           ; #include "globle_temp.h"
 0004           ; //#include "sim340.h"
 0004           ; //端口初始化
 0004           ; void port_init(void)
 0004           ; {
 0004           ;  PORTA = 0x00;
 0004           ;  DDRA  = 0x00;
 0004           ;  PORTB = 0x00;
 0004           ;  DDRB  = 0x00;
 0004           ;  PORTC = 0x00; 
 0004           ;  DDRC  = 0x00;
 0004           ;  PORTD = 0x00;
 0004           ;  DDRD  = 0x00;
 0004           ; }
 0004           ; //串口初始化
 0004           ; void  uart0_init(void)
 0004           ; {
 0004           ;   //USART初始化
 0004           ;   UCSRB = 0x00;
 0004           ;   UCSRA=0x00;  //设置通信参数:8位数据位,1位停止位,无校验位
 0004           ;   UCSRC=0x86;  //选择寄存器C
 0004           ;   UBRRH =(unsigned char)(baud_set>>8);//设置波特率
 0004           ;   UBRRL =(unsigned char)baud_set;
 0004           ;   UCSRB=0xD8;  //接收、发送数据使能,并允许中断
 0004           ; }
 0004           ; //设备初始化
 0004           ; void init_devices(void)
 0004           ; {
 0004           ;  //stop errant interrupts until set up
 0004           ;  CLI(); //disable all interrupts
 0004           ;  port_init();
 0004           ;  uart0_init();
 0004           ; 
 0004           ;  MCUCR = 0x00;
 0004           ;  GICR  = 0x00;
 0004           ;  TIMSK = 0x00; //timer interrupt sources
 0004           ;  SEI(); //re-enable interrupts
 0004                   .dbline 43
 0004           ;  //all peripherals are now initialized
 0004           ; }
 0004 2090AD01          lds R2,_tx_counter
 0008 2220              tst R2
 000A E1F0              breq L2
 000C                   .dbline 44
 000C           ; void  main(void)
 000C                   .dbline 45
 000C           ; {
 000C 822D              mov R24,R2
 000E 8150              subi R24,1
 0010 8093AD01          sts _tx_counter,R24
 0014                   .dbline 46
 0014           ;  int  nLen1;      //发送短消息时的命令编码长度
 0014 80E0              ldi R24,<_tx_buffer
 0016 90E0              ldi R25,>_tx_buffer
 0018 E091AE01          lds R30,_tx_rd_index
 001C FF27              clr R31
 001E E80F              add R30,R24
 0020 F91F              adc R31,R25
 0022 2080              ldd R2,z+0
 0024 2CB8              out 0xc,R2
 0026                   .dbline 47
 0026           ;  int  nLen2;      //发送短消息的PDU编码长度
 0026 05E0              ldi R16,5
 0028 10E0              ldi R17,0
 002A 0E940000          xcall _delay_nus
 002E                   .dbline 48
 002E           ;  char pOut1[40];  //命令代码缓冲区
 002E 8091AE01          lds R24,_tx_rd_index
 0032 8F5F              subi R24,255    ; addi 1
 0034 282E              mov R2,R24
 0036 2092AE01          sts _tx_rd_index,R2
 003A 883C              cpi R24,200
 003C 19F4              brne L4
 003E                   .dbline 48
 003E 2224              clr R2
 0040 2092AE01          sts _tx_rd_index,R2
 0044           L4:
 0044                   .dbline 49
 0044           L2:
 0044                   .dbline -2
 0044           L1:
 0044 0E940000          xcall pop_lset
 0048                   .dbline 0 ; func end
 0048 1895              reti
 004A                   .dbend
                        .area vector(rom, abs)
                        .org 36
 0024 0C942500          jmp _uart0_rx_isr
                        .area text(rom, con, rel)
 004A                   .dbfile C:\DOCUME~1\Administrator\桌面\sim340_e/uart1.h
 004A                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 004A           ;           data -> R16
 004A           ;         status -> R18
                        .even
 004A           _uart0_rx_isr::
 004A 2A92              st -y,R2
 004C 0A93              st -y,R16
 004E 2A93              st -y,R18
 0050 8A93              st -y,R24
 0052 9A93              st -y,R25
 0054 EA93              st -y,R30
 0056 FA93              st -y,R31
 0058 2FB6              in R2,0x3f
 005A 2A92              st -y,R2
 005C                   .dbline -1
 005C                   .dbline 54
 005C           ;  char pOut2[200]; //PDU编码缓冲区
 005C           ;  char PhoneNumber[13]={'8','6','1','5','9','6','1','1','5','2','1','3','7'};
 005C           ;  int  nPhone;   //被叫用户的手机号码和长度
 005C           ;  char pBuf[6]={'H','E','L','L','O','!'};//发送数据的内容和长度
 005C           ;  int   data_Len;
 005C           ;  char UART0_RX_Temp[200];     // 串口 0 的接收缓冲区
 005C                   .dbline 57
 005C           ;  int  n_tx0_length;         //要发送的数据长度
 005C           ;  int  i;
 005C           ;  char nSend;                //发送成功标志
 005C 2BB1              in R18,0xb
 005E                   .dbline 58
 005E           ;  nPhone=13;
 005E 0CB1              in R16,0xc
 0060                   .dbline 59
 0060           ;  data_Len=6;
 0060 822F              mov R24,R18
 0062 8C71              andi R24,28
 0064 09F5              brne L7
 0066                   .dbline 60
 0066           ;  //uart0_init();               //串口初始化
 0066                   .dbline 61
 0066           ;  //DDRB|=0x20;                 //打开B口第五位作为输出
 0066 80E0              ldi R24,<_rx_buffer
 0068 90E0              ldi R25,>_rx_buffer
 006A E0911A00          lds R30,_rx_wr_index
 006E FF27              clr R31
 0070 E80F              add R30,R24
 0072 F91F              adc R31,R25
 0074 0083              std z+0,R16
 0076                   .dbline 62
 0076           ;  //PORTB|=(1<<bit5);
 0076 80911A00          lds R24,_rx_wr_index
 007A 8F5F              subi R24,255    ; addi 1
 007C 282E              mov R2,R24
 007E 20921A00          sts _rx_wr_index,R2
 0082 883C              cpi R24,200
 0084 19F4              brne L9
 0086                   .dbline 63
 0086           ;  //#asm("sei");  //使能全局中断
 0086 2224              clr R2
 0088 20921A00          sts _rx_wr_index,R2
 008C           L9:
 008C                   .dbline 64
 008C           ;  init_devices();
 008C 80911B00          lds R24,_rx_counter
 0090 8F5F              subi R24,255    ; addi 1
 0092 282E              mov R2,R24
 0094 20921B00          sts _rx_counter,R2
 0098 883C              cpi R24,200
 009A 31F4              brne L11
 009C                   .dbline 65
 009C           ;  DDRB|=0x20;                  //打开B口第五位作为输出
 009C                   .dbline 66
 009C           ;  PORTB|=(1<<bit5);
 009C 2224              clr R2
 009E 20921B00          sts _rx_counter,R2
 00A2                   .dbline 67
 00A2           ;  DDRA|=0x04;                  //打开A口第二位作为输出
 00A2 81E0              ldi R24,1
 00A4 80931800          sts _rx_buffer_overflow,R24
 00A8                   .dbline 68
 00A8           ;  PORTA|=(1<<2);
 00A8           L11:
 00A8                   .dbline 70
 00A8           L7:
 00A8                   .dbline -2
 00A8           L6:
 00A8 2990              ld R2,y+
 00AA 2FBE              out 0x3f,R2
 00AC F991              ld R31,y+
 00AE E991              ld R30,y+
 00B0 9991              ld R25,y+
 00B2 8991              ld R24,y+
 00B4 2991              ld R18,y+
 00B6 0991              ld R16,y+
 00B8 2990              ld R2,y+
 00BA                   .dbline 0 ; func end
 00BA 1895              reti
 00BC                   .dbsym r data 16 c
 00BC                   .dbsym r status 18 c
 00BC                   .dbend
 00BC                   .dbfunc e getchar _getchar fc
 00BC           ;           data -> R16
                        .even
 00BC           _getchar::
 00BC                   .dbline -1
 00BC                   .dbline 75
 00BC           ;  DDRA|=0x10;                  //A口第4位输出,为模块上电
 00BC           ;  PORTA&=~(1<<4);
 00BC           ;  n_tx0_length=readcsca(uart0_tx_buf);  //读取短消息中心号码命令
 00BC           ;  putstring(uart0_tx_buf,n_tx0_length);  //发送读短消息中心号码命令
 00BC           ;  getstring(UART0_RX_Temp);              //等待接收
 00BC           ;  sca_len=GetPhone(UART0_RX_Temp,sca);   //获取电话号码
 00BC           ;  sca[sca_len]='F';                      //在末位加'F'
 00BC           L14:
 00BC                   .dbline 77
 00BC           L15:
 00BC                   .dbline 77
 00BC           ;  n_tx0_length = setCmgf(uart0_tx_buf); //设置短消息模式位‘0’
 00BC           ;  putstring(uart0_tx_buf,n_tx0_length); //发送命令串 
 00BC 20901B00          lds R2,_rx_counter
 00C0 2220              tst R2
 00C2 E1F3              breq L14
 00C4                   .dbline 78
 00C4           ;  //delay_nms(500);       
 00C4 80E0              ldi R24,<_rx_buffer
 00C6 90E0              ldi R25,>_rx_buffer
 00C8 E0911900          lds R30,_rx_rd_index
 00CC FF27              clr R31
 00CE E80F              add R30,R24
 00D0 F91F              adc R31,R25
 00D2 0081              ldd R16,z+0
 00D4                   .dbline 79
 00D4           ;       for(;;)
 00D4 80911900          lds R24,_rx_rd_index
 00D8 8F5F              subi R24,255    ; addi 1
 00DA 282E              mov R2,R24
 00DC 20921900          sts _rx_rd_index,R2
 00E0 883C              cpi R24,200
 00E2 19F4              brne L17
 00E4                   .dbline 79
 00E4 2224              clr R2
 00E6 20921900          sts _rx_rd_index,R2
 00EA           L17:
 00EA                   .dbline 81
 00EA           ;     {   
 00EA           ;                       //发送对方的电话号码和信息,并返回发送的命令串和信息的PDU编码
 00EA 80911B00          lds R24,_rx_counter
 00EE 8150              subi R24,1
 00F0 80931B00          sts _rx_counter,R24
 00F4                   .dbline 83
 00F4           ;           SendMsm(PhoneNumber,nPhone,pBuf,data_Len,&nLen1,&nLen2,pOut1,pOut2,sca,sca_len);
 00F4           ;           putstring(pOut1,nLen1);
 00F4                   .dbline -2
 00F4           L13:
 00F4                   .dbline 0 ; func end
 00F4 0895              ret
 00F6                   .dbsym r data 16 c
 00F6                   .dbend
 00F6                   .dbfunc e getstring _getstring fV
 00F6           ;              i -> R20,R21
 00F6           ;             in -> R22,R23
                        .even
 00F6           _getstring::
 00F6 0E940000          xcall push_gset2
 00FA B801              movw R22,R16
 00FC                   .dbline -1
 00FC                   .dbline 86
 00FC           ;           //等待"> "
 00FC           ;           for(;;)
 00FC           ;           {
 00FC                   .dbline 87
 00FC           ;               if(Uart_RecvFlag == 1)
 00FC 4427              clr R20
 00FE 5527              clr R21
 0100 07C0              xjmp L21
 0102           L20:
 0102                   .dbline 89
 0102                   .dbline 90
 0102 DCDF              xcall _getchar
 0104 FA01              movw R30,R20
 0106 E60F              add R30,R22
 0108 F71F              adc R31,R23
 010A 0083              std z+0,R16
 010C                   .dbline 91
 010C 4F5F              subi R20,255  ; offset = 1
 010E 5F4F              sbci R21,255
 0110                   .dbline 92
 0110           L21:
 0110                   .dbline 88
 0110           ;               {
 0110 20901B00          lds R2,_rx_counter
 0114 2220              tst R2
 0116 A9F7              brne L20
 0118                   .dbline -2
 0118           L19:
 0118 0E940000          xcall pop_gset2
 011C                   .dbline 0 ; func end
 011C 0895              ret
 011E                   .dbsym r i 20 I
 011E                   .dbsym r in 22 pc
 011E                   .dbend
 011E                   .dbfunc e putchar _putchar fV

⌨️ 快捷键说明

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